From e3c69a805bcc0c3be693881dc495b65373f6046d Mon Sep 17 00:00:00 2001 From: billyshen Date: Tue, 24 Mar 2026 09:52:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=E7=AC=94=E8=AE=B0=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=20=E5=AE=8C=E5=96=84gogcli=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IMG-20251214113517921.png | Bin 323693 -> 0 bytes ...hat I know about Cloud Service Delivery.md | 106 --- #recycle/Work/--- 我的任务 ---.md | 67 -- .../ESM Cloud Version Upgrade Procedures.md | 15 - ...omer Onboarding Process (Control Tower).md | 16 - ... Unplanned Production Change Management.md | 15 - .../ESM Upgrade Strategy & Plan.md | 32 - ...pplication List (Version, Capabilities).md | 22 - ...Cloud Major Incident Management Process.md | 19 - .../PCS KPI & Report.md | 6 - ...rvice Offerings & Workflow Introduction.md | 22 - ...enior Manager of Cloud Service Delivery.md | 50 -- #recycle/Work/AWS → GCP.md | 65 -- #recycle/Work/Answers from ChatGPT.md | 200 ----- ...pplication Troubleshooting as a Service.md | 54 -- .../CSD/ESM Cloud Knowledge Sharing Plan.md | 22 - ...enior Manager of Cloud Service Delivery.md | 50 -- #recycle/Work/Cloud Service “Bilities”.md | 64 -- .../Work/ITOM Cloud Service Review Meeting.md | 46 -- .../Meeting Note/ESM Weekly Meeting Agenda.md | 62 -- ...Cloud Service Monthly Report - Feb 2025.md | 150 ---- ...Cloud Service Monthly Report - Jan 2025.md | 198 ----- ...Create New Customer Initial Setup Steps.md | 190 ----- .../People Manager/FY24 Goals - Shen Wei.md | 13 - ...R Execution Plan (EFS Replication Only).md | 56 -- #recycle/knowlegebase/OpenClaw-技能清单.md | 389 ---------- #recycle/knowlegebase/backup-script-usage.md | 87 --- .../knowlegebase/macmini-nas-ssh-config.md | 122 --- #recycle/knowlegebase/macmini-webdav-setup.md | 445 ----------- #recycle/knowlegebase/ubuntu2-ssh-config.md | 35 - .../openclaw/yunce/star-tasksender/SKILL.md | 161 ---- .../star-tasksender/scripts/intent_parser.py | 191 ----- .../scripts/message_builder.py | 204 ----- .../scripts/rabbitmq_sender.py | 248 ------ .../openclaw/yunce/星枢-Agent任务解耦方案.md | 709 ------------------ #recycle/xinghui/OpenClaw-技能清单.md | 389 ---------- #recycle/星枢 Agent 任务解耦技术方案.md | 446 ----------- .../AI 解决方案专家培训课程.md@SynoEAStream | Bin 163 -> 0 bytes .../AI 解决方案专家培训课程.md@SynoResource | Bin 82 -> 0 bytes ...s API data feeds - AI News.md@SynoEAStream | Bin 163 -> 0 bytes ...s API data feeds - AI News.md@SynoResource | Bin 82 -> 0 bytes .../Designing for Agentic AI.md@SynoEAStream | Bin 163 -> 0 bytes .../Designing for Agentic AI.md@SynoResource | Bin 82 -> 0 bytes ...,所有 GitHub 开源平替都找到了。.md@SynoEAStream | Bin 163 -> 0 bytes ...,所有 GitHub 开源平替都找到了。.md@SynoResource | Bin 82 -> 0 bytes ...AI Agent 三个到底什么区别?.md@SynoEAStream | Bin 163 -> 0 bytes ...AI Agent 三个到底什么区别?.md@SynoResource | Bin 82 -> 0 bytes .../Nano Banana 提示词框架.md@SynoEAStream | Bin 163 -> 0 bytes .../Nano Banana 提示词框架.md@SynoResource | Bin 82 -> 0 bytes ...Never write another prompt.md@SynoEAStream | Bin 163 -> 0 bytes ...Never write another prompt.md@SynoResource | Bin 82 -> 0 bytes .../OpenAI ChatGPT 个性化定义.md@SynoEAStream | Bin 163 -> 0 bytes .../OpenAI ChatGPT 个性化定义.md@SynoResource | Bin 82 -> 0 bytes AI/@eaDir/Untitled.md@SynoEAStream | Bin 163 -> 0 bytes AI/@eaDir/Untitled.md@SynoResource | Bin 82 -> 0 bytes AI/@eaDir/openclaw@SynoEAStream | Bin 163 -> 0 bytes ...镜头短视频制作的AI全流程解析.md@SynoEAStream | Bin 163 -> 0 bytes ...镜头短视频制作的AI全流程解析.md@SynoResource | Bin 82 -> 0 bytes ...ra接口实现视频自动化生成工作流.md@SynoEAStream | Bin 163 -> 0 bytes ...ra接口实现视频自动化生成工作流.md@SynoResource | Bin 82 -> 0 bytes .../文字生成视频网站推荐.md@SynoEAStream | Bin 163 -> 0 bytes .../文字生成视频网站推荐.md@SynoResource | Bin 82 -> 0 bytes ...pen-webui安装使用方法及常见问题解决 1.md@SynoEAStream | Bin 163 -> 0 bytes ...pen-webui安装使用方法及常见问题解决 1.md@SynoResource | Bin 82 -> 0 bytes ...𝗿𝗶𝗻𝗴 𝘁𝗵𝗲 𝗔𝗴𝗲 𝗼𝗳 𝗔𝗴𝗲𝗻𝗰𝘆 – 𝗠𝗼𝘃𝗶𝗻𝗴 𝗕𝗲𝘆𝗼𝗻𝗱 𝗔𝘂𝘁𝗼𝗺𝗮𝘁𝗶𝗼𝗻.md@SynoEAStream | Bin 163 -> 0 bytes ...𝗿𝗶𝗻𝗴 𝘁𝗵𝗲 𝗔𝗴𝗲 𝗼𝗳 𝗔𝗴𝗲𝗻𝗰𝘆 – 𝗠𝗼𝘃𝗶𝗻𝗴 𝗕𝗲𝘆𝗼𝗻𝗱 𝗔𝘂𝘁𝗼𝗺𝗮𝘁𝗶𝗼𝗻.md@SynoResource | Bin 82 -> 0 bytes AI/@eaDir/🟠API Key.md@SynoEAStream | Bin 163 -> 0 bytes AI/@eaDir/🟠API Key.md@SynoResource | Bin 82 -> 0 bytes ...OpenClaw 多 Agent 系统设计.md@SynoEAStream | Bin 163 -> 0 bytes .../OpenClaw-Agent管理指南.md@SynoEAStream | Bin 163 -> 0 bytes .../OpenClaw Agent 命名与架构设计参考文档.md | 326 -------- AI/openclaw/OpenClaw 多 Agent 系统设计.md | 574 -------------- AI/openclaw/OpenClaw-Agent管理指南.md | 194 ----- openclaw/knowledgebase/FRP 配置详细笔记.md | 4 +- .../knowledgebase}/GOG-CLI-安装配置指南.md | 101 ++- .../Ubuntu 下 OpenClaw 安装与管理指南.md | 0 76 files changed, 84 insertions(+), 6081 deletions(-) delete mode 100644 #recycle/Asset/Attachment/跨境电商/TK美国面单授权及操作流程/IMG-20251214113517921.png delete mode 100644 #recycle/Technical/Cloud & DevOps/What I know about Cloud Service Delivery.md delete mode 100644 #recycle/Work/--- 我的任务 ---.md delete mode 100644 #recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM Cloud Version Upgrade Procedures.md delete mode 100644 #recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM SaaS Customer Onboarding Process (Control Tower).md delete mode 100644 #recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM Unplanned Production Change Management.md delete mode 100644 #recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM Upgrade Strategy & Plan.md delete mode 100644 #recycle/Work/2025 ITOM Cloud Knowledge Transfer/ITOM Cloud Application List (Version, Capabilities).md delete mode 100644 #recycle/Work/2025 ITOM Cloud Knowledge Transfer/ITOM Cloud Major Incident Management Process.md delete mode 100644 #recycle/Work/2025 ITOM Cloud Knowledge Transfer/PCS KPI & Report.md delete mode 100644 #recycle/Work/2025 ITOM Cloud Knowledge Transfer/PCS Service Offerings & Workflow Introduction.md delete mode 100644 #recycle/Work/2025 ITOM Cloud Knowledge Transfer/Personal Transition Plan - Senior Manager of Cloud Service Delivery.md delete mode 100644 #recycle/Work/AWS → GCP.md delete mode 100644 #recycle/Work/Answers from ChatGPT.md delete mode 100644 #recycle/Work/CSD/ESM Cloud Application Troubleshooting as a Service.md delete mode 100644 #recycle/Work/CSD/ESM Cloud Knowledge Sharing Plan.md delete mode 100644 #recycle/Work/CSD/Personal Transition Plan - Senior Manager of Cloud Service Delivery.md delete mode 100644 #recycle/Work/Cloud Service “Bilities”.md delete mode 100644 #recycle/Work/ITOM Cloud Service Review Meeting.md delete mode 100644 #recycle/Work/Meeting Note/ESM Weekly Meeting Agenda.md delete mode 100644 #recycle/Work/Monthly Report/ITOM ESM Cloud Service Monthly Report - Feb 2025.md delete mode 100644 #recycle/Work/Monthly Report/ITOM ESM Cloud Service Monthly Report - Jan 2025.md delete mode 100644 #recycle/Work/PCS Create New Customer Initial Setup Steps.md delete mode 100644 #recycle/Work/People Manager/FY24 Goals - Shen Wei.md delete mode 100644 #recycle/Work/SG Yearly DR Execution Plan (EFS Replication Only).md delete mode 100644 #recycle/knowlegebase/OpenClaw-技能清单.md delete mode 100644 #recycle/knowlegebase/backup-script-usage.md delete mode 100644 #recycle/knowlegebase/macmini-nas-ssh-config.md delete mode 100644 #recycle/knowlegebase/macmini-webdav-setup.md delete mode 100644 #recycle/knowlegebase/ubuntu2-ssh-config.md delete mode 100644 #recycle/openclaw/yunce/star-tasksender/SKILL.md delete mode 100644 #recycle/openclaw/yunce/star-tasksender/scripts/intent_parser.py delete mode 100644 #recycle/openclaw/yunce/star-tasksender/scripts/message_builder.py delete mode 100644 #recycle/openclaw/yunce/star-tasksender/scripts/rabbitmq_sender.py delete mode 100644 #recycle/openclaw/yunce/星枢-Agent任务解耦方案.md delete mode 100644 #recycle/xinghui/OpenClaw-技能清单.md delete mode 100644 #recycle/星枢 Agent 任务解耦技术方案.md delete mode 100644 AI/@eaDir/AI 解决方案专家培训课程.md@SynoEAStream delete mode 100644 AI/@eaDir/AI 解决方案专家培训课程.md@SynoResource delete mode 100644 AI/@eaDir/Best 7 news API data feeds - AI News.md@SynoEAStream delete mode 100644 AI/@eaDir/Best 7 news API data feeds - AI News.md@SynoResource delete mode 100644 AI/@eaDir/Designing for Agentic AI.md@SynoEAStream delete mode 100644 AI/@eaDir/Designing for Agentic AI.md@SynoResource delete mode 100644 AI/@eaDir/Google 神级生产力工具,所有 GitHub 开源平替都找到了。.md@SynoEAStream delete mode 100644 AI/@eaDir/Google 神级生产力工具,所有 GitHub 开源平替都找到了。.md@SynoResource delete mode 100644 AI/@eaDir/LLMs、RAG、AI Agent 三个到底什么区别?.md@SynoEAStream delete mode 100644 AI/@eaDir/LLMs、RAG、AI Agent 三个到底什么区别?.md@SynoResource delete mode 100644 AI/@eaDir/Nano Banana 提示词框架.md@SynoEAStream delete mode 100644 AI/@eaDir/Nano Banana 提示词框架.md@SynoResource delete mode 100644 AI/@eaDir/Never write another prompt.md@SynoEAStream delete mode 100644 AI/@eaDir/Never write another prompt.md@SynoResource delete mode 100644 AI/@eaDir/OpenAI ChatGPT 个性化定义.md@SynoEAStream delete mode 100644 AI/@eaDir/OpenAI ChatGPT 个性化定义.md@SynoResource delete mode 100644 AI/@eaDir/Untitled.md@SynoEAStream delete mode 100644 AI/@eaDir/Untitled.md@SynoResource delete mode 100644 AI/@eaDir/openclaw@SynoEAStream delete mode 100644 AI/@eaDir/固定镜头短视频制作的AI全流程解析.md@SynoEAStream delete mode 100644 AI/@eaDir/固定镜头短视频制作的AI全流程解析.md@SynoResource delete mode 100644 AI/@eaDir/如何利用Sora接口实现视频自动化生成工作流.md@SynoEAStream delete mode 100644 AI/@eaDir/如何利用Sora接口实现视频自动化生成工作流.md@SynoResource delete mode 100644 AI/@eaDir/文字生成视频网站推荐.md@SynoEAStream delete mode 100644 AI/@eaDir/文字生成视频网站推荐.md@SynoResource delete mode 100644 AI/@eaDir/详细!离线部署大模型:ollama+deepseek+open-webui安装使用方法及常见问题解决 1.md@SynoEAStream delete mode 100644 AI/@eaDir/详细!离线部署大模型:ollama+deepseek+open-webui安装使用方法及常见问题解决 1.md@SynoResource delete mode 100644 AI/@eaDir/𝗔𝗜 𝗶𝘀 𝗘𝗻𝘁𝗲𝗿𝗶𝗻𝗴 𝘁𝗵𝗲 𝗔𝗴𝗲 𝗼𝗳 𝗔𝗴𝗲𝗻𝗰𝘆 – 𝗠𝗼𝘃𝗶𝗻𝗴 𝗕𝗲𝘆𝗼𝗻𝗱 𝗔𝘂𝘁𝗼𝗺𝗮𝘁𝗶𝗼𝗻.md@SynoEAStream delete mode 100644 AI/@eaDir/𝗔𝗜 𝗶𝘀 𝗘𝗻𝘁𝗲𝗿𝗶𝗻𝗴 𝘁𝗵𝗲 𝗔𝗴𝗲 𝗼𝗳 𝗔𝗴𝗲𝗻𝗰𝘆 – 𝗠𝗼𝘃𝗶𝗻𝗴 𝗕𝗲𝘆𝗼𝗻𝗱 𝗔𝘂𝘁𝗼𝗺𝗮𝘁𝗶𝗼𝗻.md@SynoResource delete mode 100644 AI/@eaDir/🟠API Key.md@SynoEAStream delete mode 100644 AI/@eaDir/🟠API Key.md@SynoResource delete mode 100644 AI/openclaw/@eaDir/OpenClaw 多 Agent 系统设计.md@SynoEAStream delete mode 100644 AI/openclaw/@eaDir/OpenClaw-Agent管理指南.md@SynoEAStream delete mode 100644 AI/openclaw/OpenClaw Agent 命名与架构设计参考文档.md delete mode 100644 AI/openclaw/OpenClaw 多 Agent 系统设计.md delete mode 100644 AI/openclaw/OpenClaw-Agent管理指南.md rename {AI/openclaw => openclaw/knowledgebase}/GOG-CLI-安装配置指南.md (70%) rename {AI/openclaw => openclaw/knowledgebase}/Ubuntu 下 OpenClaw 安装与管理指南.md (100%) diff --git a/#recycle/Asset/Attachment/跨境电商/TK美国面单授权及操作流程/IMG-20251214113517921.png b/#recycle/Asset/Attachment/跨境电商/TK美国面单授权及操作流程/IMG-20251214113517921.png deleted file mode 100644 index 6e3f255af0de0a04ff1330631d6700b78fef579d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323693 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∈94|tk&-ow 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
  • goZq6P-SdkYH- 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 ZYS`;MjwrZ=xMy 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

    h^=jRTpEE>t(qww`W74d% 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 z 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 osQpF diff --git a/#recycle/Technical/Cloud & DevOps/What I know about Cloud Service Delivery.md b/#recycle/Technical/Cloud & DevOps/What I know about Cloud Service Delivery.md deleted file mode 100644 index a80519be..00000000 --- a/#recycle/Technical/Cloud & DevOps/What I know about Cloud Service Delivery.md +++ /dev/null @@ -1,106 +0,0 @@ - -## Cloud Service Delivery - -Cloud Service Delivery encompasses **the entire lifecycle of making cloud services operational, available, secure, performant, and valuable to end-users and customers.** -**In essence, Cloud Service Delivery is the bridge between the raw capabilities of cloud technology (IaaS, PaaS, SaaS) and the reliable, secure, performant, and cost-effective services that businesses and users actually consume.** - -Cloud Service Delivery Team: -- Cloud Infrastructure Engineer -- Cloud Operation Engineer (DevOps/SRE) -- Cloud Security Specialists -- Cloud Support Engineer -- Cloud FinOps Engineer -- - -1. **Service Provisioning & Deployment:** - - Setting up cloud infrastructure (servers, storage, networking). - - Automating deployment of applications and platforms. - - Configuring services according to customer requirements. - - Managing resource allocation and scaling - - Best Practice - - - -2. **Infrastructure Management:** - - Monitoring health, performance, and capacity of compute, storage, network resources. - - Patching and updating underlying infrastructure (hypervisors, hosts). - - Managing physical data center aspects (power, cooling, hardware lifecycle) _if using private/hybrid cloud_. - - Ensuring high availability and disaster recovery setups. - - Best Practice: - - AWS CloudWatch as a data source in Grafana Monitoring Tool - - -3. **Platform Management (for PaaS):** - - Managing middleware, databases, development tools, and runtime environments. - - Ensuring platform scalability, security, and performance. - - Applying patches and updates to platform components. -4. **Application Operations & Management (for SaaS/IaaS-hosted apps):** - - Monitoring application performance, uptime, and user experience. - - Deploying application updates and bug fixes. - - Managing application configuration and secrets. - - Ensuring application scalability and resilience. - - -5. **Security & Compliance Management:** - - Implementing and managing security controls (firewalls, IDS/IPS, encryption, IAM). - - Vulnerability scanning and patch management. - - Security incident monitoring and response. - - Ensuring compliance with regulations (GDPR, HIPAA, PCI-DSS, etc.). - - Auditing and logging management. - - Best Practice - - Cloud Application WAF management - - IP white list support to tenant level - - Security Scanning - - Security Guidance - -6. **Performance & Availability Monitoring:** - - 24/7 monitoring of all service components (infrastructure, platform, application). - - Setting and tracking SLAs (Service Level Agreements) and SLOs (Service Level Objectives). - - Proactive detection and resolution of performance bottlenecks and potential failures. - - Managing incident response to outages or degradation. - - Best Practice: - - Service Availability Check (APM/BPM, New Relic, AWS CloudWatch Synthetic, Health Page) - - SLA -Service Level Agreement - 99.9% vs 99.99% [uptime](https://uptime.is/) - - SLO - Service Level Objective - - Proactive detection (Grafana Alerting different severity) - -7. **Incident & Problem Management:** - - Responding to alerts and service disruptions. - - Troubleshooting issues across the stack. - - Restoring service quickly (incident management). - - Identifying root causes and implementing permanent fixes (problem management). - - Best Practice - -8. **Change & Configuration Management:** - - Controlling and documenting changes to the cloud environment. - - Managing configurations consistently and securely (Infrastructure as Code - IaC). - - Minimizing risk associated with changes through testing and rollback plans. - -9. **Cost Management & Optimization:** - - Monitoring cloud resource consumption and spending. - - Identifying and eliminating waste (idle resources, over-provisioning). - - Right-sizing resources. - - Utilizing reserved instances or savings plans effectively. - - Providing cost visibility and reporting. - -10. **Customer Onboarding & Support:** - - Guiding new customers/users through setup and access. - - Providing user documentation and training resources. - - Operating a service desk/helpdesk for user issues and requests (ticketing system). - - Handling billing inquiries and account management. - - -11. **Service Governance & Lifecycle Management:** - - Defining service catalogs and service levels (SLAs). - - Managing the lifecycle of services (introduction, operation, retirement). - - Continuous service improvement based on metrics and feedback. - - Vendor management (for public cloud providers or third-party tools). - - Best Practice: - - - -12. **Backup, Recovery & Disaster Management:** - - Implementing and managing data backup strategies. - - Testing restore procedures. - - Maintaining and testing disaster recovery (DR) plans and infrastructure. - - Executing failover and failback procedures during disasters. -## Cloud DevOps Maturity Model - -## AIOps - - diff --git a/#recycle/Work/--- 我的任务 ---.md b/#recycle/Work/--- 我的任务 ---.md deleted file mode 100644 index a8520eac..00000000 --- a/#recycle/Work/--- 我的任务 ---.md +++ /dev/null @@ -1,67 +0,0 @@ ---- - -kanban-plugin: board - ---- - -## TikTok Shop Tasks - -- [ ] ⏫ 等营业执照下来注册TikTok Shop -- [ ] ⏫ 学习Ushop使用方法,了解整个订单流程 -- [ ] 🔼 了解一下AMZ123网站 - - -## Backlog - -- [ ] ⏫ 学习并掌握Scrapy 爬虫工具的使用方法,并结合n8n实现自动化 -- [ ] ⏫ 尝试在本地搭建text to speech 的模型 并且通过API被n8n调用 -- [ ] ⏫ 用pgAdmin连接NAS上postgres数据库 -- [ ] ⏫ 尝试在本地使用n8n来调用comfyUI实现图生图自动化 -- [ ] 🔼 Learn Google Trends Tutorials -- [ ] 🔼 学习如何使用Google趋势来查看目标国家的热门产品销售数据 -- [ ] 🔼 升级Ubuntu1 Portainer 版本 -- [ ] 🔼 有空时可以搞一下 爬虫爬 OdayDown.com的数据 -- [ ] 🔽 利用ZBook Laptop搭建第二台Ubuntu Server -- [ ] 🔽 读原子习惯,掌握好习惯 中文版先读, 再读英文版 -- [ ] 🔽 注册并试用kie.ai -- [ ] N8n调用第三方ApI 进行图片编辑 -- [ ] 了解一下SerpAPI - - -## WIP - -- [ ] ⏫ 尝试使用硅基流的 API来实现文生图,并被n8n调用 - - -## Done - -- [ ] ⏫ 用n8n创建一个workflow可以把internet的图片转存到zipline,并返回图片公共链接 -- [ ] 🔼 了解一下Homarr的具体用法 -- [ ] 🔽 逐步淘汰Cpolar的使用,并删除相关软件 - - -## Tracking - -- [ ] ⏫ 利用Qwan3-code来生成n8n代码 - - -## Archive - -- [ ] ⏫ 配置Obsidian使用ishenwei.online 域名的webdav -- [ ] ⏬ 在购买的RackNerd的VPS上安装n8n (需要额外考虑) -- [ ] ⏫ 在NAS上搭建一个图床应用 -- [ ] ⏫ 在NAS上部署https://github.com/tt-rss/tt-rss - - -## Idea - -- [ ] 🔼 利用Postgres里的RSS article数据来实现 n8n调用并通过AI来分析最新得到的RSS article给一个简报并通过邮件发送 - - - - -%% kanban:settings -``` -{"kanban-plugin":"board","list-collapse":[false,false,false,false,false,false,false]} -``` -%% \ No newline at end of file diff --git a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM Cloud Version Upgrade Procedures.md b/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM Cloud Version Upgrade Procedures.md deleted file mode 100644 index 2571731e..00000000 --- a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM Cloud Version Upgrade Procedures.md +++ /dev/null @@ -1,15 +0,0 @@ - -## 1. Review Upgrade Procedures Document with R&D team -## 2. Follow the Upgrade Procedures to perform Dev Farm upgrade validation -## 3. Send Notification to ESM Cloud Farm Customer about upcoming maintenance window -## 4. Maintenance Window Procedures -### 1. Set downtime of APM monitoring -### 2. Perform the upgrade change -### 3. Send notification to customer once all the change was done -### 4. Update Wiki Page about Version Tracking -### 5. Update System Health Page - Complete the Maintenance Window -### 6. Update PCS Product Version and Environment Version -### 7. Restore the APM monitoring and ensure all checks are good - -## 5. Monitoring the farm metrics to ensure everything is working as expected - diff --git a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM SaaS Customer Onboarding Process (Control Tower).md b/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM SaaS Customer Onboarding Process (Control Tower).md deleted file mode 100644 index 4e3de559..00000000 --- a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM SaaS Customer Onboarding Process (Control Tower).md +++ /dev/null @@ -1,16 +0,0 @@ - -Control Tower Link: https://backoffice.saas.microfocus.com/home/bl/desktop.html?TENANTID=1#/customers - -- Request Access to Control Tower -- -- Customer Order Filter - - ESM Product Filter: - ![Image](http://zipline.ishenwei.online/u/cu2uo8.png) - - APM/OpsB/NOM Product Filter -![Image](http://zipline.ishenwei.online/u/QPUhmO.png) - -- SaaS Order In Control Tower -- CS Ops Fulfill the order and generate license -- SaaS Ops team download/allocate license and close the deal -- Control Tower order status change to "Provisioned", close the deal - diff --git a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM Unplanned Production Change Management.md b/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM Unplanned Production Change Management.md deleted file mode 100644 index 973dd5dd..00000000 --- a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM Unplanned Production Change Management.md +++ /dev/null @@ -1,15 +0,0 @@ - -Wiki Page: -https://confluence.opentext.com/display/ICSD/Request+Unplanned+Change+in+Cloud+Production+Environment+Process - -R&D SA Approver -- Gong Yi (SMAX) -- Danny Tian (SMAX) -- Spinu Corneliu (SMAX) -- Moldovan Vlad -- Diana Pop (CMS) -- Bianca Voina (CMS) - -CSD Approver -- Shen Wei -- Ting Ye diff --git a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM Upgrade Strategy & Plan.md b/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM Upgrade Strategy & Plan.md deleted file mode 100644 index 469617d8..00000000 --- a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ESM Upgrade Strategy & Plan.md +++ /dev/null @@ -1,32 +0,0 @@ -## Review R&D Major Release Plan & Patch Plan -- ESM RTE: Mihaela Claudia Chis - - PI Planning Readout Slides -- ESM Patch Release Owner: Tanuj Raja Vunnava - - Patch Release Kick Off email -- Other requirement about upgrade strategy - - Demo/PoC Request - - Customer commitment etc. -## Prepare Cloud Upgrade Plan -### Design Tool -### Plan Strategy -- US2 Dev Farm Upgrade Validation - 1~2 days prior MR release date -- Shared Service - ITOM Aviator US30 staging, EU30 production, EU32 production need to be upgraded first before other consume farm upgrade -- EU3/US7 Trial/PoC Farm Upgrade - 1~ 2 weeks after GA release date, Upgrade on Monday (working day) -- US2/US24 Opentext Internal Customer Production Farm - 1st Wave Production Farm Upgrade (Maintenance Window) -- US26 - SalesForce customer need alternative upgrade date this can be negotiated with CSM and customer -- US26/US6/AP10/CA16 External Customer Production Farm - 2nd Wave Production Farm Upgrade (Maintenance Window) -- EU8/EU18/EU28/BR14/JP12 External Customer Production Farm - 3nd Wave Production Farm Upgrade (Maintenance Window) -- If ESM farm enable Operation Platform, need to upgrade Operation Platform first before upgrade ESM farm -- Considering the 1st patch release, we can consider to adopt patch upgrade direct in the upgrade maintenance window (Need to clarify the dependencies) -- Try to avoid upgrade window before key teams public holiday. Usually some critical issues will be reported on Monday/Tuesday after version upgrade. Need people standby to support troubleshooting - -### Publish and Notify the ESM Cloud Upgrade Plan -- ESM Cloud Upgrade Plan Wiki Page: https://confluence.opentext.com/display/ICSD/ESM+Cloud+Ops+Change+Calendar -- ESM Cloud Ops Change Calendar: https://opentextcorporation.sharepoint.com/sites/MFI-SMAXSaaSDevOps/Lists/ESM%20Cloud%20Calendar/calendar.aspx -- Internal Communication About ESM Cloud Upgrade Plan (Sample Email) -### Continuous to adjust the plan according to the changes -- Cancel/Postpone the upgrade according to critical defects - -### Rollback the upgrade - - diff --git a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ITOM Cloud Application List (Version, Capabilities).md b/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ITOM Cloud Application List (Version, Capabilities).md deleted file mode 100644 index a967ba19..00000000 --- a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ITOM Cloud Application List (Version, Capabilities).md +++ /dev/null @@ -1,22 +0,0 @@ - -## ESM Cloud -- ESM Farm Information: https://confluence.opentext.com/display/ICSD/ITOM+ESM+Cloud+Farm+Information -- ESM Capability Introduction - - SMAX - - UCMDB, Native SACM, SAM - - HCMX/DnD - - OO - - AC - - FinOps Classic - - FinOps OP - - Operation Platform/Optic Data Lake (ODL) - - ITOM Aviator -- ESM Farm Version Tracking: https://confluence.opentext.com/display/ICSD/ITOM+Cloud+Applications+Version+Tracking -- ESM Customer Tenant Capabilities Enablement BI Report: https://app.powerbi.com/groups/fac06a69-6340-4715-b8fe-4bdc0ca9af14/reports/cf509ffe-325f-4c1b-a507-44b93e6d85ca/ReportSection3a054e35d20b9d533d81?experience=power-bi - -## OpsB/NOM Cloud -- OpsB/NOM Cloud Deployments & Version Tracking:https://confluence.opentext.com/display/ICSD/OpsB+and+NOM+Cloud+Deployments+Version+Tracking - -## APM Cloud -- APM Farm Information: https://confluence.opentext.com/display/ICSD/ITOM+APM+AppPluse+Cloud+Farm+Information - diff --git a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ITOM Cloud Major Incident Management Process.md b/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ITOM Cloud Major Incident Management Process.md deleted file mode 100644 index 4b2cf89b..00000000 --- a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/ITOM Cloud Major Incident Management Process.md +++ /dev/null @@ -1,19 +0,0 @@ -- Major Incident Definition: https://confluence.opentext.com/display/ICSD/Major+Incident+Definition -- Major Incident Management & Best Practice: - - Identification and Detection - - Initial Assessment - - Incident Logging - - Incident in OT SM9 - - Internal Practice: Create incident in PCS - - Communication - - Identify Incident Manager - - Create team chat group and involve all stakeholders - - Keeping update status - - Resolution ----Break--- - - Oncall/Response - - Post Incident Review - - Continuous Improvement (CAPA) - - Monitoring & Alerting Enhancements - - Documentation & Knowledge base: - \ No newline at end of file diff --git a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/PCS KPI & Report.md b/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/PCS KPI & Report.md deleted file mode 100644 index a9fd05d7..00000000 --- a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/PCS KPI & Report.md +++ /dev/null @@ -1,6 +0,0 @@ -BI report: - -https://app.powerbi.com/groups/fac06a69-6340-4715-b8fe-4bdc0ca9af14/reports/1f4989a9-0127-4c6d-9375-f9dd9bda5d84/ReportSection?experience=power-bi - -PCS Dahsboard: -https://pcs.saas.microfocus.com/dashboard \ No newline at end of file diff --git a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/PCS Service Offerings & Workflow Introduction.md b/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/PCS Service Offerings & Workflow Introduction.md deleted file mode 100644 index 2a880651..00000000 --- a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/PCS Service Offerings & Workflow Introduction.md +++ /dev/null @@ -1,22 +0,0 @@ -PCS: https://pcs.saas.microfocus.com/homepage?AUTH=SAML - -ITOM Cloud Ops Assignment Group: -- SD: ESM SaaS Ops -- SD: OpsB SaaS Ops -- SD: NOM SaaS Ops -- SD: DCA SaaS Ops - - -- ITOM Cloud Service Offerings -- Service Request vs Support Request -- Entitlement/Environment/Tenant/Product -- Service/Support Request triage & workflow -- Request -> Incident -> Change -- Escalations - -BI report: - -https://app.powerbi.com/groups/fac06a69-6340-4715-b8fe-4bdc0ca9af14/reports/1f4989a9-0127-4c6d-9375-f9dd9bda5d84/ReportSection?experience=power-bi - -PCS Dahsboard: -https://pcs.saas.microfocus.com/dashboard \ No newline at end of file diff --git a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/Personal Transition Plan - Senior Manager of Cloud Service Delivery.md b/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/Personal Transition Plan - Senior Manager of Cloud Service Delivery.md deleted file mode 100644 index f26d75fb..00000000 --- a/#recycle/Work/2025 ITOM Cloud Knowledge Transfer/Personal Transition Plan - Senior Manager of Cloud Service Delivery.md +++ /dev/null @@ -1,50 +0,0 @@ - -## Role and Responsibility -#### Strategic Responsibilities -- Own the reliability and performance of multiple SaaS Application Services. (APM, BPM, OpsB, NOM, ESM, DCA, SBM, ESM FedRAMP) -- Drive cloud modernization initiatives (e.g., containerization, EKS, CI/CD automation). -- Align cloud service delivery with customer SLAs, business growth, and compliance frameworks (e.g., FedRAMP, SBM). -- Interface with Sales, Product, Security, and Compliance to support new customer onboarding and cloud architecture reviews. - -#### Operational Responsibilities -- Oversee 24x7 operation and monitoring of cloud platforms (AWS-based). -- Manage escalations, incidents, and root cause analysis. -- Coordinate patching, upgrades, hotfixes, and maintenance windows. -- Own service onboarding/offboarding workflows, including tenant provisioning and decommissioning. - -#### People Management -- Performance management and coaching of global team members. -- Run weekly team syncs, monthly reviews, and ad-hoc cross-regional escalations. - -## Cloud Applications and Cloud Services KS Sessions - -### Session 1 -- ITOM Cloud Application AWS Account Owner - - https://confluence.opentext.com/display/ICSD/ITOM+Cloud+AWS+Account+Overview - - AWS Account Admin ownership - - Responsibility of AWS Account Admin -- ITOM Cloud Application List - - ESM/ITOM Aviator/DCA/SBM: https://confluence.opentext.com/display/ICSD/ITOM+ESM+Cloud+Farm+Information - - OpsB/NOM Cloud Application List: https://confluence.opentext.com/display/ICSD/OpsB+and+NOM+Cloud+Deployments+Version+Tracking - - APM Cloud Farm List: https://confluence.opentext.com/display/ICSD/ITOM+APM+AppPluse+Cloud+Farm+Information -- ITOM Cloud FinOps - - BI Reporting: https://app.powerbi.com/groups/fac06a69-6340-4715-b8fe-4bdc0ca9af14/reports/1a3fceca-6563-4cc6-8218-d1d27f15e2f1/ReportSection?experience=power-bi - - Opentext FinOps Team AWS FinOps Dashboard -### Session 2 -- ITOM Cloud Application Version Currency - - Upgrade Plan - - ESM/FebRAMP Ops Change Calendar - - OpsB/NOM Ops Change Calendar - - Upgrade Plan Timeline - -### Session 3 - -### Session 4 - -### Session 5 - -### Session 6 - -### Session 7 - -### Session 8 diff --git a/#recycle/Work/AWS → GCP.md b/#recycle/Work/AWS → GCP.md deleted file mode 100644 index 8fbe5774..00000000 --- a/#recycle/Work/AWS → GCP.md +++ /dev/null @@ -1,65 +0,0 @@ -# AWS → GCP - -To migrate your enterprise-level SaaS application from AWS to Google Cloud, you’ll need to find equivalent Google Cloud services for the AWS services you currently use, while ensuring your architecture remains compatible. Here's a service-by-service breakdown for smooth development: - -### 1. **AWS EKS (Elastic Kubernetes Service) → Google Kubernetes Engine (GKE)** - -**Google Kubernetes Engine (GKE)** is Google Cloud’s equivalent to AWS EKS. Both manage Kubernetes clusters, offering similar features like autoscaling, security, and networking. - -- **Migration Notes**: Kubernetes manifests and Helm charts will be reusable with minimal modification, but you’ll need to handle network and security configurations specific to Google Cloud. - -### 2. **AWS RDS (Relational Database Service) → Cloud SQL / Cloud Spanner** - -- **Cloud SQL**: Supports MySQL, PostgreSQL, and SQL Server, making it a direct equivalent for most RDS instances. -- **Cloud Spanner**: If you need horizontally scalable, globally distributed databases with strong consistency, consider Cloud Spanner. -- **Migration Notes**: Database migration tools like **Database Migration Service** can help with the data migration, ensuring minimal downtime and compatibility. - -### 3. **AWS EFS (Elastic File System) → Filestore** - -**Google Cloud Filestore** is a fully managed NFS (Network File System) service similar to AWS EFS. - -- **Migration Notes**: Ensure your applications are configured to use the Filestore APIs and access paths properly. Performance tiers and network configuration will need review for alignment with your AWS EFS setup. - -### 4. **AWS S3 (Simple Storage Service) → Google Cloud Storage** - -**Google Cloud Storage** is a direct equivalent to AWS S3 for object storage, supporting multiple classes of storage with similar durability and availability guarantees. - -- **Migration Notes**: Google Cloud’s storage APIs differ slightly, so you may need to refactor your code to accommodate the differences. However, bucket management and object lifecycle policies are similar. - -### 5. **AWS Lambda (Serverless Compute) → Google Cloud Functions / Cloud Run** - -- **Google Cloud Functions**: Equivalent to AWS Lambda for small, event-driven serverless tasks. -- **Cloud Run**: If you need to run containerized microservices, **Cloud Run** (based on Knative) is a good choice for scaling container workloads. -- **Migration Notes**: Code migration is generally straightforward, though GCP uses slightly different event triggers and permission models. - -### 6. **AWS Parameter Store → Secret Manager / Cloud Key Management Service (KMS)** - -- **Secret Manager**: For storing secrets such as passwords, API keys, and tokens. -- **Cloud KMS**: For managing encryption keys and ensuring data security. -- **Migration Notes**: Similar management principles apply, but authentication and access policies will need revision to comply with Google Cloud's identity model. - -### 7. **AWS SES (Simple Email Service) → SendGrid / Mailgun (Third-party service)** - -Google Cloud doesn't have a native email service comparable to SES, so you can leverage third-party services like **SendGrid** or **Mailgun**, which integrate well with Google Cloud. - -- **Migration Notes**: Integration through APIs will require code changes, but the overall functionality will remain similar. - -### 8. **AWS CloudWatch → Google Cloud Monitoring (formerly Stackdriver)** - -**Google Cloud Monitoring** is the equivalent of AWS CloudWatch, providing observability, logging, and alerting for your infrastructure and applications. - -- **Migration Notes**: If you are heavily using AWS CloudWatch Logs, consider migrating to **Google Cloud Logging** to keep a similar flow of data. - -### Additional Considerations: - -- **IAM and Security**: AWS Identity and Access Management (IAM) maps well to Google Cloud IAM, but you'll need to refactor policies and roles. -- **Networking**: Google Cloud’s VPC is similar to AWS VPC, but you'll need to translate networking configurations (firewalls, routing, etc.) and possibly update load balancing setups, using **Google Cloud Load Balancer** in place of AWS Elastic Load Balancing (ELB). - -### Tools for Migration: - -- **Google’s Database Migration Service**: To migrate RDS databases to Cloud SQL. -- **Migrate for Compute Engine**: For VM migrations if you use EC2 instances. -- **Velostrata**: For handling live migrations of workloads. - -Would you like to dive deeper into any particular service, or need assistance on a specific migration tool or process? - diff --git a/#recycle/Work/Answers from ChatGPT.md b/#recycle/Work/Answers from ChatGPT.md deleted file mode 100644 index b4649df4..00000000 --- a/#recycle/Work/Answers from ChatGPT.md +++ /dev/null @@ -1,200 +0,0 @@ - -#### Major Incident Management Process - -Certainly! Designing a comprehensive Major Incident Management process is crucial for maintaining the reliability and availability of enterprise SaaS applications. Below is a detailed outline of the major incident management process, including procedures for handling service outages: - -### Major Incident Management Process - -#### 1. **Identification and Detection:** - -- **Automated Monitoring:** Utilize robust monitoring tools to detect anomalies, performance issues, and potential outages. -- **User Reports:** Encourage users to report issues promptly via designated channels. - -#### 2. **Incident Logging:** - -- **Centralized Logging:** Maintain a centralized incident log that captures all relevant details, timestamps, and initial impact assessment. -- **Severity Classification:** Categorize incidents based on severity to prioritize response efforts. - -#### 3. **Initial Assessment:** - -- **Incident Triage:** Quickly assemble a cross-functional incident response team, including representatives from development, operations, and support. -- **Impact Analysis:** Evaluate the scope and impact of the incident on users, systems, and business operations. - -#### 4. **Communication:** - -- **Internal Communication:** Establish communication channels for the incident response team, ensuring timely updates and coordination. -- **External Communication:** Prepare predefined messages for customers and stakeholders, providing transparency about the incident. - -#### 5. **Resolution:** - -- **Runbooks and Playbooks:** Develop detailed runbooks and playbooks for common incident scenarios, outlining step-by-step resolution procedures. -- **Escalation Procedures:** Define clear escalation paths for issues that require higher-level expertise or management attention. - -#### 6. **Post-Incident Review (PIR):** - -- **Root Cause Analysis (RCA):** Conduct a thorough RCA to identify the underlying cause of the incident. -- **Documentation:** Document the incident resolution process, lessons learned, and preventive measures for future incidents. - -#### 7. **Continuous Improvement:** - -- **Iterative Updates:** Regularly update incident response procedures based on lessons learned from past incidents. -- **Training and Drills:** Conduct regular training sessions and simulated drills to ensure the incident response team is well-prepared. - -#### 8. **Monitoring and Alerting Enhancements:** - -- **Continuous Monitoring:** Implement ongoing improvements to monitoring and alerting systems to proactively detect potential issues. -- **Automated Remediation:** Integrate automated remediation tools to address common incidents swiftly. - -#### 9. **Documentation and Knowledge Sharing:** - -- **Knowledge Base:** Maintain a comprehensive knowledge base with troubleshooting guides, FAQs, and resolutions for known issues. -- **Documentation Accessibility:** Ensure that incident response documentation is easily accessible to all team members. - -#### 10. **Review and Audit:** - -- **Periodic Audits:** Conduct periodic reviews and audits of the major incident management process to identify areas for improvement. -- **Compliance Checks:** Ensure that the process aligns with industry best practices and regulatory requirements. - -This Major Incident Management process should be regularly reviewed and updated to adapt to evolving technologies and organizational needs. Regular training and communication exercises will help maintain a proactive and efficient incident response capability. - -#### What’s the definition of RACI - -RACI is an acronym that stands for Responsible, Accountable, Consulted, and Informed. It is a project management and organizational tool used to clarify roles and responsibilities within a team or across different stakeholders for specific tasks, processes, or projects. Each letter in RACI represents a different level of involvement and accountability: - -1. Responsible (R): This person or role is responsible for completing the task or carrying out the work. They are the individuals who perform the actual work and ensure it gets done. -2. Accountable (A): This person is ultimately accountable for the task's success or failure. They are the decision-makers who oversee the work and ensure it aligns with the project's objectives. There should be only one "A" assigned to each task or activity. -3. Consulted (C): These are individuals or roles that provide input, expertise, or advice on the task. They are consulted for their knowledge or perspective, but they are not responsible for the task's completion. -4. Informed (I): These individuals or roles need to be kept informed about the task's progress or outcome but do not have active participation in its execution. - -RACI matrices and charts are commonly used to document and communicate these roles and responsibilities, helping teams and organizations to reduce confusion, improve accountability, and ensure that work is completed efficiently and effectively. - -#### Handling Data Return in Enterprise SaaS Business - -Handling data returns in an enterprise SaaS business requires a well-defined process to ensure customer satisfaction and compliance with data privacy regulations. Here's a step-by-step guide to help you prepare a process for when a client requests to return their data: - -1. **Understand Data Ownership and Privacy Policies:** - - Clearly define data ownership in your terms of service and privacy policy. - - Understand and comply with data protection regulations relevant to your industry and geographic location (e.g., GDPR, CCPA). -2. **Provide Clear Terms in Contracts:** - - Include provisions in your contracts that outline the conditions under which clients can request the return of their data. - - Specify the format and timeline for data return. -3. **Implement Data Export Features:** - - Build data export features into your SaaS platform to allow clients to easily retrieve their data in a standard and commonly used format (e.g., CSV, JSON). - - Ensure that exported data includes all relevant information and maintains data integrity. -4. **Establish a Request Process:** - - Create a formalized process for clients to request the return of their data. - - This process could include a dedicated support channel, a web portal, or a specific form. -5. **Authenticate and Verify Requests:** - - Implement a robust authentication process to ensure that only authorized individuals can request data returns. - - Verify the identity of the requester through multi-factor authentication or other secure means. -6. **Document and Track Requests:** - - Keep a centralized record of all data return requests. - - Track the status of each request, including when it was received, processed, and completed. -7. **Review and Cleanse Data:** - - Before returning data, review it to ensure it doesn’t contain any sensitive information from other users. - - Implement a data cleansing process to remove any irrelevant or unnecessary information. -8. **Secure Data Transmission:** - - Use secure channels and encryption protocols to transmit the data back to the client. - - Provide the client with instructions on how to securely receive the data. -9. **Notify Client of Completion:** - - Notify the client when their data return request has been processed and the data is available for retrieval. - - Provide any relevant documentation or instructions. -10. **Follow Up for Feedback:** - -```other -- Follow up with the client after the data return to gather feedback on the process and ensure their satisfaction. -- Use feedback to continuously improve the data return process. -``` - -11. **Train Support and Compliance Teams:** - -```other -- Ensure that your support and compliance teams are well-trained on the data return process. -- Keep them updated on any changes to regulations or internal policies. -``` - -12. **Regularly Review and Update Process:** - -```other -- Periodically review and update the data return process to incorporate any changes in regulations, technology, or customer needs. -``` - -By implementing a well-structured process, you can efficiently handle data return requests, maintain customer trust, and comply with data protection laws. - -#### Routine DR Validation Process - -Routine disaster recovery (DR) validation reviews are crucial for ensuring the resilience of your enterprise SaaS business. Here's a step-by-step guide to help you prepare a process for routine disaster recovery validation reviews: - -1. **Define Objectives and Scope:** - - Clearly define the objectives of the routine disaster recovery validation review. - - Specify the scope, including the systems, applications, and data that will be included in the review. -2. **Establish a Schedule:** - - Set a regular schedule for conducting disaster recovery validation reviews. This could be quarterly, semi-annually, or annually based on the criticality of your systems. -3. **Document the Disaster Recovery Plan (DRP):** - - Ensure that you have a comprehensive and up-to-date disaster recovery plan in place. - - Document the step-by-step procedures for recovering systems and data in the event of a disaster. -4. **Identify Key Stakeholders:** - - Identify the key stakeholders involved in the disaster recovery validation process. - - This may include IT administrators, security personnel, and relevant business unit representatives. -5. **Select Validation Criteria:** - - Define the criteria that will be used to validate the effectiveness of the disaster recovery plan. - - Criteria may include recovery time objectives (RTO), recovery point objectives (RPO), and data integrity. -6. **Simulate Disaster Scenarios:** - - Develop a set of realistic disaster scenarios that could impact your systems and data. - - Simulate these scenarios to test the effectiveness of your disaster recovery plan. -7. **Coordinate with Third-Party Vendors:** - - If your SaaS business relies on third-party vendors or cloud service providers, coordinate with them to ensure that their disaster recovery plans align with yours. - - Validate their processes and capabilities as part of your review. -8. **Perform Tabletop Exercises:** - - Conduct tabletop exercises with key stakeholders to walk through various disaster recovery scenarios. - - Use these exercises to identify weaknesses, gaps, and areas for improvement in the plan. -9. **Automate Testing Where Possible:** - - Implement automation tools to simulate and test disaster recovery procedures. - - Automation can help streamline the testing process and provide more accurate results. -10. **Measure and Analyze Results:** - - Measure the performance against the defined criteria during each validation review. - - Analyze the results to identify trends, patterns, and areas that need improvement. -11. **Document Findings and Recommendations:** - - Document the findings of each disaster recovery validation review. - - Provide clear recommendations for improvements and corrective actions. -12. **Implement Improvements:** - - Act on the recommendations and implement improvements to enhance the effectiveness of your disaster recovery plan. -13. **Review and Update DRP:** - - Regularly review and update the disaster recovery plan based on the lessons learned from validation reviews and changes in your IT infrastructure. -14. **Communicate Results:** - - Communicate the results of the disaster recovery validation reviews to relevant stakeholders. - - Ensure transparency and provide information on the steps being taken to address any identified issues. -15. **Continuous Training and Awareness:** - - Conduct regular training sessions for your IT and operational teams to ensure they are familiar with the disaster recovery procedures. - - Raise awareness among employees about the importance of disaster recovery and their roles in the process. - -By following these steps, you can establish a robust process for routine disaster recovery validation reviews, helping to ensure the resilience and continuity of your enterprise SaaS business in the face of potential disasters. - - - -#### Please help explain what's the SOC2 audit? - -Please help me explain what's the SOC2 audit? - -SOC 2, which stands for Service Organization Control 2, is a framework for managing and securing data that is crucial for the privacy of user information. It is specifically designed for technology and cloud computing organizations that store customer data in the cloud. Developed by the American Institute of CPAs (AICPA), SOC 2 compliance is not a one-time event but an ongoing process that requires companies to follow certain criteria to ensure the security, availability, processing integrity, confidentiality, and privacy of customer data. - -Here are key components of a SOC 2 audit: - -1. **Trust Service Criteria:** SOC 2 is built around five "Trust Service Criteria" (TSC) – security, availability, processing integrity, confidentiality, and privacy. These criteria serve as the foundation for evaluating an organization's systems and processes. - - **Security:** The system is protected against unauthorized access (both physical and logical). - - **Availability:** The system is available for operation and use as committed or agreed. - - **Processing Integrity:** System processing is complete, valid, accurate, timely, and authorized. - - **Confidentiality:** Information designated as confidential is protected as committed or agreed. - - **Privacy:** Personal information is collected, used, retained, disclosed, and disposed of in conformity with the commitments in the entity’s privacy notice. -2. **SOC 2 Type I and Type II Audits:** - - **Type I:** Examines the suitability of the design of controls at a specific point in time. - - **Type II:** Examines the operational effectiveness of these controls over a period of time (typically a minimum of six months). -3. **Scope and Boundary:** The organization defines the scope of the audit, including the systems that are in scope and the boundaries of the environment being evaluated. -4. **Risk Management and Compliance:** SOC 2 requires organizations to identify and manage risks related to the security, availability, processing integrity, confidentiality, and privacy of information. -5. **Written Policies and Procedures:** Organizations need to have documented policies and procedures in place to demonstrate how they achieve and maintain compliance with the Trust Service Criteria. -6. **Third-Party Involvement:** If a company uses third-party service providers, the SOC 2 audit may extend to these providers to ensure that their services also meet the required standards. - -Successfully completing a SOC 2 audit provides organizations with a valuable certification that demonstrates their commitment to data security and privacy. It is often seen as a trust-building factor for customers and partners who want assurance that their data is handled with the utmost care and security. - - - diff --git a/#recycle/Work/CSD/ESM Cloud Application Troubleshooting as a Service.md b/#recycle/Work/CSD/ESM Cloud Application Troubleshooting as a Service.md deleted file mode 100644 index ce804faf..00000000 --- a/#recycle/Work/CSD/ESM Cloud Application Troubleshooting as a Service.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: -source: -author: - - Shen Wei -published: -created: -description: -tags: ---- -## Introduction -The main purpose of this document is to help non-Cloud Ops team members better understand the various services and tools currently provided for Cloud Application troubleshooting, so that they can be used flexibly in different scenarios and reduce dependence on Cloud Ops engineers. -Our goal is also very clear. We hope to provide a more efficient DevOps ecosystem to provide better services to our customers. - -**Please note that the various services and tools mentioned below require approval and authorization, and are currently limited to members of the Cloud Ops and R&D CPE teams** -## Troubleshooting as a Service - -### Access Environment as a Service -#### Access to Customer Tenant -We provide a method to enter the customer's tenant so that when doing troubleshooting, you can directly access the customer's environment to check the problem and understand the symptoms of the problem at the first time, so as to make the right judgment. - - -#### Access to ESM Farm BO, IDM, UCMDB JMX console -We provide a method to apply for temporary user access to each farm management console -- BO Suite Admin -- ESM IDM Admin -- UCMDB Super Admin to UCMDB JMX Console - -### Log Collection as a Service -We provide a very comprehensive log collection automation tool. -Collect log information of a specific module within a specific time period. Users can select appropriate filtering conditions to collect logs according to different scenarios, so as to locate problems more accurately and reduce extra effort caused by excessive log size. - - -### Check Configuration - -### Monitoring as a Service - -#### Unified Monitoring via pre-defined Grafana Dashboard -We provide a lot of rich implementation monitoring data for various troubleshooting. Currently we use Grafana as the monitoring UI to reflect the monitoring data of farm implementation: -- AWS Cloud Watch Data Source - Able to have real-time infrastructure monitoring (AWS EKS/EFS/RDS) -- Prometheus Data Source - Able to check real-time application level metrics exposed by Prometheus -- Database query Data Source - Get some key indicators of the application through database query -- Containerize/K8S - Able to monitor the key monitoring data of the containerize product, container/node/pod etc. - -#### Service Availability Health Page - - -### Log Analysis as a Service - -### BI Reporting as a Service - -### Unplanned Change Request as a Service - -### Other Services diff --git a/#recycle/Work/CSD/ESM Cloud Knowledge Sharing Plan.md b/#recycle/Work/CSD/ESM Cloud Knowledge Sharing Plan.md deleted file mode 100644 index 2d65bdda..00000000 --- a/#recycle/Work/CSD/ESM Cloud Knowledge Sharing Plan.md +++ /dev/null @@ -1,22 +0,0 @@ -## Product Service -### ESM Product - -### ESM Cloud Trial - -## Customer Service -### SaaS Customer Support Model -### Customer Service Offering Runbook -- Configure SAML authentication -- Configure custom domain for customer - - -## DevOps/SRE -### ESM Cloud GitLab -### ESM Cloud Operation Automation/Jenkins -### ESM Cloud Monitoring -### ESM Cloud System Health Page -### ESM Cloud Disaster Recovery - - - - diff --git a/#recycle/Work/CSD/Personal Transition Plan - Senior Manager of Cloud Service Delivery.md b/#recycle/Work/CSD/Personal Transition Plan - Senior Manager of Cloud Service Delivery.md deleted file mode 100644 index f26d75fb..00000000 --- a/#recycle/Work/CSD/Personal Transition Plan - Senior Manager of Cloud Service Delivery.md +++ /dev/null @@ -1,50 +0,0 @@ - -## Role and Responsibility -#### Strategic Responsibilities -- Own the reliability and performance of multiple SaaS Application Services. (APM, BPM, OpsB, NOM, ESM, DCA, SBM, ESM FedRAMP) -- Drive cloud modernization initiatives (e.g., containerization, EKS, CI/CD automation). -- Align cloud service delivery with customer SLAs, business growth, and compliance frameworks (e.g., FedRAMP, SBM). -- Interface with Sales, Product, Security, and Compliance to support new customer onboarding and cloud architecture reviews. - -#### Operational Responsibilities -- Oversee 24x7 operation and monitoring of cloud platforms (AWS-based). -- Manage escalations, incidents, and root cause analysis. -- Coordinate patching, upgrades, hotfixes, and maintenance windows. -- Own service onboarding/offboarding workflows, including tenant provisioning and decommissioning. - -#### People Management -- Performance management and coaching of global team members. -- Run weekly team syncs, monthly reviews, and ad-hoc cross-regional escalations. - -## Cloud Applications and Cloud Services KS Sessions - -### Session 1 -- ITOM Cloud Application AWS Account Owner - - https://confluence.opentext.com/display/ICSD/ITOM+Cloud+AWS+Account+Overview - - AWS Account Admin ownership - - Responsibility of AWS Account Admin -- ITOM Cloud Application List - - ESM/ITOM Aviator/DCA/SBM: https://confluence.opentext.com/display/ICSD/ITOM+ESM+Cloud+Farm+Information - - OpsB/NOM Cloud Application List: https://confluence.opentext.com/display/ICSD/OpsB+and+NOM+Cloud+Deployments+Version+Tracking - - APM Cloud Farm List: https://confluence.opentext.com/display/ICSD/ITOM+APM+AppPluse+Cloud+Farm+Information -- ITOM Cloud FinOps - - BI Reporting: https://app.powerbi.com/groups/fac06a69-6340-4715-b8fe-4bdc0ca9af14/reports/1a3fceca-6563-4cc6-8218-d1d27f15e2f1/ReportSection?experience=power-bi - - Opentext FinOps Team AWS FinOps Dashboard -### Session 2 -- ITOM Cloud Application Version Currency - - Upgrade Plan - - ESM/FebRAMP Ops Change Calendar - - OpsB/NOM Ops Change Calendar - - Upgrade Plan Timeline - -### Session 3 - -### Session 4 - -### Session 5 - -### Session 6 - -### Session 7 - -### Session 8 diff --git a/#recycle/Work/Cloud Service “Bilities”.md b/#recycle/Work/Cloud Service “Bilities”.md deleted file mode 100644 index b2242005..00000000 --- a/#recycle/Work/Cloud Service “Bilities”.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Cloud Service “Bilities” -source: -author: -published: 2025-03-01 -created: 2025-03-01 -description: -tags: [] -link: ---- -# Cloud Service “Bilities” - -**The "bilities"** - -In heritage OpenText Architecture we are constantly chasing how to meet what we lovingly call the "bilities".  Here is a list of the "bilities" - -Below are the primary capability requirements of any application to be operated by OT Commercial Cloud Service Delivery.  Some are absolute requirements, others add to the stability, performance and customer experience of the service. - -These define the “What” not the “How” of either the application or the infrastructure. - -**Recoverability** – Capability of an application to recover to a normal processing disposition as soon as a deviation from normal processing is detected either internal to the application or through external monitoring.  Recoverability includes not only restarting but restarting processing where it was last interrupted. - -**Usability** – All applications in a processing community are interacted with in a common and predictable manner, both from the administration side and the consumer side.  Standards in usability across applications supports efficient usage across those applications. - -**Operability** – Capability of an application component to be started, stopped, updated, diagnosed and deployed in a standard and predictable way. - -**Maintainability** – Capability of an application component to be updated, patched or functions changed in a standard and predictable manner.  Maintainability requires backward compatibility through 2 or more releases to enable maintenance activities to occur online. - -**Securability** – Capability of an application component to protect its assets and customer payload from unauthorized access.    Additionally, a capability to enforce access control rules based upon approved role. - -**Persistability** – Capability of an application to always persist payload data once it has entered the OT processing environment.  That data must exist and be accessible through maintenance, defect, application outage and normal processing.  Persistence should last the entirety of the payloads expected processing lifecycle from entrance to the environment through historical archive expiration. Persistence will accommodate global processing and Disaster Recovery requirements where applicable. - -**Mobility** – Capability of an application to survive infrastructure actions to support moving service components through In-center High Availability, Intra-center Geographic relocation and Intra-service Private to Public Cloud relocation. - -**Throttleability** – Capability of an application to control the processing rate through each component or service.  This key capability of each application component enables the operators of the service to isolate and maintain control of recovery to normal processing flow. - -**Deployability** – Capability of an application component to be maintained without downtime to the solution as a whole.  Maintenance, wherever possible, needs to take place without externally identifiable service interruption. - -**Reliability** – Capability of an application component or collection of components to with a high degree of consistency perform its defined function through both normal and abnormal operating conditions.  Reliability requires that the application component be able to perform its defined work through outage. - -**Reusability** – Capability of application service to perform for more than one service consumer.  Build once, use many in a common and consistent way. - -**Accountability/Billability** – Capability of an application to accurately report its usage by customer tenant for financial accounting purposes. - -**Durability**–Capability of an application to survive deviation from normal operating conditions. - -**Troubleshootability** – Capability to provide clear output to logging systems about all application components health and disposition during both normal and abnormal operating conditions. - -**Defensibility** – Capability and awareness of the application to defend itself against incorrect usage.  Both accidental and purposeful. - -**Extensibility** – An upfront design capability that takes into consideration the applications ability to expand its functions automatically in response to dynamic demand prompts.  Extensibility promotes expandability and elasticity. - -**Auditability** – An application needs to be deployed with capabilities and structures, and within an infrastructure design, that meet applicable external security and audit standards. - -**Application configurability** – All required feature and functional configuration management should be provided through a Web/API enabled interface.  No customer should need administrative access to underlying systems or infrastructure to perform customer available administrative tasks. - -**Observability** – Capability of an application to be deployed as an active part of an ecosystem that provides and accurate, timely, and complete indication of functional status and capacity level. - -**Visibility** – Provide capability to see detailed monitoring data describing the operating condition or health of the application. - -**Affordability** – An application needs to implement and use components and software that achieve P&L objectives and retain that position when scaled.  This includes the full range of administrative, support, and operational costs. - -**Adaptability** – An advanced capability of an application to be aware of processing going on around both upstream and downstream.  AI and machine learning are key to this capability. - diff --git a/#recycle/Work/ITOM Cloud Service Review Meeting.md b/#recycle/Work/ITOM Cloud Service Review Meeting.md deleted file mode 100644 index b56a2e16..00000000 --- a/#recycle/Work/ITOM Cloud Service Review Meeting.md +++ /dev/null @@ -1,46 +0,0 @@ -# ITOM Cloud Service Review Meeting - -### ESM - -- Current Status - - Farm #, region, - - EU managed - - Team size - - Major workload - - Upgrade maintenance - - Customer Cloud Service request → Show trend - - Internal Cloud Service - Trial (SMAX, CMS Standalone, HCMX, ITOM Aviator), Unplanned change etc. - - Customer driven project - UPN change, - - Security -- Recent Plan and activity - - Upgrade/Patch, SMAX helm transformation - - New farm plan - - ITOM Aviator productionize -- Issues & Gap - - EU Ops engineer resource gap - - FedRAMP resource gap - - Product quality caused additional operation effort - -### Smart Observability - -- Current Status - - Instances #, customer # - - Team size - - Major workload - - Cloud deployment automation certification - - Paid customer cloud instance deployment, initial configuration - - Trial Instance deployment - - Maintain upgrade, upgrade validation - - Customer -- Recent Plan and activity - - 24.2 Upgrade/Patch - - Support new product capability - AppO, CNO -- Issues & Gap - - AWS Cost Control - - Trial Instance control - - NOM Ops resource gap - - PCS Support case - - RnD request cloud instance - - - diff --git a/#recycle/Work/Meeting Note/ESM Weekly Meeting Agenda.md b/#recycle/Work/Meeting Note/ESM Weekly Meeting Agenda.md deleted file mode 100644 index 8aceff01..00000000 --- a/#recycle/Work/Meeting Note/ESM Weekly Meeting Agenda.md +++ /dev/null @@ -1,62 +0,0 @@ - -### Mar 19 -- ESM 25.2 upgrade validation plan - Ting Ye -- ESM Change Management Process Update - Ting Ye -- SG Yearly DR solution to share with team - Shen Wei -- ITOM Aviator EU32 farm construction status - Liu Yu/Adina -- ESM US2 dev farm automation pipeline - Sunny -- Update Incident Management Process -Shen Wei -- - -### Mar 13 -- Demo: New Jenkins Job to request temp BO admin user -Wenjun Sun -- Customer case update  -- Team Project Update: - - ESM Upgrade/Patch/Hotfix - Ting Ye - - AWS account migration to new SCP OU hierarchy - Yu Liu - - Terraform automation to construct new farm - Sunny Xia -- Round table -### Mar 3 -- Patch upgrade rollback strategy update - Shen Wei -- Heads up about time coverage - Shen Wei -- Ops Doc review and approve - Shen Wei -- ESM 25.1.2 + ITOM Aviator 25.1.2 Patch upgrade plan - Shen Wei -- ITOM Aviator (EU managed farm) budget approved, start project  Yu Liu  -- OP BVD ILR license generation and documentation Miroslav Shindarov Yun Zhao -- Operation Excellence Update - - Remove BO admin and use temp suite-admin account - - Grafana - AWS Cognito authentication status - - Terraform for ESM   -- DevSecOps Qualys/Prisma- Yu Liu -- New member training status update  -- Round table -### Feb 25 -- FedRAMP farm updates - Jeremy Thunker -- Team project update - - ESM Upgrade Ting Ye - - AWS account migration to new SCP OU hierarchy - Yu Liu - - Grafana to use AWS Cognito - Shen Wei - - CCOE AMI adoption - Ting Ye - - Cost Optimization - Ling-yan Meng -- Introduce the process how to handle security scan found issues - Shen Wei -- Customer exit process -### Feb 17 -- Welcome to Mericel to join ESM Cloud Ops team -- ESM 25.1.1 patch upgrade status - Ting Ye -- ITOM Aviator 25.1.1 upgrade status update - Yu Liu -- Mega Audit update - Shen Wei -- New ITOM Aviator farm (EU-managed) preparation - Yu Liu -- SMAX helm hotfix post deployment actions - Ling-yan Meng -- Round table update -### Feb 12 -- ESM Cloud Service meeting schedule introduction -- ITOM ESM Cloud Service Catalog introduction and new service approval flow -- New Project: - - New ITOM Aviator Farm (EU managed) - - Adopt CCOE AMI images - - 25.2 upgrade plan - - New ITOM Cloud Farm Architecture -- New member training plan - -I will record this meeting to ensure different time zone team member can watch the replay. - diff --git a/#recycle/Work/Monthly Report/ITOM ESM Cloud Service Monthly Report - Feb 2025.md b/#recycle/Work/Monthly Report/ITOM ESM Cloud Service Monthly Report - Feb 2025.md deleted file mode 100644 index 215439f2..00000000 --- a/#recycle/Work/Monthly Report/ITOM ESM Cloud Service Monthly Report - Feb 2025.md +++ /dev/null @@ -1,150 +0,0 @@ -# **ITOM ESM Cloud Service Monthly Report - Feb 2025** - -**2025/2/1 ~ 2025/2/28** - -This report contains the main work of the ESM Cloud Service team and shows the load of the team's work in the form of data, and describes some issues and risks for continuous improvement. - -# Table of Content: -- [[#Product Cloud Service|Product Cloud Service]] - - [[#Product Cloud Service#Planned Maintenance Window Changes|Planned Maintenance Window Changes]] - - [[#Product Cloud Service#Upgrade Plan|Upgrade Plan]] - - [[#Product Cloud Service#Unplanned Production Change|Unplanned Production Change]] - - [[#Product Cloud Service#Tenant Provision Services|Tenant Provision Services]] - - [[#Product Cloud Service#Product Trial Service|Product Trial Service]] -- [[#Customer Cloud Service|Customer Cloud Service]] - - [[#Customer Cloud Service#Customer Cloud Service|Customer Cloud Service]] - - [[#Customer Cloud Service#Major Incident & RCA|Major Incident & RCA]] - - [[#Customer Cloud Service#Customer Order & Fulfillment Highlights|Customer Order & Fulfillment Highlights]] - - [[#Customer Cloud Service#Monthly SLA|Monthly SLA]] -- [[#Cloud DevOps/SRE|Cloud DevOps/SRE]] - - [[#Cloud DevOps/SRE#ITOM Operation Platform 25.1|ITOM Operation Platform 25.1]] - - [[#Cloud DevOps/SRE#ESM Cloud Application WAF Enablement|ESM Cloud Application WAF Enablement]] - - [[#Cloud DevOps/SRE#ESM GCP onboarding|ESM GCP onboarding]] - - [[#Cloud DevOps/SRE#Security & Compliance|Security & Compliance]] - - [[#Cloud DevOps/SRE#Cloud BI Reporting|Cloud BI Reporting]] - ---- -# Product Cloud Service - -## Planned Maintenance Window Changes - -- **ESM Standard Planned Changes** - - There were a total of **49** times of (SMX/CMS/OMT/OO, FedRAMP, DCA, ITOM Aviator) Upgrade/Patch/Hotfix deployments to various farms - - All **ESM production farms** (**EU3/US7/US2/US24/US26/US6/EU8/AP10/JP12/BR14/CA16/EU18/EU28**) were upgraded to ESM latest major version **ESM 25.1.1** by the end of Feb, 2025 -- **ITOM Operation Platform** **25.1.1** was upgraded on ESM farm (**EU3/US24/EU18**) by the end of Feb, 2025 -- **ITOM Aviator Service** (**EU30**) was already upgraded to **25.1.1** with some infra change with language model -- All ESM Farm's **AWS EKS** version were upgraded to **1.30** -- FedRAMP **AMI Rotation + 24.3 FP4** was done successfully in Feb maintenance window - -![Image](http://zipline.ishenwei.online/u/9KyDGW.png) -![Image](http://zipline.ishenwei.online/u/u3jqNN.png) -![Image](http://zipline.ishenwei.online/u/UQxkcZ.png) -![Image](http://zipline.ishenwei.online/u/EA5ruD.png) -![Image](http://zipline.ishenwei.online/u/hGHxKw.png) ---- - -## Upgrade Plan - -**ESM 25.1 Upgrade Plan - COMPLETE** -![Image](http://zipline.ishenwei.online/u/d1OO4K.png) -**ESM 25.2 Upgrade Plan - IN PROGRESS** -![Image](http://zipline.ishenwei.online/u/A4bEnW.png) ---- -## Unplanned Production Change - -- Total **17** Unplanned Production Changes deployed to different ESM farms in this month -- **The number of additional unplanned change requests generated by product quality increased again this month. This needs to be taken seriously by the RnD team and analyzed after the fact to reduce similar problems and additional production changes.::** - -![Image](http://zipline.ishenwei.online/u/kGuobh.png) -![Image](http://zipline.ishenwei.online/u/LnBn4Y.png) - -![Image](http://zipline.ishenwei.online/u/9B64zk.png) ---- - -## Tenant Provision Services - -- There were a total of **28** tenant provision request fulfilled in this month. -![Image](http://zipline.ishenwei.online/u/EJGHvv.png) - -![Image](http://zipline.ishenwei.online/u/mzkyBA.png) ---- - -## Product Trial Service - -- There were a total of **370** product trial related service request fulfilled in this month. -![Image](http://zipline.ishenwei.online/u/1AkGlm.png) -![Image](http://zipline.ishenwei.online/u/UMP0Y5.png) -![Image](http://zipline.ishenwei.online/u/j3Ap39.png) - -- CT Trial (External Customer SMAX Only Trial) - **12** -![Image](http://zipline.ishenwei.online/u/NTkk0s.png) - -- Internal SMAX Premium Trial - **50** -![Image](http://zipline.ishenwei.online/u/GeXoRV.png) - -- HCMX Trial - **1** -![Image](http://zipline.ishenwei.online/u/2sOhvg.png) - -- ESM (SMAX/AMX/CMS) Trial - **21** -![Image](http://zipline.ishenwei.online/u/XqdzLt.png) - -- **ITOM Aviator Trial - 20** -![Image](http://zipline.ishenwei.online/u/FZN250.png) -# Customer Cloud Service - -## Customer Cloud Service - -- There were a total of **96** Customer Cloud Service Requests handled by ESM Cloud Service team in PCS -- **Special thanks to Remi's ESM Cloud RnD team for their cooperation in handling the customer's Cloud Service Request with technical support!** -![Image](http://zipline.ishenwei.online/u/ccwoCw.png) - ---- - -## Major Incident & RCA - -#### [2025/02/09 - US6/US2/AP10 - SMAX- Major Function Issue](https://confluence.opentext.com/pages/viewpage.action?pageId=689008569) - ---- -## Customer Order & Fulfillment Highlights -![Image](http://zipline.ishenwei.online/u/Wm4ACS.png) ---- - -## Monthly SLA - -- **ESM SMAX has achieved all 100% SLA in Jan, 2024** -- Data is available through **Jan 2024**, with Feb 2025 SLA data to be released around mid-March. - ---- - -# Cloud DevOps/SRE - -## ITOM Aviator (EU-Managed) Farm -- We got final business approval to construct new **ITOM Aviator (EU-managed)** farm. -- The project has already started and is expected to be delivered in 1 to 2 weeks -## ITOM Operation Platform 25.1 - -- We have successfully upgrade Operation Platform 24.4 to **25.1** on **EU3/US24/EU18** farm. -- We're preparing the Operation Platform 25.2 cloud readiness work include to start support OpsB to use OP 25.2 in ITOM Cloud environment. -- We are now continuing to work on the OP D2 enablement automation and the relevant operation runbook. -## ESM Cloud Application WAF Enablement - -- A new DevOps project was initiated to enhance WAF rules management & cloud deployment automation -- After some series of team efforts, it went through several processes of testing, modification, and deployment. We have now reached the criteria of **Enable WAF denied mode** with current WAF version on top of SMAX 25.1.1. -- We have enabled **SMAX WAF** in ‘**Denied Mode**’ on **US2** farm this Monday(Feb 24th). -- In addition, we have enable  ‘**Observation Mode**’ on **US24** & **US26** farms to get more WAF log information to help us determine the effectiveness of blockings. -## ESM GCP onboarding -- Based on the business requirements, we started working with Cloud SA group and Product group on GCP onboarding for ESM. Currently, there are two main working threads which require product team support to certify ESM products deployment on GCP, and validation and experimentation for GCP OCF cloud architecture platform led by Cloud SA. -## Operation Excellence -- We are actively enhancing the automation of ESM farm construction, covering all configurations based on AWS services, and using OT compliance automation solutions to build cloud automation deployment for ESM Farm -- We've implemented to use AWS Cognito authentication to control all Cloud Ops tooling. Recently we've enabled AWS Cognito authentication to access **Grafana** monitoring tool -## Security & Compliance -- At the request of Opentext GIS, the ESM Cloud Service Team has installed **Qualys** and **Prisma Defender** on all ESM production farms in order to facilitate security scanning on the Cloud to provide more secure ESM SaaS services. -- We recently launched a new project on how to handle various OS-based security issues discovered by Qualys Scan. In conjunction with the upcoming adopt **CCOE AMI** project, we intend to centrally replace and update the existing Cloud Application's EKS worker node OS to meet higher security standards. - -## Cloud Service BI Reporting - -- ITOM ESM Farm/Tenant Summary - [BI Report Link](https://app.powerbi.com/groups/fac06a69-6340-4715-b8fe-4bdc0ca9af14/reports/cf509ffe-325f-4c1b-a507-44b93e6d85ca/ReportSection3243d84335d863ef318a?experience=power-bi) -- ITOM Cloud Service Summary - [BI Report Link](https://app.powerbi.com/groups/fac06a69-6340-4715-b8fe-4bdc0ca9af14/reports/363a8aba-6746-4468-9d5c-54e0a463b708/ReportSectionc350f5d544676dc460b4?experience=power-bi) - ---- - diff --git a/#recycle/Work/Monthly Report/ITOM ESM Cloud Service Monthly Report - Jan 2025.md b/#recycle/Work/Monthly Report/ITOM ESM Cloud Service Monthly Report - Jan 2025.md deleted file mode 100644 index 981f5208..00000000 --- a/#recycle/Work/Monthly Report/ITOM ESM Cloud Service Monthly Report - Jan 2025.md +++ /dev/null @@ -1,198 +0,0 @@ ---- -title: ITOM ESM Cloud Service Monthly Report - Jan 2025 -source: -author: - - Wei Shen -created: 2025-03-02 -description: This report contains the main work of the ESM Cloud Service team and shows the load of the team's work in the form of data, and describes some issues and risks for continuous improvement. -tags: - - cloud - - "#service" - - "#report" ---- -# **ITOM ESM Cloud Service Monthly Report - Jan 2025** - -**2025/1/1 ~ 2025/1/31** - -This report contains the main work of the ESM Cloud Service team and shows the load of the team's work in the form of data, and describes some issues and risks for continuous improvement. - -# Table of Content: -- [[#Product Cloud Service|Product Cloud Service]] - - [[#Product Cloud Service#Planned Maintenance Window Changes|Planned Maintenance Window Changes]] - - [[#Product Cloud Service#Upgrade Plan|Upgrade Plan]] - - [[#Product Cloud Service#Unplanned Production Change|Unplanned Production Change]] - - [[#Product Cloud Service#Tenant Provision Services|Tenant Provision Services]] - - [[#Product Cloud Service#Product Trial Service|Product Trial Service]] -- [[#Customer Cloud Service|Customer Cloud Service]] - - [[#Customer Cloud Service#Customer Cloud Service|Customer Cloud Service]] - - [[#Customer Cloud Service#Major Incident & RCA|Major Incident & RCA]] - - [[#Customer Cloud Service#Customer Order & Fulfillment Highlights|Customer Order & Fulfillment Highlights]] - - [[#Customer Cloud Service#Monthly SLA|Monthly SLA]] -- [[#Cloud DevOps/SRE|Cloud DevOps/SRE]] - - [[#Cloud DevOps/SRE#ITOM Operation Platform 25.1|ITOM Operation Platform 25.1]] - - [[#Cloud DevOps/SRE#ESM Cloud Application WAF Enablement|ESM Cloud Application WAF Enablement]] - - [[#Cloud DevOps/SRE#ESM GCP onboarding|ESM GCP onboarding]] - - [[#Cloud DevOps/SRE#Security & Compliance|Security & Compliance]] - - [[#Cloud DevOps/SRE#Cloud BI Reporting|Cloud BI Reporting]] - ---- - -# Product Cloud Service - -## Planned Maintenance Window Changes - -- **ESM Standard Planned Changes** - - There were a total of **::22::** times of (SMX/CMS/OMT/OO, FedRAMP, DCA, ITOM Aviator) Upgrade/Patch/Hotfix deployments to various farms - - **ESM farms** (**::EU3/US7/US2/US24/US26::**) were upgraded to ESM latest major version **::ESM 25.1::** by the end of Jan, 2025 -- **ITOM Operation Platform** **::25.1::** was upgraded on ESM farm (**::EU3/US24::**) by the end of Jan, 2025 -- **ITOM Aviator Service** (**::EU30::**) was already upgraded to **::25.1::** -- All ESM Farm's **AWS EKS** version were upgraded to **::1.30::** -- FedRAMP **::AMI Rotation::** + **::RDS 15.4 +EKS Upgrade::** was done successfully in Jan maintenance window - -![image.png](http://zipline.ishenwei.online/u/TpWM1Z.png) - -![image.png](http://zipline.ishenwei.online/u/iJ088Q.png) - -![image.png](http://zipline.ishenwei.online/u/WGaKk4.png) - -![image.png](http://zipline.ishenwei.online/u/OYABda.png) - ---- - -## Upgrade Plan - -**ESM 25.1 Upgrade Plan - ::IN PROGRESS::** - -![image.png](http://zipline.ishenwei.online/u/TgTE2M.png) - ---- -## Unplanned Production Change - -- > Total **::26::** Unplanned Production Changes deployed to different ESM farms in this month -- > **::The number of additional unplanned change requests generated by product quality increased again this month. This needs to be taken seriously by the RnD team and analyzed after the fact to reduce similar problems and additional production changes.::** - -![image.png](http://zipline.ishenwei.online/u/xXKQR1.png) - -![image.png](http://zipline.ishenwei.online/u/WLQ91Z.png) - -![image.png](http://zipline.ishenwei.online/u/cDcHDT.png) - ---- - -## Tenant Provision Services - -- > There were a total of **::17::** tenant provision request fulfilled in this month. - -![image.png](http://zipline.ishenwei.online/u/Tu7f0F.png) - -![image.png](http://zipline.ishenwei.online/u/9dqHZ3.png) - ---- - -## Product Trial Service - -- > There were a total of **::252::** product trial related service request fulfilled in this month. - -![image.png](http://zipline.ishenwei.online/u/S5UkaH.png) - -![image.png](http://zipline.ishenwei.online/u/LcnjR3.png) - -![image.png](http://zipline.ishenwei.online/u/S0hBGT.png) - -- > CT Trial (External Customer SMAX Only Trial) - 12 - -![image.png](http://zipline.ishenwei.online/u/DiZRD1.png) - -- > Internal SMAX Premium Trial - 58 - -![image.png](http://zipline.ishenwei.online/u/UBvgzB.png) - -- > HCMX Trial - 1 - -![image.png](http://zipline.ishenwei.online/u/VADMwI.png) - -- > ESM (SMAX/AMX/CMS) Trial - 8 - -![image.png](http://zipline.ishenwei.online/u/2SCiiC.png) - -- > **::ITOM Aviator Trial - 14::** - -![image.png](http://zipline.ishenwei.online/u/BXkHWQ.png) - ---- - -# Customer Cloud Service - -## Customer Cloud Service - -- > There were a total of **::84::** Customer Cloud Service Requests handled by ESM Cloud Service team in PCS -- > **::Special thanks to Remi's ESM Cloud RnD team for their cooperation in handling the customer's Cloud Service Request with technical support and staff coverage!::** - - - -![image.png](http://zipline.ishenwei.online/u/eYDiqG.png) - -![image.png](http://zipline.ishenwei.online/u/PPGtAi.png) - ---- - -## Major Incident & RCA - -> No major incident in Jan, 2025 - - - - - - - ---- -## Customer Order & Fulfillment Highlights - -![image.png](http://zipline.ishenwei.online/u/AqlcoY.png) - ---- - -## Monthly SLA - -- > **::ESM SMAX has achieved all 100% SLA in Dec, 2024::** -- > Data is available through **Dec, 2024**, with Jan, 2025 SLA data to be released around mid-Feb. - -![http://zipline.ishenwei.online/u/HYziL8.png](http://zipline.ishenwei.online/u/HYziL8.png) - -![image.png](http://zipline.ishenwei.online/u/CxrtGV.png) - ---- - -# Cloud DevOps/SRE - -## ITOM Operation Platform 25.1 - -- > We have successfully upgrade Operation Platform 24.4 to 25.1 on EU3/US24 farm. -- > We're preparing the Operation Platform 25.2 cloud readiness work include to start support OpsB to use OP 25.2 in ITOM Cloud environment. -- > We are now continuing to work on the OP D2 enablement automation and the relevant operation runbook. -## ESM Cloud Application WAF Enablement - -- > After some series of team efforts, it went through several processes of testing, modification, and deployment. We have now reached the criteria of Enable WAF denied mode with current WAF version on top of SMAX 24.4.1. -We have enabled SMAX WAF in ‘**Denied Mode**’ on **::EU3::** and **::US7::** farm by end of Nov. -- > In addition, we are gradually turning on ‘**Observation Mode**’ in other farms to get more WAF log information to help us determine the effectiveness of blockings. -- > A new DevOps project was initiated to enhance WAF rules management & cloud deployment automation - -## ESM GCP onboarding - -- > Based on the business requirements, we started working with Cloud SA group and Product group on GCP onboarding for ESM. Currently, there are two main working threads which require product team support to certify ESM products deployment on GCP, and validation and experimentation for GCP OCF cloud architecture platform led by Cloud SA. - -## Security & Compliance - -- > At the request of Opentext GIS, the ESM Cloud Service Team has installed **Prisma Defender** on all ESM production farms in order to facilitate security scanning on the Cloud to provide more secure ESM SaaS services. - **::Done::** -- > We recently launched a new project on how to handle various OS-based security issues discovered by Qualys Scan. In conjunction with the upcoming adopt CCOE AMI project, we intend to centrally replace and update the existing Cloud Application's EKS worker node OS to meet higher security standards. - **::In Progress::** - -## Cloud BI Reporting - -- > ITOM ESM Farm/Tenant Summary - [BI Report Link](https://app.powerbi.com/groups/fac06a69-6340-4715-b8fe-4bdc0ca9af14/reports/cf509ffe-325f-4c1b-a507-44b93e6d85ca/ReportSection3243d84335d863ef318a?experience=power-bi) -- > ITOM Cloud Service Summary - [BI Report Link](https://app.powerbi.com/groups/fac06a69-6340-4715-b8fe-4bdc0ca9af14/reports/363a8aba-6746-4468-9d5c-54e0a463b708/ReportSectionc350f5d544676dc460b4?experience=power-bi) - -## - ---- - diff --git a/#recycle/Work/PCS Create New Customer Initial Setup Steps.md b/#recycle/Work/PCS Create New Customer Initial Setup Steps.md deleted file mode 100644 index 7f85c450..00000000 --- a/#recycle/Work/PCS Create New Customer Initial Setup Steps.md +++ /dev/null @@ -1,190 +0,0 @@ - - -Entitlement - -- Create new company - - Customer Type: Customer -- Add new domain name (remember to add same in PCS dev as well, for dev2prod) -- Create new entitlement - - -Add new person - -- Create in BO and sync back to SMAX -- Add company -- Add employee type - external -- Assign people to relevant entitlement -- Assign role - - Microfocus SaaS entitlement - - Self-Service portal app - - Self-Service portal user - - -PCS Administration Training - - - -[[PCS Create New Customer Initial Setup Steps]] - - - - - -KT Session #1 - -[https://microfocusinternational-my.sharepoint.com/:v:/g/personal/brindusa_kevorkian_microfocus_com/EemsG7iwZ8xCsPm5QygCoZgBIWubxMNMhbCQU4AIhUoA3A](https://microfocusinternational-my.sharepoint.com/:v:/g/personal/brindusa_kevorkian_microfocus_com/EemsG7iwZ8xCsPm5QygCoZgBIWubxMNMhbCQU4AIhUoA3A) - - - -KT Session #2 - -[https://microfocusinternational-my.sharepoint.com/:v:/g/personal/brindusa_kevorkian_microfocus_com/EXRCtXeBAXZPisy27-kVeuMBgZ_MdlyZgi-XmuXRIVseOg](https://microfocusinternational-my.sharepoint.com/:v:/g/personal/brindusa_kevorkian_microfocus_com/EXRCtXeBAXZPisy27-kVeuMBgZ_MdlyZgi-XmuXRIVseOg) - - - -**Data Model** - -- Data domains -- Company -- Entitlement - - ENTITY_LINK to Company - - ENUM to Data domains -- Person - - ENTITY_LINK to Company - - ENTITY_LINK to Entitlement (default) - - MANY2MANY to Entitlement (full list) - - - -**New Order/customer** - -- Validate it is indeed a real customer (have an order ID, can find it in Control Tower) - - Special cases for internal "customers": presales, operations, etc -- Data domain record - - Very likely need to use a new "slot", unless the customer already exists - - Find the list, take the first entry not in use (with **ZZ-To be assigned** label) - - **VERY IMPORTANT: Execute the task in both Dev and Prod tenant. Make sure the Name field (key) is the same in both, otherwise Dev2Prod will have issues** - - The Prod tenant should be locked for customizations, you need to unlock it first. Don't forget to go back and lock it again after - - In rare cases, the customer may exist already if there is an entitlement for another product, in this case skip this step -- Company/Vendor record - - Add a record - - Use the official Display Name from the order/Control Tower - - We started using the names in caps, as this is how Sparks had them, let's keep the rule. - - For Code, use the first 3-4 letters of the name, or, if the company has an acronym, you can use it - - Important: make sure you select **Customer** for the **Company type**. - - In rare cases, the customer may exist already if there is an entitlement for another product, in this case skip this step -- Entitlement record - - Add a record - - Display label - - Is SaaS customer: start by short name of company, followed by product name and SaaS suffix, for example **Decathlon SMAX SaaS** - - If it is a "Powered by" partner, add the "Power By" suffix for the name, example **Rigosis SMAX SaaS Powered by** - - MF internal: Prefix with Micro Focus, no need to add SaaS suffix (it's implicit), for example **Micro Focus IT SMAX** or **Micro Focus Service Hub SMAX**. - - Important to fill in the correct information for the mandatory fields: Entitlement type, Product, Primary Domain, Company. Business rules use this information extensively to filter down what is available in drop down lists, decide what logic to execute - - For specific cases, like Achmea, if a NASE is assigned, fill in the info. Any new ticket linked to this entitlement gets automatically assigned to the person listed here - - Fill in the CSM info, if available. The user listed will be automatically added as follower to all Support requests and a subset of Service Requests - - SAID - - Leave empty for regular SaaS customers - - Fill in with the "Powered By" string for the Powered by partners - - - -**New User** - -- Non Micro Focus user (aka DB user) - - Triggered when - - A new customer is onboarded, and an initial list is received from the CSM - - An existing user on an entitlement uses the **Add user to entitlement** offering - - Check the user doesn’t already exist - - If yes, go to the **Add user to an entitlement** section - - Create new record from the Person grid - - **VERY IMPORTANT:** Click the **Person type** checkbox, otherwise a contact gets created - - If you forgot, you need access to BO to create the user (with same UPN) and force a sync from the Person grid - - Upn: Use the email address (automatically populated with the email by default) - - Employment type: External - - Company: fill in with the relevant value - - **IMPORTANT:** Do not populate the **Data domains** and **Primary domain** at this point - - If the user is a "regular" customer user, you can fill in the **Default entitlement** value (for example, you may not want to do that if you add a partner) - - Once saved, go back in and populate the **Data domains** and **Primary domain** - - Entitlements M2M widget - - Unlikely to have to use it, unless it is a partner added the first time as part of a customer project. In this case the entitlement doesn't go into the default position. -- Micro Focus users (automatically added through SAML) - - Periodically check if any new users got added. This can happen because someone is supposed to be added to an entitlement or is supposed to work tickets, but in many situations, users get hold of our URL and click on it for curiosity - - R&D or Ops teams, people who logged in because they are supposed to work tickets - - Check their reporting structure and make sure they are who they say they are. - - Configure the following - - Company: Micro Focus - - Primary domain: Micro Focus - - Data domains: Micro Focus - - Employment type: blank - - You can manually add them to the relevant functional group if you know which one. Alternatively, there is an offering that does that, can be called by the authorized audience (anyone with the "PCS Lead" role) - - PS, pre-sales, specific functions - - If instructed, configure profile - - Company: Micro Focus - - Primary domain: Based on the main role - - Data domains: Above, plus potentially others, depending on the person responsibilities - - Employment type: External - - Example, if a PS consultant is asked to work on the MF IT project, the setup will be: -- Default entitlements/Entitlements - - With few exceptions (probably pre-sales), the majority of internal users needing to be added don't have a default entitlement. Add the relevant entitlement to the Entitlements M2M widget, if there is no default entitlement to be configured. -- All other cases, not known why a user connected - - Park the user in a "catch all" profile - - Company: Micro Focus - - Primary domain: Customer - - Data domains: Customer - - Employment type: External - - If later on, the user is identified as belonging to an actual entitlement or is supposed to be an agent, apply the instructions described above -- **IMPORTANT:** just because someone in Micro Focus asked for agent access, do not provide it, unless they are assigned to working tickets. - - Concrete example on when to **NOT** add someone. The user says he/she is a Premier support person or even a CSM and needs to see the tickets for their customers. The answer is to give them the **Account Viewer** role to have the information available from the portal - no need for agent access! - -**Modify existing user profile** - -- A user already exists in PCS but needs to be added to an additional entitlement -- Typically applies to users working for partners (with multiple customers) or internal Micro Focus people (PS, presales, etc) -- Triggered when - - A new customer is onboarded, and an initial list is received from the CSM - - An existing user on an entitlement uses the **Add user to entitlement** offering -- Data domains: append the customer Data domain (as defined in the Entitlement) -- Entitlements: add the new Entitlement to the M2M widget -- Exception - - An internal user may already exist because they connected before and ended up "parked" in the "Customer" placeholder - - Remove the "Customer" Data domains/Primary domains and follow the instructions listed in the "New user" section - -**Remove user** - -- Needs to be triggered from BO, which will convert the user into a contact -- Once a contact, change the status from **Inactive** to **Terminated** -- Clear the **Default entitlement** value and any record from the **Entitlements** section - -**User Management offerings** - -- **Add user to entitlement** offering - - If the email address is not a @microfocus.com domain, follow the instructions for adding a DB user - - **IMPORTANT:** If the email address doesn't appear to be the company email address, it is likely the user is a partner and may need to be treated specially, by first adding a new Company record for the partner. Alternatively, we can take the approach of considering this user as part of the customer company, and only model it as belonging to a new company when there is a need to add a second entitlement linked to the user. But, if we do it at a later date, it is important to identify all the users with this email domain and move them under the newly created Company record (see **New order/customer** section for the detailed procedure) - - If the email address is a @microfocus.com domain, follow the instructions for configuring a SAML user. - - It is possible the user doesn't already exist (never logged in). In this case, ask the requester to notify the user to first login (use the Discussions tab) - - Once the user record got created/updated, move the **Add user** task to **Validate** phase. The request should automatically close, there is no need for interaction with the requester. - - Exceptionally, if the request is not relevant (the user already exists, the offering incorrectly used, or other reasons), process the request as below: - - Edit the Task plan by deleting the **Closure** task, so the request doesn't automatically close when **Add user** task gets actioned - - Move the **Add user** task to **Canceled** - - Manually add a **Solution** (explain why the request is not relevant) and Completion code (usually **Out of scope**) -- **Remove user from entitlement** offering - - Tip: From the **User** user option, navigate to the Person record. - - If the user is part of multiple entitlements (like a partner, PS), just remove the relevant **Entitlement** reference from the Person record - - If the user is part of one entitlement (usually for a regular customer user), follow the procedure described in the **Remove user** section - - Once the relevant action above is completed, move the **Remove user** task to **Validate** phase. The request should automatically close, there is no need for interaction with the requester. -- **Reset user password** offering - - Tip: From the **User** user option, navigate to the Person record. - - Click on the **Reset password** button. Wait for the confirmation message at the top of the screen that the email notification got sent - - Once the relevant action above is completed, move the **Reset password** task to **Validate** phase. The request should automatically close, there is no need for interaction with the requester. - -**Process** - -- Monitor the "admin" Request queue - - Go to the Active Admin Cases" view. Make sure you don't make any changes to the view definition. If you like to use a different view, create a private one for yourself - - Add more people to the Admin group - - Only **Add user to entitlement**, **Remove user from entitlement, Reset user password** require intervention, the others have automated fulfillment (may require approval) - - See the **User Management offerings** section for instructions for processing each offering -- Monitor the Person grid for newly created SAML users - - - Use the **Users Pending Processing** view. Make sure you don't make any changes to the view definition. If you like to use a different view, create a private one for yourself. Also, don't modify the other public views - - Follow the instructions in the **New User** section \ No newline at end of file diff --git a/#recycle/Work/People Manager/FY24 Goals - Shen Wei.md b/#recycle/Work/People Manager/FY24 Goals - Shen Wei.md deleted file mode 100644 index bc9e4d30..00000000 --- a/#recycle/Work/People Manager/FY24 Goals - Shen Wei.md +++ /dev/null @@ -1,13 +0,0 @@ - - -I'm a senior manager responsible for SaaS operations and maintenance for cloud products in a global enterprise software company. I manage a global cloud operations team of 20+ people. The team is a global team covering different time zones. Our team is also responsible for interfacing with the product RnD team to understand requirements and communicate with them. I am designing myself and my team's goals from the below perspective: Leadership Activities, service delivery quality, Process Standardization, Operational Excellence, and Satisfy customers. could you please prepare a draft for me with efforts detail, and measurable KPIs for the above areas. - - - -| | | | | | -|---|---|---|---|---| -|**Leadership Activities**​|• Conduct regular team meetings and one-on-one sessions to provide guidance, support, and alignment.​

    Act as a liaison between the cloud service team and ITOM organization, ensuring effective communication and collaboration.​

    Participate in the hiring process for new team members, ensuring the selection of qualified candidates who align with the team's goals and culture.​

    Foster a positive work environment conducive to productivity, innovation, and growth.​|• Executive Dashboard: Implement an executive monthly report to track and communicate Cloud Service team key metrics and performance indicators.​

    100% Participation in Team meetings​

    100% Compliance in accordance with local legislation​||| -|**Service Delivery Quality**​|• Drive efficiencies and optimizations to deliver services in the most economical manner.​
    • Manage resource allocations effectively to meet business demands and maintain service levels.​
    • Continue to optimize cost structures across cloud and corporate services while maintaining service quality.​|• On-time Project Completion: 90%​

    Ensure 100% compliance with local legislation and industry regulations relevant to cloud operations​

    ​||| -|**Process Standardization**​|• Focus on standardization and modernization of processes, adopting best practices and industry standards such as ITIL.​

    Support initiatives to consolidate/migrate customers to cloud platforms, with a focus on shared environments where feasible.​

    Minimize process gaps and ensure zero deviations from defined processes.​

    Conduct quarterly reviews of documentation to ensure accuracy, relevance, and completeness.​

    ​|• Zero process gaps ​

    Quarterly review of process documentation​

    ​||| -|**Operational Excellence**​|• Aim for 90% of projects to be completed on time, ensuring timely delivery of services and solutions.​

    Continuously identify and implement improvements to existing processes and deliverables, enhancing operational efficiency and effectiveness.​

    Actively participate in the adoption of new features, technologies, and cloud solutions to improve operational capabilities.​

    Document and analyze lessons learned from project executions, incorporating feedback to drive continuous improvement.​

    ​|​

    60% of Project Completion within 3 months​

    100% Security Compliance​

    Expense Reduction Targets: Meet defined FY targets communicated by FinOps​

    Adoption of New Technologies: Regularly adopt new features/technologies to enhance operational capabilities​



    ​||| -|**Satisfy Customers**​|• Be an advocate for customer satisfaction, focusing on delivering value and exceeding customer expectations in every project and interaction.​

    Collaborate with cross-functional teams and stakeholders to support business goals and initiatives, such as migrations and security compliance efforts.​

    Ensure documentation of any planned/unplanned change predefined timeframes to maintain transparency and accountability.​

    Participate in the onboarding of new customers to the cloud business, ensuring smooth transitions and successful deployments.​

    ​|• customer escalations due to cloud service errors <3​||| \ No newline at end of file diff --git a/#recycle/Work/SG Yearly DR Execution Plan (EFS Replication Only).md b/#recycle/Work/SG Yearly DR Execution Plan (EFS Replication Only).md deleted file mode 100644 index 853cf88b..00000000 --- a/#recycle/Work/SG Yearly DR Execution Plan (EFS Replication Only).md +++ /dev/null @@ -1,56 +0,0 @@ -## **1. Objective** - -Ensure business continuity and data protection by implementing an effective DR strategy for the customer, leveraging EFS replication, RDS PITR, and different failover methods. - -## **2. DR Scenarios & Recovery Options** - -| | **Method** | **RDS Recovery** | **EFS Recovery** | **Failover Steps** | **Estimated Downtime (RTO)** | **RPO** | **Cost Impact** | -| ------------------ | ------------------------------- | ---------------- | ---------------------------- | ------------------------------------------------------------------------------------------------- | ---------------------------- | ------- | --------------- | -| DR Basic Service | **Cold Backup-Restore** | Snapshot (6h) | Backup Restore (6h) | 1. Restore RDS from snapshot (6h)
    2. Restore EFS from snapshot (6h)
    3. Recover EKS (4h) | **24 hours** | 4 hours | **Base Cost** | -| DR Premium Service | **EFS Replica Only (RDS PITR)** | PITR (6h) | EFS Replica + Restore (0.2h) | 1. RDS recovery from PITR (6h)
    2. Stop EFS sync (0.2h)
    3. Full EKS recovery | **6 hours** | 15 min | **+30% Cost** | - ---- - -## **3. Downtime Estimation & RTO Considerations** - -- **EFS Replica Only (RDS PITR)** - - **6-hour RTO**, significantly reducing downtime compared to cold restore. - - **15-minute RPO** ensures minimal data loss. - ---- - -## **4. DR Execution Plan** - -### **4.1 Pre-DR Readiness Checks** - -- Ensure **EFS replication** is active and functioning correctly. -- Verify **RDS PITR backups** and retention policies. -- Pre-configure **EKS deployment templates(Velero)** for rapid recovery. - -### **4.2 Disaster Recovery Trigger** - -- DR activation is **initiated upon a major failure event** in the primary environment. -- Decision criteria include **regional failure, prolonged service outage, or severe data corruption**. - -### **4.3 Execution Steps** - -#### **EFS Replica Only (RDS PITR)** - -1. **Recover RDS** from PITR (**6 hours**). -2. **Stop EFS replication sync** (**0.2 hours**). -3. **Recover EKS cluster** and validate application (**immediate**). - -### **4.4 Post-Failover Validation** - -- Confirm **data consistency** between DR and primary environments. -- Validate **application services and connectivity**. -- Communicate DR activation and service restoration to stakeholders. - ---- - -## **5. DR Testing & Cost Estimation** - -- **Annual DR validation test** is required, adding an **estimated 2 months of AWS costs**. - - **EFS Replica Only (RDS PITR):** - - **$20.8K/month** - diff --git a/#recycle/knowlegebase/OpenClaw-技能清单.md b/#recycle/knowlegebase/OpenClaw-技能清单.md deleted file mode 100644 index 799890f3..00000000 --- a/#recycle/knowlegebase/OpenClaw-技能清单.md +++ /dev/null @@ -1,389 +0,0 @@ -# OpenClaw 技能笔记 - -> 创建时间: 2026-03-19 -> 整理者: 星辉 - ---- - -## 📋 技能清单总览 - -本文档记录 OpenClaw 中所有可用的技能(Skills)。 - ---- - -## 🔐 账号与密码 - -### 1. 1password -- **描述:** 1Password CLI (op) 工具 -- **用途:** 安装CLI、桌面应用集成、单/多账户登录、读写/运行密码 -- **路径:** `~/.agents/skills/1password-1.0.1/SKILL.md` - ---- - -## 🍎 Apple 生态 - -### 2. apple-notes -- **描述:** Apple Notes 管理 via `memo` CLI -- **用途:** 创建、查看、编辑、删除、搜索、移动、导出笔记 -- **路径:** `~/.openclaw/skills/apple-notes/SKILL.md` - -### 3. apple-reminders -- **描述:** Apple Reminders via `remindctl` CLI -- **用途:** 列出、添加、编辑、完成、删除提醒,支持列表、日期过滤、JSON/纯文本输出 -- **路径:** `~/.openclaw/skills/apple-reminders/SKILL.md` - -### 4. accli -- **描述:** Apple Calendar CLI -- **用途:** 列出日历、查看事件、创建/更新/删除日历事件、检查空闲时间 -- **触发词:** "查看日历"、"安排会议"、"我今天有什么安排"、"明天我有空吗" -- **路径:** `~/.openclaw/skills/accli/SKILL.md` - ---- - -## ☁️ 云服务与协作 - -### 5. gog -- **描述:** Google Workspace CLI -- **用途:** Gmail、日历、云盘、联系人、表格、文档 -- **路径:** `~/.agents/skills/gog/SKILL.md` - -### 6. feishu-chat-history -- **描述:** 获取飞书群聊历史 -- **用途:** 读取、回顾、总结飞书群聊消息 -- **触发词:** "看群聊记录"、"群里聊了啥"、"chat history" -- **路径:** `~/.agents/skills/feishu-chat-history/SKILL.md` - -### 7. feishu-cron-reminder -- **描述:** 飞书定时提醒 -- **用途:** 创建定时发送消息到飞书聊天的cron任务 -- **触发词:** "飞书定时提醒"、"定时任务发飞书"、"每小时提醒" -- **路径:** `~/.agents/skills/feishu-cron-reminder/SKILL.md` - -### 8. feishu-doc -- **描述:** 飞书文档获取 -- **用途:** 获取飞书Wiki、文档、表格、Bitable内容,自动转换为Markdown -- **路径:** `~/.agents/skills/feishu-doc-1.2.7/SKILL.md` - -### 9. feishu-perm -- **描述:** 飞书权限管理 -- **用途:** 文档和文件的分享、权限、协作者管理 -- **触发词:** 分享、权限、协作者 -- **路径:** `~/.agents/skills/feishu-perm/SKILL.md` - -### 10. feishu-screenshot -- **描述:** 截屏并发送到飞书 -- **用途:** 截取屏幕并通过飞书分享 -- **触发词:** "截个屏发飞书"、"截屏"、"screenshot" -- **路径:** `~/.agents/skills/feishu-screenshot/SKILL.md` - -### 11. feishu-send-file -- **描述:** 发送文件到飞书 -- **用途:** 通过REST API发送文件、附件到飞书群或个人 -- **触发词:** "发文件到飞书"、"send file to feishu" -- **路径:** `~/.agents/skills/feishu-send-file/SKILL.md` - ---- - -## 💬 通讯工具 - -### 12. slack -- **描述:** Slack 控制 -- **用途:** 通过 slack 工具控制Slack,包括消息反应、pin/unpin -- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/slack/SKILL.md` - ---- - -## 🌐 网络与浏览器 - -### 13. agent-browser -- **描述:** 无头浏览器自动化CLI -- **用途:** 为AI代理优化的浏览器自动化,支持无障碍树快照和基于引用的元素选择 -- **路径:** `~/.openclaw/skills/agent-browser-clawdbot/SKILL.md` - -### 14. tavily-search -- **描述:** Tavily 搜索API -- **用途:** 网页搜索(替代Brave),返回相关结果标题、URL、摘要 -- **路径:** `~/.openclaw/skills/openclaw-tavily-search/SKILL.md` - ---- - -## 🛠️ 开发工具 - -### 15. Docker -- **描述:** Docker 容器、镜像、Compose、网络、卷、调试 -- **用途:** Docker相关操作、生产环境加固、命令保持稳定 -- **路径:** `~/.openclaw/skills/docker/SKILL.md` - -### 16. Code -- **描述:** 编码工作流 -- **用途:** 规划、实现、验证、测试的清洁软件开发流程 -- **路径:** `~/.agents/skills/code-1.0.4/SKILL.md` - -### 17. git-essentials -- **描述:** 基础Git命令 -- **用途:** 版本控制、分支、协作 -- **路径:** `~/.agents/skills/git-essentials-1.0.0/SKILL.md` - -### 18. frontend-design -- **描述:** 前端界面设计 -- **用途:** 创建独特、生产级的前端界面,高设计质量 -- **路径:** `~/.agents/skills/frontend-design-3-0.1.0/SKILL.md` - -### 19. security-auditor -- **描述:** 安全审计 -- **用途:** 代码安全漏洞审查、身份验证流程、OWASP Top 10审计、CORS/CSP配置、敏感数据处理、输入验证、SQL注入预防、XSS保护 -- **路径:** `~/.agents/skills/security-auditor-1.0.0/SKILL.md` - -### 20. architecture-designer -- **描述:** 系统架构设计 -- **用途:** 设计新系统架构、审查现有设计、架构决策、ADRs、可扩展性规划 -- **路径:** `~/.agents/skills/architecture-designer-0.1.0/SKILL.md` - -### 21. supabase-postgres-best-practices -- **描述:** Supabase Postgres 最佳实践 -- **用途:** Postgres性能优化和最佳实践 -- **路径:** `~/.agents/skills/supabase-postgres-best-practices/SKILL.md` - -### 22. tmux -- **描述:** Tmux 远程控制 -- **用途:** 远程控制tmux会话,发送按键和抓取面板输出 -- **路径:** `~/.agents/skills/tmux-1.0.0/SKILL.md` - ---- - -## 📝 笔记与知识管理 - -### 23. obsidian -- **描述:** Obsidian 保险库 -- **用途:** 处理Obsidian纯文本Markdown笔记,通过obsidian-cli自动化 -- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/obsidian/SKILL.md` - -### 24. ontology -- **描述:** 知识图谱 -- **用途:** 结构化代理记忆和可组合技能,创建/查询实体(Person、Project、Task、Event、Document),链接相关对象,执行约束,多步骤动作规划 -- **触发词:** "记住"、"关于X我知道什么"、"链接X到Y"、"显示依赖" -- **路径:** `~/.agents/skills/ontology/SKILL.md` - -### 25. Memory -- **描述:** 无限有序记忆 -- **用途:** 补充代理内置记忆的无限分类存储 -- **路径:** `~/.agents/skills/memory-1.0.2/SKILL.md` - -### 26. obsidian-ontology-sync -- **描述:** Obsidian与 Ontology 双向同步 -- **用途:** 从markdown自动提取实体和关系,维护本体图谱,提供反馈改进笔记结构 -- **路径:** `~/.agents/skills/obsidian-ontology-sync-1.0.1/SKILL.md` - ---- - -## 🎨 内容创作 - -### 27. blog-writer -- **描述:** 博客文章写作 -- **用途:** 以作家独特风格写博客文章、长篇内容,从研究到Notion发布的完整工作流 -- **路径:** `~/.agents/skills/blog-writer-0.1.0/SKILL.md` - -### 28. copywriting -- **描述:** 文案写作 -- **用途:** 为落地页、邮件、广告、销售页、营销材料写 persuasive copy,标题、CTA、产品描述、广告文案、邮件序列 -- **触发词:** "写文案"、"copywriting"、"landing page copy"、"headline" -- **路径:** `~/.agents/skills/copywriting-0.1.0/SKILL.md` - -### 29. content-strategy -- **描述:** 内容营销策略 -- **用途:** 为solopreneur业务构建和执行内容营销策略 -- **触发词:** "内容策略"、"content marketing"、"内容计划"、"内容日历" -- **路径:** `~/.agents/skills/content-strategy-0.1.0/SKILL.md` - -### 30. seo-content-writer -- **描述:** SEO内容写作 -- **用途:** 写SEO优化内容、创建博客文章、文章 -- **触发词:** "写SEO内容"、"创建博客文章"、"内容写作" -- **路径:** `~/.agents/skills/seo-content-writer-2.0.0/SKILL.md` - -### 31. social-content -- **描述:** 社交媒体内容 -- **用途:** 创建、安排、优化LinkedIn、Twitter/X、Instagram、TikTok、Facebook等内容 -- **触发词:** "LinkedIn post"、"Twitter thread"、"社交媒体"、"内容日历" -- **路径:** `~/.agents/skills/social-content-generator-0.1.0/SKILL.md` - -### 32. Social Media Scheduler -- **描述:** 社交媒体排程 -- **用途:** 计划、起草、跨平台组织社交媒体内容,创建内容日历 -- **路径:** `~/.agents/skills/social-media-scheduler-1.0.0/SKILL.md` - -### 33. research-paper-writer -- **描述:** 研究论文写作 -- **用途:** 创建遵循IEEE/ACM格式标准的正式学术论文 -- **路径:** `~/.agents/skills/research-paper-writer-0.1.0/SKILL.md` - -### 34. Powerpoint / PPTX -- **描述:** PowerPoint 演示文稿 -- **用途:** 创建、检查、编辑Microsoft PowerPoint演示文稿,可靠的布局、模板、占位符、笔记、图表 -- **路径:** `~/.openclaw/skills/powerpoint-pptx/SKILL.md` - ---- - -## 📊 商业与分析 - -### 35. Market Research -- **描述:** 市场研究 -- **用途:** 规模市场、分析竞争对手、用实际框架和数据源验证机会 -- **路径:** `~/.agents/skills/market-research-1.0.0/SKILL.md` - -### 36. interview-designer -- **描述:** 面试设计 -- **用途:** 分析简历,使用基于证据的方法设计面试策略 -- **路径:** `~/.agents/skills/interview-designer-1.0.0/SKILL.md` - -### 37. backtest-expert -- **描述:** 回测专家 -- **用途:** 系统交易策略回测的专家指导 -- **触发词:** 回测、策略验证、鲁棒性测试、避免过度拟合 -- **路径:** `~/.agents/skills/backtest-expert-0.1.0/SKILL.md` - -### 38. automation-workflows -- **描述:** 自动化工作流 -- **用途:** 设计和实施自动化工作流以节省时间和扩展运营 -- **触发词:** "自动化"、"automation workflow"、"save time"、"reduce manual work" -- **路径:** `~/.agents/skills/automation-workflows-0.1.0/SKILL.md` - ---- - -## 🧠 AI 代理能力 - -### 39. proactive-agent-lite -- **描述:** 主动代理Lite -- **用途:** 将AI代理从任务追随者转变为积极主动的伙伴,具有记忆架构、reverse prompting和自愈模式 -- **路径:** `~/.openclaw/skills/proactive-agent-lite/SKILL.md` - -### 40. self-improvement -- **描述:** 自我改进 -- **用途:** 捕获学习、错误、纠正以实现持续改进 -- **触发词:** 命令/操作失败、用户纠正、请求不存在的功能、外部API失败、知识过时 -- **路径:** `~/.openclaw/skills/self-improving-agent/SKILL.md` - -### 41. self-reflection -- **描述:** 自我反思 -- **用途:** 定期自我反思,分析近期会话,写简洁可行的见解 -- **路径:** `~/.agents/skills/agent-self-reflection-1.0.0/SKILL.md` - -### 42. brainstorming -- **描述:** 头脑风暴 -- **用途:** 在任何创造性工作之前必须使用 - 创建功能、构建组件、添加功能或修改行为 -- **路径:** `~/.agents/skills/brainstorming-0.1.0/SKILL.md` - -### 43. writing-plans -- **描述:** 写作计划 -- **用途:** 有规范/需求的多步骤任务规范 -- **路径:** `~/.agents/skills/writing-plans-0.1.0/SKILL.md` - -### 44. executing-plans -- **描述:** 执行计划 -- **用途:** 在单独会话中执行包含审查检查点的书面实施计划 -- **路径:** `~/.agents/skills/executing-plans-0.1.0/SKILL.md` - -### 45. task-summary -- **描述:** 任务总结 -- **用途:** 任务完成后生成结构化总结,记录目标、步骤、结果、经验教训 -- **路径:** `~/.openclaw/skills/task-summary/SKILL.md` - ---- - -## 🔧 工具与系统 - -### 46. clawhub -- **描述:** ClawHub CLI -- **用途:** 从clawhub.com搜索、安装、更新、发布代理技能 -- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/clawhub/SKILL.md` - -### 47. find-skills -- **描述:** 发现技能 -- **用途:** 当用户询问"如何做X"、"找X的技能"、"有能...的技能吗"时帮助用户发现和安装技能 -- **路径:** `~/.agents/skills/find-skills/SKILL.md` - -### 48. skill-creator -- **描述:** 技能创建器 -- **用途:** 创建有效技能的指南 -- **路径:** `~/.agents/skills/skill-creator-0.1.0/SKILL.md` - -### 49. skill-vetter -- **描述:** 技能审核 -- **用途:** AI代理的安全优先技能审核,安装来自ClawHub、GitHub或其他来源的技能之前检查 -- **路径:** `~/.agents/skills/skill-vetter-1.0.0/SKILL.md` - -### 50. clawdefender -- **描述:** 安全防御 -- **用途:** AI代理的安全扫描器和输入清理器,检测prompt注入、命令注入、SSRF、凭证外泄、路径遍历攻击 -- **路径:** `~/.agents/skills/clawdefender-1/SKILL.md` - -### 51. opencode-controller -- **描述:** Opencode 控制器 -- **用途:** 通过斜杠命令控制Opencode,管理会话、选择模型、切换代理 -- **路径:** `~/.agents/skills/opencode-controller-1.0.0/SKILL.md` - ---- - -## 🌤️ 生活与娱乐 - -### 52. weather -- **描述:** 天气 -- **用途:** 通过wttr.in或Open-Meteo获取当前天气和预报 -- **触发词:** 天气、温度、预报 -- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/weather/SKILL.md` - -### 53. video-frames -- **描述:** 视频帧提取 -- **用途:** 使用ffmpeg从视频提取帧或短片段 -- **路径:** `~/.agents/skills/video-frames-1.0.0/SKILL.md` - -### 54. FFmpeg Video Editor -- **描述:** FFmpeg 视频编辑器 -- **用途:** 从自然语言视频编辑请求生成FFmpeg命令 - 剪切、裁剪、转换、压缩、改变宽高比、提取音频等 -- **路径:** `~/.agents/skills/ffmpeg-video-editor-1.0.0/SKILL.md` - -### 55. UI/UX Pro Max -- **描述:** UI/UX 设计 -- **用途:** UI/UX设计智能和实现指导,构建精美界面 -- **路径:** `~/.agents/skills/ui-ux-pro-max-0.1.0/SKILL.md` - ---- - -## 🛡️ 系统与运维 - -### 56. healthcheck -- **描述:** 主机安全检查 -- **用途:** 主机安全加固和风险容忍配置 -- **触发词:** 安全审计、防火墙/SSH/更新加固、风险态势、暴露审查、OpenClaw cron调度 -- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/healthcheck/SKILL.md` - -### 57. node-connect -- **描述:** OpenClaw 节点连接 -- **用途:** 诊断Android、iOS、macOS companion app的配对失败 -- **触发词:** QR/设置码手动连接失败、本地Wi-Fi正常但VPS/tailnet不正常、配对要求、未经授权、bootstrap token无效/过期 -- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/node-connect/SKILL.md` - ---- - -## 📊 技能分类汇总 - -| 分类 | 数量 | 技能 | -|------|------|------| -| Apple 生态 | 3 | apple-notes, apple-reminders, accli | -| 云服务/协作 | 7 | gog, feishu-*(6个) | -| 通讯工具 | 1 | slack | -| 网络/浏览器 | 2 | agent-browser, tavily-search | -| 开发工具 | 8 | Docker, Code, git-essentials, frontend-design, security-auditor, architecture-designer, supabase-postgres-best-practices, tmux | -| 笔记/知识管理 | 5 | obsidian, ontology, Memory, obsidian-ontology-sync, task-summary | -| 内容创作 | 8 | blog-writer, copywriting, content-strategy, seo-content-writer, social-content, Social Media Scheduler, research-paper-writer, Powerpoint/PPTX | -| 商业/分析 | 4 | Market Research, interview-designer, backtest-expert, automation-workflows | -| AI代理能力 | 7 | proactive-agent-lite, self-improvement, self-reflection, brainstorming, writing-plans, executing-plans, task-summary | -| 工具/系统 | 6 | clawhub, find-skills, skill-creator, skill-vetter, clawdefender, opencode-controller | -| 生活/娱乐 | 4 | weather, video-frames, FFmpeg Video Editor, UI/UX Pro Max | -| 系统/运维 | 2 | healthcheck, node-connect | - -**总计: 57 个技能** - ---- - -*笔记创建于 2026-03-19 by 星辉* diff --git a/#recycle/knowlegebase/backup-script-usage.md b/#recycle/knowlegebase/backup-script-usage.md deleted file mode 100644 index 7ae5afa7..00000000 --- a/#recycle/knowlegebase/backup-script-usage.md +++ /dev/null @@ -1,87 +0,0 @@ -# OpenClaw 备份脚本使用指南 - -## 概述 - -OpenClaw 备份脚本用于自动备份 OpenClaw 配置到 NAS 存储。 - -## 脚本位置 - -- **Mac Mini**: `~/.openclaw/scripts/backup-openclaw.sh` -- **Ubuntu2**: `/home/shenwei/.openclaw/scripts/backup-openclaw.sh` - -## 使用方法 - -```bash -# Mac Mini 备份 -~/.openclaw/scripts/backup-openclaw.sh macmini - -# Ubuntu2 备份 -/home/shenwei/.openclaw/scripts/backup-openclaw.sh ubuntu2 -``` - -## 文件命名规则 - -备份文件命名格式:`openclaw-{node}-{timestamp}.tar` - -| 节点 | 示例 | -|------|------| -| Mac Mini | `openclaw-macmini-20260317112001.tar` | -| Ubuntu2 | `openclaw-ubuntu2-20260317112001.tar` | - -## 备份目的地 - -- **NAS 路径**: `/volume2/backup/openclaw/` -- **访问方式**: SSH (shenwei@nas) - -## 执行流程 - -``` -[1/5] Creating backup: openclaw-{node}-{timestamp}.tar -[2/5] Verifying backup... -[3/5] Transferring to NAS... -[4/5] Verifying transfer... -[5/5] Cleaning up local temporary files... -``` - -## 备份内容 - -- `~/.openclaw/` 目录 -- 排除项: - - `logs/` 目录 - - `*.log` 文件 - - `.git` 目录 - -## 验证备份 - -查看 NAS 上的备份文件: - -```bash -ssh nas "ls -la /volume2/backup/openclaw/" -``` - -## 验证 tar 文件 - -```bash -ssh nas "tar -tvf /volume2/backup/openclaw/openclaw-{node}-{timestamp}.tar" -``` - -## 定时备份 (可选) - -可以使用 cron 设置定时备份: - -```bash -# 每天凌晨 3 点自动备份 -0 3 * * * /home/shenwei/.openclaw/scripts/backup-openclaw.sh ubuntu2 >> /home/shenwei/.openclaw/logs/backup.log 2>&1 -``` - -## 注意事项 - -1. 确保 Ubuntu2 到 NAS 的 SSH 免密登录已配置 -2. 确保 NAS 备份目录存在 -3. 备份文件会自动清理本地临时文件 -4. 首次使用建议手动执行测试 - -## 相关文档 - -- SSH 免密登录配置: [[#recycle/knowlegebase/macmini-nas-ssh-config]] -- Ubuntu2 SSH 配置: [[#recycle/knowlegebase/ubuntu2-ssh-config]] diff --git a/#recycle/knowlegebase/macmini-nas-ssh-config.md b/#recycle/knowlegebase/macmini-nas-ssh-config.md deleted file mode 100644 index 8cfd2835..00000000 --- a/#recycle/knowlegebase/macmini-nas-ssh-config.md +++ /dev/null @@ -1,122 +0,0 @@ -# Mac Mini 配置 SSH 免密登录到 NAS - -## 概述 - -本文档记录 Mac Mini (192.168.3.189) 配置 SSH 免密登录到 NAS (192.168.3.17) 的详细步骤。 - -## 前提条件 - -- Mac Mini 已安装 SSH 客户端(内置) -- NAS 已开启 SSH 服务 -- 拥有 NAS 用户名和密码 - -## SSH 密钥配置 - -### 1. 生成 SSH 密钥(如不存在) - -```bash -ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519 -``` - -### 2. 传输公钥到 NAS - -```bash -# 方法1:使用 sshpass(需要安装) -sshpass -p 'NAS密码' ssh -o StrictHostKeyChecking=no shenwei@192.168.3.17 'cat >> ~/.ssh/authorized_keys' - -# 方法2:手动复制 -# 1. 查看公钥 -cat ~/.ssh/id_ed25519.pub -# 2. 登录 NAS -ssh shenwei@192.168.3.17 -# 3. 追加公钥到 authorized_keys -echo '公钥内容' >> ~/.ssh/authorized_keys -``` - -## ~/.ssh/config 配置 - -### 完整配置示例 - -```bash -# NAS -Host nas - HostName 192.168.3.17 - User shenwei - IdentityFile ~/.ssh/id_ed25519 - ProxyCommand none - -# Ubuntu1 -Host ubuntu1 - HostName 192.168.3.47 - User shenwei - IdentityFile ~/.ssh/id_ed25519 - ProxyCommand none - -# Ubuntu2 -Host ubuntu2 - HostName 192.168.3.45 - User shenwei - IdentityFile ~/.ssh/id_ed25519 - ProxyCommand none - -# Mac Mini (本地) -Host macmini - HostName 192.168.3.189 - User weishen - IdentityFile ~/.ssh/id_ed25519 - ProxyCommand none - -# VPS1 -Host vps1 - HostName 192.227.222.142 - User root - IdentityFile ~/.ssh/id_ed25519 - ProxyCommand none - -# VPS2 -Host vps2 - HostName 104.194.92.188 - User root - IdentityFile ~/.ssh/id_ed25519 - ProxyCommand none -``` - -## 测试免密登录 - -```bash -# 测试 NAS 连接 -ssh nas "echo success" - -# 测试所有服务器 -for server in macmini ubuntu1 ubuntu2 nas; do - ssh $server "echo $server OK" -done -``` - -## 已配置的服务器 - -| 主机 | IP | 用户 | 状态 | -|------|-----|------|------| -| nas | 192.168.3.17 | shenwei | ✅ 已配置 | -| ubuntu1 | 192.168.3.47 | shenwei | ✅ 已配置 | -| ubuntu2 | 192.168.3.45 | shenwei | ✅ 已配置 | -| macmini | 192.168.3.189 | weishen | ✅ 已配置 | -| vps1 | 192.227.222.142 | root | ✅ 已配置 | -| vps2 | 104.194.92.188 | root | ✅ 已配置 | - -## 故障排查 - -### 问题:Could not resolve hostname nas - -**解决**:确保 ~/.ssh/config 中已添加 nas 别名配置 - -### 问题:Permission denied - -**解决**: -1. 检查公钥是否已添加到目标服务器的 ~/.ssh/authorized_keys -2. 检查 ~/.ssh 目录权限应为 700 -3. 检查 ~/.ssh/authorized_keys 权限应为 600 - -## 相关文档 - -- Ubuntu2 SSH 配置: [[#recycle/knowlegebase/ubuntu2-ssh-config]] diff --git a/#recycle/knowlegebase/macmini-webdav-setup.md b/#recycle/knowlegebase/macmini-webdav-setup.md deleted file mode 100644 index 5209b130..00000000 --- a/#recycle/knowlegebase/macmini-webdav-setup.md +++ /dev/null @@ -1,445 +0,0 @@ -# Mac Mini WebDAV 服务配置指南 - -## 目的 -在 Mac Mini 上通过原生 Apache 配置 WebDAV 服务,用于共享 Obsidian 笔记。 - ---- - -## 一、Mac Mini 本地配置 - -### 步骤 1: 启用 WebDAV 模块 - -编辑 Apache 配置文件,启用 DAV 模块: - -```bash -sudo nano /etc/apache2/httpd.conf -``` - -找到以下行并取消注释(去掉 `#`): - -```apache -LoadModule dav_module libexec/apache2/mod_dav.so -LoadModule dav_fs_module libexec/apache2/mod_dav_fs.so -LoadModule dav_lock_module libexec/apache2/mod_dav_lock_module -``` - -### 步骤 2: 创建 DavLockDB 目录 - -WebDAV 需要一个目录来存储锁文件: - -```bash -sudo mkdir -p /var/run/dav -sudo chown _www:_www /var/run/dav -``` - -### 步骤 3: 创建 WebDAV 目录并链接 Obsidian - -```bash -sudo mkdir -p /Library/WebServer/Documents/Obsidian -sudo ln -s /Users/weishen/Obsidian/shenwei /Library/WebServer/Documents/Obsidian/shenwei -``` - -### 步骤 4: 配置 WebDAV - -创建配置文件: - -```bash -sudo nano /etc/apache2/other/webdav.conf -``` - -**配置内容(完整版):** - -```apache -DavLockDB /var/run/dav/DavLock - - - DAVMinTimeout 240 - - -Alias /webdav "/Library/WebServer/Documents" - - - Options Indexes FollowSymLinks - AllowOverride None - Require all granted - - DAV On - DAVDepthInfinity off - - Header set Allow "OPTIONS, GET, HEAD, POST, PUT, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK" - - AuthType Basic - AuthName "WebDAV" - AuthUserFile /etc/apache2/webdav.users - Require valid-user - -``` - -### 步骤 5: 创建访问用户 - -```bash -sudo htpasswd -c /etc/apache2/webdav.users webdav -``` - -输入密码: `macmini_dav` - -> **注意**: 用户名和密码需要与后续 Obsidian 客户端配置一致 - -### 步骤 6: 设置目录权限(重要!) - -WebDAV 需要 Apache 运行用户 (`_www`) 对 Obsidian 目录有读写权限: - -```bash -# 修复用户目录权限 -sudo chmod o+x /Users/weishen -sudo chmod -R o+rx /Users/weishen/Obsidian - -# 将 Obsidian 目录所有权改为 _www -sudo chown -R _www:_www /Library/WebServer/Documents/Obsidian -sudo chown -R _www:_www /Users/weishen/Obsidian/shenwei -sudo chmod -R 775 /Users/weishen/Obsidian/shenwei -``` - -### 步骤 7: 启动 Apache 服务 - -```bash -sudo apachectl start -``` - ---- - -## 二、FRP 端口映射配置 - -在 Mac Mini 上编辑 FRP 配置文件: - -```bash -sudo nano /opt/frp/frp_0.65.0_darwin_arm64/frpc.toml -``` - -**添加以下配置(WebDAV 使用 80 端口):** - -```toml -[[proxies]] -name = "macmini-webdav" -type = "tcp" -localIP = "127.0.0.1" -localPort = 80 -remotePort = 60080 -``` - -> **重要**: 如果 Mac Mini 上设置了代理(科学上网),需要在 FRPC 启动时添加 `no_proxy` 环境变量: -> ```bash -> export no_proxy="192.227.222.142,127.0.0.1,localhost" -> cd /opt/frp/frp_0.65.0_darwin_arm64 && ./frpc -c frpc.toml -> ``` - ---- - -## 三、VPS1 Caddy 反向代理配置 - -在 VPS1 上编辑 Caddyfile: - -```bash -sudo nano /etc/caddy/Caddyfile -``` - -**添加以下配置:** - -```bash -# WebDAV 外网访问 -macwebdav.ishenwei.online { - reverse_proxy localhost:60080 -} -``` - -**重载 Caddy 配置:** - -```bash -sudo systemctl reload caddy -``` - -> **注意**: 需要先在 DNS 服务商处添加 A 记录: -> - 主机记录: `macwebdav` -> - 记录类型: `A` -> - 记录值: `192.227.222.142` (VPS1 IP) - ---- - -## 四、防火墙配置 - -### VPS1 防火墙(如果使用 UFW) - -```bash -sudo ufw allow 60080/tcp -``` - ---- - -## 五、常用命令 - -### Apache 命令 - -| 命令 | 功能 | -|------|------| -| `sudo apachectl start` | 启动 Apache | -| `sudo apachectl stop` | 停止 Apache | -| `sudo apachectl restart` | 重启 Apache | -| `sudo apachectl -t` | 检查配置语法 | -| `sudo apachectl -M \| grep dav` | 确认 WebDAV 模块已加载 | - -### FRP 命令 - -```bash -# 重启 FRPC(Mac Mini 上) -# in tmux -tmux attach -t frpc -# 停止现有进程 (Ctrl+C in tmux) -# 重启(注意添加 no_proxy) -export no_proxy="192.227.222.142,127.0.0.1,localhost" && cd /opt/frp/frp_0.65.0_darwin_arm64 && ./frpc -c frpc.toml -``` - -### Caddy 命令(VPS1) - -```bash -sudo systemctl reload caddy -``` - ---- - -## 六、Obsidian 客户端连接配置(最终验证版本) - -### 配置参数 - -| 配置项 | 值 | -|--------|-----| -| **服务器地址** | `https://macwebdav.ishenwei.online/webdav/Obsidian/` | -| **用户名** | `webdav` | -| **密码** | `macmini_dav` | -| **鉴权类型** | `basic` | -| **Depth header** | `只支持 depth='1'` | - -### 配置步骤 - -1. 打开 Obsidian -2. 安装 **Remotely Save** 插件(或其他 WebDAV 同步插件) -3. 选择远程服务为 **WebDAV** -4. 填写上方配置参数 -5. 点击 **检查** 按钮验证连接 -6. 开始同步 - ---- - -## 七、内网访问 - -- **URL**: `http://192.168.3.189/webdav/` -- **用户名**: `webdav` -- **密码**: `macmini_dav` - ---- - -## 八、注意事项 - -1. **安全提示**: - - Basic 认证密码明文传输,建议仅在内网使用 - - 外网访问建议配合 HTTPS(Caddy 自动提供 Let's Encrypt) - -2. **端口规划**: - - Apache: 80 - - FRP 映射: 60080 - -3. **防火墙**: - - Mac 防火墙需允许 80 端口入站 - - VPS 防火墙需开放 FRP 映射的端口 - -4. **开机自启**: - - Apache 开机自动启动(MacOS 默认行为) - - FRPC 需配置开机自启(tmux 或 launchd) - -5. **代理问题**: - - 如果 Mac Mini 使用科学上网代理,FRPC 需要设置 `no_proxy` 环境变量 - - 参考上面的 FRP 命令部分 - ---- - -## 九、故障排除 - -### 问题:500 Internal Server Error - -**原因**: DavLockDB 目录权限不足 - -**解决**: -```bash -sudo chown -R _www:_www /var/run/dav -``` - -### 问题:403 Forbidden - -**原因**: Obsidian 目录权限不足,Apache 无法写入 - -**解决**: -```bash -sudo chown -R _www:_www /Library/WebServer/Documents/Obsidian -sudo chown -R _www:_www /Users/weishen/Obsidian/shenwei -sudo chmod -R 775 /Users/weishen/Obsidian/shenwei -``` - -### 问题:无法解析域名 - -**原因**: DNS 记录未生效 - -**解决**: -1. 确认 DNS A 记录已添加 -2. 等待 5-30 分钟 DNS 传播 -3. 本地刷新 DNS 缓存:`sudo dscacheutil -flushcache` - -### 问题:FRPC 连接超时 - -**原因**: Mac Mini 代理设置干扰 FRPC 连接 - -**解决**: -```bash -export no_proxy="192.227.222.142,127.0.0.1,localhost" -``` - -### 检查 Apache 状态 -```bash -sudo apachectl status -``` - -### 查看日志 -```bash -sudo tail -f /var/log/apache2/error_log -``` - -### 确认 WebDAV 模块加载 -```bash -sudo apachectl -M | grep -E "dav|webdav" -``` - -### 测试本地访问 -```bash -curl -u webdav:macmini_dav http://127.0.0.1/webdav/ -``` - -### 测试 FRP 端口连通性(VPS1) -```bash -curl -u webdav:macmini_dav http://localhost:60080/webdav/ -``` - ---- - -## 十、测试步骤 - -### 阶段 1: Apache 本地测试(Mac Mini) - -#### 1.1 检查 Apache 状态 -```bash -sudo apachectl status -``` -**预期输出**: Apache 运行中 (running) - -#### 1.2 确认 WebDAV 模块已加载 -```bash -sudo apachectl -M | grep -E "dav|webdav" -``` -**预期输出**: -- `dav_module (shared)` -- `dav_fs_module (shared)` -- `dav_lock_module (shared)` - -#### 1.3 测试本地认证访问 -```bash -curl -u webdav:macmini_dav -I http://127.0.0.1/webdav/ -``` -**预期输出**: HTTP/1.1 200 OK - -#### 1.4 列出 WebDAV 目录内容 -```bash -curl -u webdav:macmini_dav -X PROPFIND -H "Depth: 1" http://127.0.0.1/webdav/Obsidian/shenwei/ -``` -**预期输出**: XML 格式的目录列表 - ---- - -### 阶段 2: FRP 连通性测试 - -#### 2.1 检查 FRPC 状态(Mac Mini) -```bash -tmux capture-pane -t frpc -p | tail -10 -``` -**预期输出**: 看到 `[macmini-webdav] start proxy success` - -#### 2.2 测试 VPS1 端口监听 -```bash -# 在 VPS1 上执行 -sudo ss -tlnp | grep 60080 -``` -**预期输出**: `*:60080 LISTEN` - -#### 2.3 测试内网通过 FRP 访问(从 VPS1 测试) -```bash -# 在 VPS1 上执行 -curl -u webdav:macmini_dav -I http://localhost:60080/webdav/ -``` -**预期输出**: HTTP/1.1 200 OK - ---- - -### 阶段 3: Caddy 反向代理测试 - -#### 3.1 检查 DNS 解析 -```bash -dig +short macwebdav.ishenwei.online -``` -**预期输出**: `192.227.222.142` - -#### 3.2 测试 HTTPS 访问 -```bash -curl -k -u webdav:macmini_dav -I https://macwebdav.ishenwei.online/webdav/ -``` -**预期输出**: HTTP/1.1 200 OK - ---- - -### 阶段 4: 完整链路测试清单 - -| 序号 | 测试项 | 测试命令/方法 | 预期结果 | -|------|--------|--------------|----------| -| 1 | Apache 运行中 | `sudo apachectl status` | running | -| 2 | WebDAV 模块已加载 | `apachectl -M \| grep dav` | dav_module | -| 3 | 本地认证访问 | `curl -u webdav:macmini_dav http://127.0.0.1/webdav/` | 200 OK | -| 4 | FRPC 运行正常 | 查看 tmux 日志 | proxy success | -| 5 | VPS1 端口监听 | `ss -tlnp \| grep 60080` | LISTEN | -| 6 | 外网 HTTPS 访问 | `curl -k -u webdav:macmini_dav https://macwebdav.ishenwei.online/` | 200 OK | -| 7 | Obsidian 连接 | 客户端测试 | 同步成功 | - ---- - -## 十一、配置汇总表 - -| 项目 | 值 | -| --------------------------------- | -------------------------------------------------- | -| 内网 URL | http://192.168.3.189/webdav/ | -| 外网域名 | https://macwebdav.ishenwei.online | -| **Obsidian Remotely Save 最终配置路径** | https://macwebdav.ishenwei.online/webdav/Obsidian/ | -| FRP 本地端口 | 80 | -| FRP 远程端口 | 60080 | -| WebDAV 用户 | webdav | -| WebDAV 密码 | macmini_dav | - ---- - -## 十二、关键修正记录 - -本配置在测试过程中发现并修复了以下问题: - -1. **WebDAV 模块未启用**: 需要在 `httpd.conf` 中取消注释 DAV 相关模块 -2. **DavLockDB 权限问题**: 需要创建目录并设置 `_www` 所有权 -3. **符号链接权限问题**: 符号链接使用绝对路径 `/Users/weishen/...` -4. **Obsidian 目录权限**: 需要将目录所有权改为 `_www` 并设置 775 权限 -5. **FRPC 代理干扰**: Mac Mini 的代理设置会干扰 FRPC 连接,需要设置 `no_proxy` -6. **DNS 解析延迟**: 添加 DNS 记录后需要等待传播 - ---- - -*文档更新时间: 2026-03-19* diff --git a/#recycle/knowlegebase/ubuntu2-ssh-config.md b/#recycle/knowlegebase/ubuntu2-ssh-config.md deleted file mode 100644 index dd800265..00000000 --- a/#recycle/knowlegebase/ubuntu2-ssh-config.md +++ /dev/null @@ -1,35 +0,0 @@ -# Ubuntu2 SSH 配置 - -## 背景 -Ubuntu2 需要能够通过 "ssh nas" 免密登录到 NAS。 - -## 步骤 - -### 1. 生成 SSH 密钥(如不存在) -```bash -ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519 -``` - -### 2. 配置 ~/.ssh/config -```bash -Host nas - HostName 192.168.3.17 - User shenwei - IdentityFile ~/.ssh/id_ed25519 -``` - -### 3. 传输公钥到 NAS -```bash -# 方法1:使用 sshpass(需要安装) -sshpass -p '密码' ssh -o StrictHostKeyChecking=no shenwei@192.168.3.17 'cat >> ~/.ssh/authorized_keys' - -# 方法2:手动复制公钥内容 -cat ~/.ssh/id_ed25519.pub -# 然后登录 NAS 追加到 ~/.ssh/authorized_keys -``` - -### 4. 测试 -```bash -ssh nas "echo success" -``` - diff --git a/#recycle/openclaw/yunce/star-tasksender/SKILL.md b/#recycle/openclaw/yunce/star-tasksender/SKILL.md deleted file mode 100644 index 317691e0..00000000 --- a/#recycle/openclaw/yunce/star-tasksender/SKILL.md +++ /dev/null @@ -1,161 +0,0 @@ ---- -name: star-tasksender -description: 星枢任务分发器 - 解析用户指令并发送到 RabbitMQ 队列 -metadata: - version: 1.0.0 - author: 云策 - created: 2026-03-17 ---- - -# Star Task Sender - 星枢任务分发器 - -将星枢收到的用户指令解析为标准消息格式,并发送到 RabbitMQ 队列。 - -## 功能 - -- **意图解析**: 将自然语言指令转换为结构化任务 -- **消息构建**: 生成标准 JSON 消息格式 -- **队列发送**: 通过 RabbitMQ 分发给子 Agent - -## 文件结构 - -``` -star-tasksender/ -├── SKILL.md -└── scripts/ - ├── intent_parser.py # 意图解析模块 - ├── message_builder.py # 消息构建模块 - ├── rabbitmq_sender.py # RabbitMQ 发送模块 - └── __init__.py -``` - -## 使用方法 - -### 1. 意图解析 - -```python -from scripts.intent_parser import IntentParser - -parser = IntentParser() - -# 解析用户指令 -intent = parser.parse_intent("帮我审查 my-project 仓库") -# 结果: { -# "action": "code_review", -# "target": "yunce", -# "params": {"repo": "my-project", "branch": "main"} -# } -``` - -### 2. 构建消息 - -```python -from scripts.message_builder import MessageBuilder -from scripts.intent_parser import IntentParser - -parser = IntentParser() -intent = parser.parse_intent("帮我审查 my-project") - -builder = MessageBuilder() -message = builder.build_task_message(intent) -# 结果: 标准任务消息 JSON -``` - -### 3. 发送到 RabbitMQ - -```python -from scripts.rabbitmq_sender import RabbitMQSender -from scripts.message_builder import MessageBuilder - -# 构建消息 -builder = MessageBuilder() -message = builder.build_task_message(intent) - -# 发送 -sender = RabbitMQSender(host='192.168.1.100', username='admin', password='password') -task_id = sender.send_task(message) -sender.close() -``` - -### 4. 完整流程 - -```python -from scripts.intent_parser import IntentParser -from scripts.message_builder import MessageBuilder -from scripts.rabbitmq_sender import RabbitMQSender - -def process_user_command(user_input): - # 1. 解析 - parser = IntentParser() - intent = parser.parse_intent(user_input) - - # 2. 构建 - builder = MessageBuilder() - message = builder.build_task_message(intent) - - # 3. 发送 - sender = RabbitMQSender() - task_id = sender.send_task(message) - sender.close() - - return f"✅ 任务已下发: {task_id}" -``` - -## 支持的指令模式 - -| 用户指令 | action | target | params | -|----------|--------|--------|--------| -| 审查 xxx 仓库 | code_review | yunce | {repo: "xxx", branch: "main"} | -| 部署 xxx 到生产 | deploy | prometheus | {service: "xxx", env: "prod"} | -| 检查 xxx 状态 | status_check | atlas | {target: "xxx"} | -| 分析 xxx 数据 | data_analysis | atlas | {data: "xxx"} | - -## RabbitMQ 配置 - -默认配置 (可在 rabbitmq_sender.py 中修改): - -```python -{ - "host": "localhost", - "port": 5672, - "username": "admin", - "password": "password", - "exchange": "task_exchange" -} -``` - -## 消息格式 - -### 输入: 用户指令 -``` -"帮我审查 my-project 仓库" -``` - -### 输出: RabbitMQ 消息 -```json -{ - "taskId": "task_20260317_135600_a1b2c3", - "type": "task", - "source": "xingyao", - "target": "yunce", - "priority": "high", - "content": { - "action": "code_review", - "params": { - "repo": "my-project", - "branch": "main" - } - }, - "metadata": { - "createdAt": "2026-03-17T13:56:00Z", - "retryCount": 0, - "maxRetries": 3 - } -} -``` - -## 注意事项 - -1. **首次使用**: 需要在 `rabbitmq_sender.py` 中配置 RabbitMQ 连接信息 -2. **权限**: 确保 RabbitMQ 用户有写权限到 task_exchange -3. **错误处理**: 发送失败时会抛出异常,需要调用方处理 diff --git a/#recycle/openclaw/yunce/star-tasksender/scripts/intent_parser.py b/#recycle/openclaw/yunce/star-tasksender/scripts/intent_parser.py deleted file mode 100644 index 4d719369..00000000 --- a/#recycle/openclaw/yunce/star-tasksender/scripts/intent_parser.py +++ /dev/null @@ -1,191 +0,0 @@ -# -*- coding: utf-8 -*- -""" -意图解析模块 - Intent Parser -将自然语言指令转换为结构化任务 -""" - -import re -from typing import Dict, Optional - - -class IntentParser: - """意图解析器""" - - # 指令模式定义 - PATTERNS = { - "code_review": { - "keywords": ["审查", "review", "代码审查", "review code"], - "target": "yunce", - "action": "code_review", - "param_extractor": "extract_repo_info" - }, - "deploy": { - "keywords": ["部署", "deploy", "发布"], - "target": "prometheus", - "action": "deploy", - "param_extractor": "extract_deploy_info" - }, - "status_check": { - "keywords": ["检查状态", "status", "查看状态", "状态"], - "target": "atlas", - "action": "status_check", - "param_extractor": "extract_target" - }, - "data_analysis": { - "keywords": ["分析", "analysis", "数据分析"], - "target": "atlas", - "action": "data_analysis", - "param_extractor": "extract_data_info" - }, - "file_operation": { - "keywords": ["复制", "移动", "删除", "copy", "move", "delete"], - "target": "oracle", - "action": "file_operation", - "param_extractor": "extract_file_info" - } - } - - def parse_intent(self, user_input: str) -> Dict: - """ - 解析用户输入,返回结构化意图 - - Args: - user_input: 用户输入的自然语言 - - Returns: - { - "action": "code_review", - "target": "yunce", - "params": {...} - } - """ - user_input = user_input.strip() - - # 遍历所有模式,匹配关键词 - for pattern_name, pattern_config in self.PATTERNS.items(): - for keyword in pattern_config["keywords"]: - if keyword in user_input: - # 提取参数 - extractor_name = pattern_config["param_extractor"] - extractor = getattr(self, extractor_name) - params = extractor(user_input) - - return { - "action": pattern_config["action"], - "target": pattern_config["target"], - "params": params - } - - # 无法识别 - return { - "error": "无法理解指令", - "original_input": user_input - } - - def extract_repo_info(self, text: str) -> Dict: - """从文本中提取仓库信息""" - result = {} - - # 提取仓库名 - repo_match = re.search(r'(?:仓库|repo|项目)[:\s]*(\S+)', text) - if not repo_match: - repo_match = re.search(r'(?:审查|review)\s+(\S+)', text) - - if repo_match: - result["repo"] = repo_match.group(1).strip(',。') - - # 提取分支 - branch_match = re.search(r'(?:分支|branch)[:\s]*(\S+)', text) - if branch_match: - result["branch"] = branch_match.group(1).strip(',。') - else: - result["branch"] = "main" - - return result - - def extract_deploy_info(self, text: str) -> Dict: - """从文本中提取部署信息""" - result = {} - - # 提取服务名 - service_match = re.search(r'(?:服务|service|部署)[:\s]*(\S+)', text) - if not service_match: - service_match = re.search(r'部署\s+(\S+)', text) - - if service_match: - result["service"] = service_match.group(1).strip(',。') - - # 提取环境 - if "生产" in text or "prod" in text.lower(): - result["env"] = "prod" - elif "测试" in text or "test" in text.lower(): - result["env"] = "test" - else: - result["env"] = "dev" - - return result - - def extract_target(self, text: str) -> Dict: - """提取目标信息""" - result = {} - - # 尝试提取目标名称 - target_match = re.search(r'(?:服务器|server|目标)[:\s]*(\S+)', text) - if not target_match: - target_match = re.search(r'检查\s+(\S+)', text) - - if target_match: - result["target"] = target_match.group(1).strip(',。') - - return result - - def extract_data_info(self, text: str) -> Dict: - """提取数据分析信息""" - result = {} - - # 提取数据源 - data_match = re.search(r'(?:数据|data|分析)[:\s]*(\S+)', text) - if not data_match: - data_match = re.search(r'分析\s+(\S+)', text) - - if data_match: - result["data"] = data_match.group(1).strip(',。') - - return result - - def extract_file_info(self, text: str) -> Dict: - """提取文件操作信息""" - result = {} - - # 提取文件路径 - path_match = re.search(r'[:\s](\S+\.\S+)', text) - if path_match: - result["path"] = path_match.group(1) - - # 提取操作类型 - if "复制" in text or "copy" in text.lower(): - result["operation"] = "copy" - elif "移动" in text or "move" in text.lower(): - result["operation"] = "move" - elif "删除" in text or "delete" in text.lower(): - result["operation"] = "delete" - - return result - - -# 测试 -if __name__ == "__main__": - parser = IntentParser() - - test_cases = [ - "帮我审查 my-project 仓库", - "部署 test-server 到生产", - "检查服务器状态", - "分析销售数据" - ] - - for test in test_cases: - result = parser.parse_intent(test) - print(f"输入: {test}") - print(f"输出: {result}") - print("-" * 40) diff --git a/#recycle/openclaw/yunce/star-tasksender/scripts/message_builder.py b/#recycle/openclaw/yunce/star-tasksender/scripts/message_builder.py deleted file mode 100644 index 31d2917d..00000000 --- a/#recycle/openclaw/yunce/star-tasksender/scripts/message_builder.py +++ /dev/null @@ -1,204 +0,0 @@ -# -*- coding: utf-8 -*- -""" -消息构建模块 - Message Builder -将意图解析结果转换为标准的 RabbitMQ 消息格式 -""" - -import json -import uuid -from datetime import datetime -from typing import Dict, Optional - - -class MessageBuilder: - """消息构建器""" - - # 高优先级动作 - HIGH_PRIORITY_ACTIONS = ["code_review", "deploy", "security_check", "data_analysis"] - - # 默认超时时间 (毫秒) - DEFAULT_TIMEOUT = 3600000 # 1小时 - - def __init__(self, source: str = "xingyao", default_timeout: int = None): - """ - 初始化消息构建器 - - Args: - source: 消息来源 Agent 名称 - default_timeout: 默认超时时间 (毫秒) - """ - self.source = source - self.default_timeout = default_timeout or self.DEFAULT_TIMEOUT - - def build_task_message(self, intent: Dict, priority: str = None) -> Dict: - """ - 构建任务消息 - - Args: - intent: 意图解析结果 - priority: 优先级 (high/normal/low),如果为 None 则自动判断 - - Returns: - 标准任务消息 JSON - """ - if "error" in intent: - return {"error": intent["error"]} - - # 自动判断优先级 - if priority is None: - priority = self._detect_priority(intent.get("action", "")) - - # 生成任务ID - task_id = self._generate_task_id() - - message = { - "taskId": task_id, - "type": "task", - "source": self.source, - "target": intent["target"], - "priority": priority, - "content": { - "action": intent["action"], - "params": intent.get("params", {}) - }, - "metadata": { - "createdAt": datetime.now().isoformat() + "Z", - "expireAt": None, - "retryCount": 0, - "maxRetries": 3, - "timeout": self.default_timeout - } - } - - return message - - def build_result_message(self, task_id: str, target: str, - status: str, content: Dict) -> Dict: - """ - 构建结果消息 (由子 Agent 使用) - - Args: - task_id: 原始任务ID - target: 目标 Agent (通常是星枢) - status: 执行状态 (success/error/partial) - content: 结果内容 - - Returns: - 标准结果消息 JSON - """ - message = { - "taskId": task_id, - "type": "result", - "source": self.source, - "target": target, - "status": status, - "content": content, - "metadata": { - "completedAt": datetime.now().isoformat() + "Z" - } - } - - return message - - def build_heartbeat_message(self, agent_name: str, - status: str = "idle", - current_task: str = None) -> Dict: - """ - 构建心跳消息 - - Args: - agent_name: Agent 名称 - status: 当前状态 (idle/busy/error) - current_task: 当前执行的任务ID - - Returns: - 心跳消息 JSON - """ - message = { - "type": "heartbeat", - "agent": agent_name, - "status": status, - "currentTask": current_task, - "timestamp": datetime.now().isoformat() + "Z" - } - - return message - - def build_error_message(self, task_id: str, target: str, - error: str, details: Dict = None) -> Dict: - """ - 构建错误消息 - - Args: - task_id: 任务ID - target: 目标 Agent - error: 错误描述 - details: 错误详情 - - Returns: - 错误消息 JSON - """ - message = { - "taskId": task_id, - "type": "error", - "source": self.source, - "target": target, - "error": error, - "content": details or {}, - "metadata": { - "occurredAt": datetime.now().isoformat() + "Z" - } - } - - return message - - def _detect_priority(self, action: str) -> str: - """根据动作自动判断优先级""" - return "high" if action in self.HIGH_PRIORITY_ACTIONS else "normal" - - def _generate_task_id(self) -> str: - """生成唯一任务ID""" - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - unique_id = uuid.uuid4().hex[:6] - return f"task_{timestamp}_{unique_id}" - - def to_json(self, message: Dict) -> str: - """转换为 JSON 字符串""" - return json.dumps(message, ensure_ascii=False, indent=2) - - def from_json(self, json_str: str) -> Dict: - """从 JSON 字符串解析""" - return json.loads(json_str) - - -# 测试 -if __name__ == "__main__": - builder = MessageBuilder() - - # 测试任务消息 - intent = { - "action": "code_review", - "target": "yunce", - "params": {"repo": "my-project", "branch": "main"} - } - - task_msg = builder.build_task_message(intent) - print("任务消息:") - print(builder.to_json(task_msg)) - print("-" * 40) - - # 测试心跳消息 - heartbeat = builder.build_heartbeat_message("yunce", "idle") - print("心跳消息:") - print(builder.to_json(heartbeat)) - print("-" * 40) - - # 测试结果消息 - result_msg = builder.build_result_message( - task_id=task_msg["taskId"], - target="xingyao", - status="success", - content={"summary": "审查完成", "findings": []} - ) - print("结果消息:") - print(builder.to_json(result_msg)) diff --git a/#recycle/openclaw/yunce/star-tasksender/scripts/rabbitmq_sender.py b/#recycle/openclaw/yunce/star-tasksender/scripts/rabbitmq_sender.py deleted file mode 100644 index 6bf01e86..00000000 --- a/#recycle/openclaw/yunce/star-tasksender/scripts/rabbitmq_sender.py +++ /dev/null @@ -1,248 +0,0 @@ -# -*- coding: utf-8 -*- -""" -RabbitMQ 发送模块 - RabbitMQ Sender -连接到 RabbitMQ 并发送消息 -""" - -import pika -import json -import logging -from typing import Dict, Optional -from datetime import datetime - -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - - -class RabbitMQSender: - """RabbitMQ 消息发送器""" - - DEFAULT_CONFIG = { - "host": "192.168.3.189", - "port": 5672, - "username": "guest", - "password": "guest", - "exchange": "task_exchange", - "result_exchange": "result_exchange", - "heartbeat": 600, - "blocked_connection_timeout": 300 - } - - def __init__(self, config: Dict = None): - """ - 初始化 RabbitMQ 发送器 - - Args: - config: RabbitMQ 配置,包含 host, port, username, password 等 - """ - self.config = {**self.DEFAULT_CONFIG, **(config or {})} - self.connection = None - self.channel = None - self._connect() - - def _connect(self): - """建立 RabbitMQ 连接""" - credentials = pika.PlainCredentials( - self.config["username"], - self.config["password"] - ) - - parameters = pika.ConnectionParameters( - host=self.config["host"], - port=self.config["port"], - credentials=credentials, - heartbeat=self.config["heartbeat"], - blocked_connection_timeout=self.config["blocked_connection_timeout"] - ) - - try: - self.connection = pika.BlockingConnection(parameters) - self.channel = self.connection.channel() - - # 声明交换机 - self.channel.exchange_declare( - exchange=self.config["exchange"], - exchange_type="topic", - durable=True - ) - self.channel.exchange_declare( - exchange=self.config["result_exchange"], - exchange_type="topic", - durable=True - ) - - logger.info(f"✅ RabbitMQ 连接成功: {self.config['host']}:{self.config['port']}") - - except Exception as e: - logger.error(f"❌ RabbitMQ 连接失败: {e}") - raise - - def send_task(self, message: Dict, priority: str = None) -> str: - """ - 发送任务消息 - - Args: - message: 任务消息 (由 MessageBuilder 构建) - priority: 优先级覆盖 (high/normal/low) - - Returns: - task_id - """ - if "error" in message: - raise ValueError(f"无法发送错误消息: {message['error']}") - - target = message.get("target", "unknown") - task_id = message.get("taskId", "unknown") - routing_key = f"task.{target}" - - # 确定优先级 - priority_value = self._get_priority_value( - priority or message.get("priority", "normal") - ) - - try: - self.channel.basic_publish( - exchange=self.config["exchange"], - routing_key=routing_key, - body=json.dumps(message, ensure_ascii=False), - properties=pika.BasicProperties( - delivery_mode=2, # 消息持久化 - content_type="application/json", - priority=priority_value, - timestamp=int(datetime.now().timestamp()) - ) - ) - - logger.info(f"✅ 任务已发送: {task_id} -> {target} (routing: {routing_key})") - return task_id - - except Exception as e: - logger.error(f"❌ 发送任务失败: {e}") - raise - - def send_result(self, message: Dict) -> str: - """ - 发送结果消息 - - Args: - message: 结果消息 (由 MessageBuilder 构建) - - Returns: - task_id - """ - source = message.get("source", "unknown") - task_id = message.get("taskId", "unknown") - routing_key = f"result.{source}" - - try: - self.channel.basic_publish( - exchange=self.config["result_exchange"], - routing_key=routing_key, - body=json.dumps(message, ensure_ascii=False), - properties=pika.BasicProperties( - delivery_mode=2, - content_type="application/json" - ) - ) - - logger.info(f"✅ 结果已发送: {task_id} from {source}") - return task_id - - except Exception as e: - logger.error(f"❌ 发送结果失败: {e}") - raise - - def send_heartbeat(self, message: Dict) -> bool: - """ - 发送心跳消息 - - Args: - message: 心跳消息 - - Returns: - 是否发送成功 - """ - agent = message.get("agent", "unknown") - routing_key = f"heartbeat.{agent}" - - try: - self.channel.basic_publish( - exchange=self.config["exchange"], - routing_key=routing_key, - body=json.dumps(message, ensure_ascii=False), - properties=pika.BasicProperties( - delivery_mode=2, - content_type="application/json" - ) - ) - - logger.debug(f"💓 心跳已发送: {agent}") - return True - - except Exception as e: - logger.error(f"❌ 发送心跳失败: {e}") - return False - - def _get_priority_value(self, priority: str) -> int: - """将优先级字符串转换为 RabbitMQ 数值""" - priority_map = { - "high": 10, - "normal": 5, - "low": 1 - } - return priority_map.get(priority.lower(), 5) - - def is_connected(self) -> bool: - """检查连接状态""" - return self.connection is not None and self.connection.is_open - - def reconnect(self): - """重新连接""" - self.close() - self._connect() - - def close(self): - """关闭连接""" - if self.connection and self.connection.is_open: - self.connection.close() - logger.info("🔌 RabbitMQ 连接已关闭") - - -# 便捷函数 -def send_task_quick(message: Dict, config: Dict = None) -> str: - """ - 快速发送任务 (自动创建和关闭连接) - - Args: - message: 任务消息 - config: RabbitMQ 配置 - - Returns: - task_id - """ - sender = RabbitMQSender(config) - task_id = sender.send_task(message) - sender.close() - return task_id - - -# 测试 -if __name__ == "__main__": - from message_builder import MessageBuilder - from intent_parser import IntentParser - - # 解析意图 - parser = IntentParser() - intent = parser.parse_intent("帮我审查 my-project 仓库") - - # 构建消息 - builder = MessageBuilder() - message = builder.build_task_message(intent) - - # 发送 (需要配置实际的 RabbitMQ 地址) - # sender = RabbitMQSender({"host": "192.168.1.100", "username": "admin", "password": "password"}) - # task_id = sender.send_task(message) - # sender.close() - - print("消息构建成功:") - print(builder.to_json(message)) diff --git a/#recycle/openclaw/yunce/星枢-Agent任务解耦方案.md b/#recycle/openclaw/yunce/星枢-Agent任务解耦方案.md deleted file mode 100644 index 0ba06adc..00000000 --- a/#recycle/openclaw/yunce/星枢-Agent任务解耦方案.md +++ /dev/null @@ -1,709 +0,0 @@ -# 星枢 Agent 任务解耦技术方案 - -> 基于 RabbitMQ 的分布式任务队列架构 - ---- - -## 一、概述 - -### 背景 - -当前星枢(主 Agent)与其他 Agent 的通信方式: - -| 方式 | 命令 | 局限 | -|------|------|------| -| 本地 | `openclaw agent --agent xingyao --message "..." --deliver` | 同步等待 | -| 远程 | `ssh ubuntu2 "openclaw agent --agent yunce --message ..."` | 串行阻塞 | - -### 目标 - -- **异步执行**:任务下发不等待结果 -- **任务持久化**:重启不丢失 -- **可监控**:实时查看任务状态 -- **可扩展**:支持多 Agent 并行 - ---- - -## 二、技术选型 - -### RabbitMQ vs 其他 - -| 特性 | RabbitMQ | Redis Streams | Kafka | -|------|----------|---------------|-------| -| 消息确认 | ✅ ACK | ✅ ACK | ✅ ACK | -| 优先级队列 | ✅ | ❌ | ❌ | -| 延迟队列 | ✅ (插件) | ✅ | ❌ | -| 持久化 | ✅ | ✅ | ✅ | -| 集群 | ✅ | 有限 | ✅ | -| 生态成熟度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | -| 轻量级 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ | - -**推荐:RabbitMQ** - -理由: -- 消息确认机制完善 -- 支持复杂路由规则 -- 管理界面友好 -- 适合中低并发场景 - ---- - -## 三、架构设计 - -### 3.1 整体架构 - -``` -┌─────────────────────────────────────────────────────────────────────────┐ -│ 用户 │ -│ (Telegram/Discord) │ -└─────────────────────────────────┬───────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────────────┐ -│ 星枢 (主 Agent) │ -│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ -│ │ 意图理解 │ │ 任务分解 │ │ 队列管理 │ │ 结果聚合 │ │ -│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ -└─────────────────────────────────┬───────────────────────────────────────┘ - │ - ┌─────────────┴─────────────┐ - │ RabbitMQ 集群 │ - │ (task_exchange) │ - └─────────────┬─────────────┘ - │ - ┌───────────────────────┼───────────────────────┐ - │ │ │ - ▼ ▼ ▼ -┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ -│ Yunce (Agent) │ │ Atlas (Agent) │ │ Prometheus │ -│ 队列: tasks │ │ 队列: tasks │ │ 队列: tasks │ -│ 状态: running │ │ 状态: idle │ │ 状态: idle │ -└────────┬────────┘ └────────┬────────┘ └────────┬────────┘ - │ │ │ - │ ┌──────────────────┴──────────────────┐ │ - │ │ 结果收集 (result_exchange) │ │ - │ └──────────────────┬──────────────────┘ │ - │ │ │ - └──────────────────────┼──────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────────────┐ -│ 星枢 (结果处理) │ -│ - 任务状态更新 │ -│ - 用户反馈 │ -│ - 后续任务触发 │ -└─────────────────────────────────────────────────────────────────────────┘ -``` - -### 3.2 消息流设计 - -``` -┌──────────────────────────────────────────────────────────────────────────┐ -│ 消息生命周期 │ -└──────────────────────────────────────────────────────────────────────────┘ - -[1] 任务下发 [5] 结果处理 - │ ▲ - ▼ │ -┌────────┐ ┌────────────┐ ┌───────────┐ ┌───────────┐ │ -│ 星枢 │───▶│ RabbitMQ │───▶│ Agent N │───▶│ RabbitMQ │──────┘ -│创建任务 │ │ (持久化) │ │ 执行任务 │ │ (结果队列) │ -└────────┘ └────────────┘ └───────────┘ └───────────┘ - │ │ - │ [4] ACK 确认 - │ │ -[2] 任务入队 │ -(可选: 延迟队列) ▼ - │ ┌───────────┐ - └─────────────▶│ 状态变更 │ - │ (处理中→完成) - └───────────┘ - -[3] Agent 消费任务 -``` - -### 3.3 Exchange & Queue 设计 - -``` - ┌─────────────────┐ - │ task_exchange │ (Topic Exchange) - │ (星枢下发) │ - └────────┬────────┘ - │ - ┌───────────────────┼───────────────────┐ - │ │ │ - ▼ ▼ ▼ -┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ -│ queue.yunce │ │ queue.atlas │ │ queue.prometheus│ -│ routing: │ │ routing: │ │ routing: │ -│ task.yunce │ │ task.atlas │ │ task.prometheus │ -└────────┬────────┘ └────────┬────────┘ └────────┬────────┘ - │ │ │ - ▼ ▼ ▼ - [Agent: Yunce] [Agent: Atlas] [Agent: Prometheus] - -───────────────────────────────────────────────────────────────────────── - - ┌─────────────────┐ - │result_exchange │ (Topic Exchange) - │ (结果收集) │ - └────────┬────────┘ - │ - ┌───────────────────┼───────────────────┐ - │ │ │ - ▼ ▼ ▼ -┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ -│result.yunce │ │result.atlas │ │result.prometheus │ -└────────┬────────┘ └────────┬────────┘ └────────┬────────┘ - │ │ │ - └────────────────────┼────────────────────┘ - │ - ▼ - ┌─────────────────┐ - │ queue.star聚合 │ ← 星枢监听此队列 - │ routing: result.#│ - └─────────────────┘ -``` - ---- - -## 四、消息格式定义 - -### 4.1 任务消息 (Task Message) - -```json -{ - "taskId": "task_20260317_001", - "type": "task", - "source": "xingyao", - "target": "yunce", - "priority": "high", - "content": { - "action": "code_review", - "params": { - "repo": "my-project", - "branch": "feature/login" - } - }, - "metadata": { - "createdAt": "2026-03-17T10:30:00Z", - "expireAt": "2026-03-17T11:30:00Z", - "retryCount": 0, - "maxRetries": 3 - } -} -``` - -### 4.2 结果消息 (Result Message) - -```json -{ - "taskId": "task_20260317_001", - "type": "result", - "source": "yunce", - "target": "xingyao", - "status": "success", - "content": { - "summary": "代码审查完成", - "findings": [ - {"severity": "warning", "message": "建议添加参数校验"} - ], - "output": "/path/to/report.md" - }, - "metadata": { - "completedAt": "2026-03-17T10:35:00Z", - "duration": 300 - } -} -``` - -### 4.3 心跳消息 (Heartbeat Message) - -```json -{ - "type": "heartbeat", - "agent": "yunce", - "status": "idle", - "currentTask": null, - "timestamp": "2026-03-17T10:30:00Z" -} -``` - ---- - -## 五、实现步骤 - -### 5.1 RabbitMQ 部署 - -```bash -# Docker 部署 -docker run -d \ - --name rabbitmq \ - -p 5672:5672 \ - -p 15672:15672 \ - -e RABBITMQ_DEFAULT_USER=admin \ - -e RABBITMQ_DEFAULT_PASS=your_password \ - rabbitmq:3.12-management - -# 访问管理界面 -# http://your-server:15672 -``` - -### 5.2 创建 Exchange 和 Queue (初始化脚本) - -```python -# setup_rabbitmq.py -import pika - -def setup_rabbitmq(): - connection = pika.BlockingConnection( - pika.ConnectionParameters(host='localhost', port=5672) - ) - channel = connection.channel() - - # 1. 创建 Exchange - channel.exchange_declare(exchange='task_exchange', exchange_type='topic', durable=True) - channel.exchange_declare(exchange='result_exchange', exchange_type='topic', durable=True) - - # 2. 创建任务队列 (按 Agent) - agents = ['yunce', 'atlas', 'prometheus', 'oracle'] - for agent in agents: - channel.queue_declare(queue=f'queue.{agent}', durable=True) - channel.queue_bind( - exchange='task_exchange', - queue=f'queue.{agent}', - routing_key=f'task.{agent}' - ) - - # 3. 创建星枢结果聚合队列 - channel.queue_declare(queue='queue.star', durable=True) - channel.queue_bind( - exchange='result_exchange', - queue='queue.star', - routing_key='result.#' - ) - - connection.close() - print("✅ RabbitMQ 初始化完成") - -if __name__ == '__main__': - setup_rabbitmq() -``` - -### 5.3 星枢任务下发模块 - -```python -# star_sender.py -import pika -import json -import uuid -from datetime import datetime - -class StarTaskSender: - def __init__(self, rabbitmq_host='localhost'): - self.connection = pika.BlockingConnection( - pika.ConnectionParameters(host=rabbitmq_host) - ) - self.channel = self.connection.channel() - - def send_task(self, target_agent, action, params, priority='normal'): - task_id = f"task_{datetime.now().strftime('%Y%m%d_%H%M%S')}_{uuid.uuid4().hex[:6]}" - - message = { - "taskId": task_id, - "type": "task", - "source": "xingyao", - "target": target_agent, - "priority": priority, - "content": { - "action": action, - "params": params - }, - "metadata": { - "createdAt": datetime.now().isoformat() + "Z", - "retryCount": 0, - "maxRetries": 3 - } - } - - self.channel.basic_publish( - exchange='task_exchange', - routing_key=f'task.{target_agent}', - body=json.dumps(message), - properties=pika.BasicProperties( - delivery_mode=2, # 持久化 - priority=10 if priority == 'high' else 5 - ) - ) - - print(f"✅ 任务已下发: {task_id} -> {target_agent}") - return task_id - - def close(self): - self.connection.close() - -# 使用示例 -if __name__ == '__main__': - sender = StarTaskSender() - - # 下发任务给 Yunce - task_id = sender.send_task( - target_agent='yunce', - action='code_review', - params={'repo': 'my-project', 'branch': 'main'}, - priority='high' - ) - - sender.close() -``` - -### 5.4 Agent 任务监听模块 - -```python -# agent_listener.py -import pika -import json -import subprocess -import logging - -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - -class AgentListener: - def __init__(self, agent_name, rabbitmq_host='localhost'): - self.agent_name = agent_name - self.connection = pika.BlockingConnection( - pika.ConnectionParameters(host=rabbitmq_host) - ) - self.channel = self.connection.channel() - - def execute_task(self, task_content): - """执行任务的核心逻辑""" - action = task_content['action'] - params = task_content['params'] - - logger.info(f"执行任务: {action}") - - # 根据 action 调用不同的处理函数 - handlers = { - 'code_review': self.handle_code_review, - 'data_analysis': self.handle_data_analysis, - 'file_operation': self.handle_file_operation, - } - - handler = handlers.get(action, self.handle_default) - return handler(params) - - def handle_code_review(self, params): - # 调用 OpenClaw agent - result = subprocess.run( - ['openclaw', 'agent', '--agent', 'yunce', - '--message', f"请审查代码仓库 {params.get('repo')}"], - capture_output=True, text=True - ) - return {'output': result.stdout, 'status': 'success'} - - def handle_default(self, params): - return {'message': f'Unknown action: {params}'} - - def on_message(self, ch, method, properties, body): - """消息处理回调""" - try: - message = json.loads(body) - task_id = message['taskId'] - - logger.info(f"收到任务: {task_id}") - - # 执行任务 - result = self.execute_task(message['content']) - - # 发送结果 - self.send_result(task_id, result) - - # ACK 确认 - ch.basic_ack(delivery_tag=method.delivery_tag) - - except Exception as e: - logger.error(f"任务执行失败: {e}") - ch.basic_nack(delivery_tag=method.delivery_tag, requeue=True) - - def send_result(self, task_id, result): - """发送结果到星枢""" - result_message = { - "taskId": task_id, - "type": "result", - "source": self.agent_name, - "target": "xingyao", - "status": "success", - "content": result, - "metadata": { - "completedAt": datetime.now().isoformat() + "Z" - } - } - - self.channel.basic_publish( - exchange='result_exchange', - routing_key=f'result.{self.agent_name}', - body=json.dumps(result_message), - properties=pika.BasicProperties(delivery_mode=2) - ) - - def start_listening(self): - """开始监听任务队列""" - self.channel.basic_qos(prefetch_count=1) - self.channel.basic_consume( - queue=f'queue.{self.agent_name}', - on_message_callback=self.on_message - ) - - logger.info(f"🤖 Agent [{self.agent_name}] 开始监听任务队列...") - self.channel.start_consuming() - -# 使用示例 -if __name__ == '__main__': - import sys - agent_name = sys.argv[1] if len(sys.argv) > 1 else 'yunce' - listener = AgentListener(agent_name) - listener.start_listening() -``` - -### 5.5 星枢结果收集模块 - -```python -# star_receiver.py -import pika -import json -from datetime import datetime - -class StarResultReceiver: - def __init__(self, rabbitmq_host='localhost'): - self.connection = pika.BlockingConnection( - pika.ConnectionParameters(host=rabbitmq_host) - ) - self.channel = self.connection.channel() - self.pending_tasks = {} # 跟踪待处理任务 - - def on_message(self, ch, method, properties, body): - message = json.loads(body) - - if message['type'] == 'result': - task_id = message['taskId'] - status = message['status'] - result = message['content'] - - print(f"📋 任务完成: {task_id}") - print(f" 状态: {status}") - print(f" 结果: {result}") - - # 更新任务状态 - if task_id in self.pending_tasks: - self.pending_tasks[task_id]['status'] = 'completed' - self.pending_tasks[task_id]['result'] = result - - # 可以触发后续任务 - self.handle_next_action(message) - - elif message['type'] == 'heartbeat': - print(f"💓 Agent 心跳: {message['agent']} - {message['status']}") - - ch.basic_ack(delivery_tag=method.delivery_tag) - - def handle_next_action(self, message): - """根据结果触发后续动作""" - # 示例:根据结果发送新任务 - pass - - def start_listening(self): - self.channel.basic_qos(prefetch_count=1) - self.channel.basic_consume( - queue='queue.star', - on_message_callback=self.on_message - ) - - print("🌟 星枢开始监听任务结果...") - self.channel.start_consuming() - -# 使用示例 -if __name__ == '__main__': - receiver = StarResultReceiver() - receiver.start_listening() -``` - ---- - -## 六、监控界面 - -### 6.1 RabbitMQ 管理界面 - -``` -URL: http://localhost:15672 -用户名: admin -密码: your_password - -可查看: -- 队列状态 (Messages, Ready, Unacked) -- 连接数 -- 消息流速 -- 交换机绑定 -``` - -### 6.2 自定义监控面板 (可选) - -```python -# 简单的任务状态查询 -def get_task_status(task_id): - # 可以通过 REST API 查询 - # 或者维护一个 Redis 状态缓存 - pass - -def list_pending_tasks(): - # 列出所有待处理任务 - pass - -def list_agent_status(): - # 列出所有 Agent 状态 - pass -``` - ---- - -## 七、完整工作流程示例 - -``` -┌─────────────────────────────────────────────────────────────────────────┐ -│ 完整示例:代码审查任务 │ -└─────────────────────────────────────────────────────────────────────────┘ - -[用户] - │ - │ "星枢,帮我审查 my-project 的 main 分支" - ▼ -[星枢 - 意图理解] - │ action: code_review - │ target: yunce - │ params: {repo: "my-project", branch: "main"} - ▼ -[星枢 - 任务下发] - │ RabbitMQ: task.yunce - │ taskId: task_20260317_001 - ▼ -[RabbitMQ] (持久化消息) - ▼ -[Yunce Agent - 任务监听] - │ 收到任务 -> 执行 code_review - │ 调用: openclaw agent --agent yunce --message "审查 my-project" - ▼ -[Yunce Agent - 返回结果] - │ RabbitMQ: result.yunce - │ status: success, findings: [...] - ▼ -[RabbitMQ] - │ result.# -> queue.star - ▼ -[星枢 - 结果收集] - │ 接收结果 -> 更新状态 - │ 格式化输出 -> 推送给用户 - ▼ -[用户] - │ 收到审查报告 -``` - ---- - -## 八、部署建议 - -### 8.1 生产环境配置 - -```yaml -# docker-compose.yml -version: '3.8' - -services: - rabbitmq: - image: rabbitmq:3.12-management - ports: - - "5672:5672" - - "15672:15672" - environment: - RABBITMQ_DEFAULT_USER: admin - RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD} - volumes: - - rabbitmq_data:/var/lib/rabbitmq - healthcheck: - test: ["CMD", "rabbitmq-diagnostics", "check_running"] - interval: 30s - -volumes: - rabbitmq_data: -``` - -### 8.2 安全建议 - -1. **认证**:启用 RabbitMQ 用户认证 -2. **SSL/TLS**:生产环境启用 amqps -3. **VHost**:不同项目使用不同 vhost -4. **权限**:最小权限原则 - ---- - -## 九、故障处理 - -| 故障场景 | 解决方案 | -|----------|----------| -| Agent 宕机 | 任务自动重新入队 (requeue) | -| RabbitMQ 宕机 | 消息持久化,重启后恢复 | -| 任务超时 | 设置 TTL,自动移到死信队列 | -| 消息积压 | 监控队列长度,扩展消费者 | - ---- - -## 十、进阶功能 - -### 10.1 延迟任务 - -```python -# 延迟队列:让任务在指定时间后执行 -def send_delayed_task(target, action, delay_seconds): - # 使用 RabbitMQ 延迟插件 或 配合 Redis 实现 - pass -``` - -### 10.2 优先级队列 - -```python -# 高优先级任务优先处理 -channel.queue_declare(queue='queue.yunce', arguments={ - 'x-max-priority': 10 -}) -``` - -### 10.3 任务超时 - -```python -# 消息 TTL + 死信队列 -channel.queue_declare( - queue='queue.yunce', - arguments={ - 'x-message-ttl': 3600000, # 1小时 - 'x-dead-letter-exchange': 'dlx_exchange' - } -) -``` - ---- - -## 附录:文件清单 - -| 文件 | 说明 | -|------|------| -| `setup_rabbitmq.py` | RabbitMQ 初始化脚本 | -| `star_sender.py` | 星枢任务下发模块 | -| `agent_listener.py` | Agent 任务监听模块 | -| `star_receiver.py` | 星枢结果收集模块 | -| `docker-compose.yml` | 一键部署配置 | - ---- - -*文档版本: 1.0* -*创建时间: 2026-03-17* -*作者: 云策* diff --git a/#recycle/xinghui/OpenClaw-技能清单.md b/#recycle/xinghui/OpenClaw-技能清单.md deleted file mode 100644 index 799890f3..00000000 --- a/#recycle/xinghui/OpenClaw-技能清单.md +++ /dev/null @@ -1,389 +0,0 @@ -# OpenClaw 技能笔记 - -> 创建时间: 2026-03-19 -> 整理者: 星辉 - ---- - -## 📋 技能清单总览 - -本文档记录 OpenClaw 中所有可用的技能(Skills)。 - ---- - -## 🔐 账号与密码 - -### 1. 1password -- **描述:** 1Password CLI (op) 工具 -- **用途:** 安装CLI、桌面应用集成、单/多账户登录、读写/运行密码 -- **路径:** `~/.agents/skills/1password-1.0.1/SKILL.md` - ---- - -## 🍎 Apple 生态 - -### 2. apple-notes -- **描述:** Apple Notes 管理 via `memo` CLI -- **用途:** 创建、查看、编辑、删除、搜索、移动、导出笔记 -- **路径:** `~/.openclaw/skills/apple-notes/SKILL.md` - -### 3. apple-reminders -- **描述:** Apple Reminders via `remindctl` CLI -- **用途:** 列出、添加、编辑、完成、删除提醒,支持列表、日期过滤、JSON/纯文本输出 -- **路径:** `~/.openclaw/skills/apple-reminders/SKILL.md` - -### 4. accli -- **描述:** Apple Calendar CLI -- **用途:** 列出日历、查看事件、创建/更新/删除日历事件、检查空闲时间 -- **触发词:** "查看日历"、"安排会议"、"我今天有什么安排"、"明天我有空吗" -- **路径:** `~/.openclaw/skills/accli/SKILL.md` - ---- - -## ☁️ 云服务与协作 - -### 5. gog -- **描述:** Google Workspace CLI -- **用途:** Gmail、日历、云盘、联系人、表格、文档 -- **路径:** `~/.agents/skills/gog/SKILL.md` - -### 6. feishu-chat-history -- **描述:** 获取飞书群聊历史 -- **用途:** 读取、回顾、总结飞书群聊消息 -- **触发词:** "看群聊记录"、"群里聊了啥"、"chat history" -- **路径:** `~/.agents/skills/feishu-chat-history/SKILL.md` - -### 7. feishu-cron-reminder -- **描述:** 飞书定时提醒 -- **用途:** 创建定时发送消息到飞书聊天的cron任务 -- **触发词:** "飞书定时提醒"、"定时任务发飞书"、"每小时提醒" -- **路径:** `~/.agents/skills/feishu-cron-reminder/SKILL.md` - -### 8. feishu-doc -- **描述:** 飞书文档获取 -- **用途:** 获取飞书Wiki、文档、表格、Bitable内容,自动转换为Markdown -- **路径:** `~/.agents/skills/feishu-doc-1.2.7/SKILL.md` - -### 9. feishu-perm -- **描述:** 飞书权限管理 -- **用途:** 文档和文件的分享、权限、协作者管理 -- **触发词:** 分享、权限、协作者 -- **路径:** `~/.agents/skills/feishu-perm/SKILL.md` - -### 10. feishu-screenshot -- **描述:** 截屏并发送到飞书 -- **用途:** 截取屏幕并通过飞书分享 -- **触发词:** "截个屏发飞书"、"截屏"、"screenshot" -- **路径:** `~/.agents/skills/feishu-screenshot/SKILL.md` - -### 11. feishu-send-file -- **描述:** 发送文件到飞书 -- **用途:** 通过REST API发送文件、附件到飞书群或个人 -- **触发词:** "发文件到飞书"、"send file to feishu" -- **路径:** `~/.agents/skills/feishu-send-file/SKILL.md` - ---- - -## 💬 通讯工具 - -### 12. slack -- **描述:** Slack 控制 -- **用途:** 通过 slack 工具控制Slack,包括消息反应、pin/unpin -- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/slack/SKILL.md` - ---- - -## 🌐 网络与浏览器 - -### 13. agent-browser -- **描述:** 无头浏览器自动化CLI -- **用途:** 为AI代理优化的浏览器自动化,支持无障碍树快照和基于引用的元素选择 -- **路径:** `~/.openclaw/skills/agent-browser-clawdbot/SKILL.md` - -### 14. tavily-search -- **描述:** Tavily 搜索API -- **用途:** 网页搜索(替代Brave),返回相关结果标题、URL、摘要 -- **路径:** `~/.openclaw/skills/openclaw-tavily-search/SKILL.md` - ---- - -## 🛠️ 开发工具 - -### 15. Docker -- **描述:** Docker 容器、镜像、Compose、网络、卷、调试 -- **用途:** Docker相关操作、生产环境加固、命令保持稳定 -- **路径:** `~/.openclaw/skills/docker/SKILL.md` - -### 16. Code -- **描述:** 编码工作流 -- **用途:** 规划、实现、验证、测试的清洁软件开发流程 -- **路径:** `~/.agents/skills/code-1.0.4/SKILL.md` - -### 17. git-essentials -- **描述:** 基础Git命令 -- **用途:** 版本控制、分支、协作 -- **路径:** `~/.agents/skills/git-essentials-1.0.0/SKILL.md` - -### 18. frontend-design -- **描述:** 前端界面设计 -- **用途:** 创建独特、生产级的前端界面,高设计质量 -- **路径:** `~/.agents/skills/frontend-design-3-0.1.0/SKILL.md` - -### 19. security-auditor -- **描述:** 安全审计 -- **用途:** 代码安全漏洞审查、身份验证流程、OWASP Top 10审计、CORS/CSP配置、敏感数据处理、输入验证、SQL注入预防、XSS保护 -- **路径:** `~/.agents/skills/security-auditor-1.0.0/SKILL.md` - -### 20. architecture-designer -- **描述:** 系统架构设计 -- **用途:** 设计新系统架构、审查现有设计、架构决策、ADRs、可扩展性规划 -- **路径:** `~/.agents/skills/architecture-designer-0.1.0/SKILL.md` - -### 21. supabase-postgres-best-practices -- **描述:** Supabase Postgres 最佳实践 -- **用途:** Postgres性能优化和最佳实践 -- **路径:** `~/.agents/skills/supabase-postgres-best-practices/SKILL.md` - -### 22. tmux -- **描述:** Tmux 远程控制 -- **用途:** 远程控制tmux会话,发送按键和抓取面板输出 -- **路径:** `~/.agents/skills/tmux-1.0.0/SKILL.md` - ---- - -## 📝 笔记与知识管理 - -### 23. obsidian -- **描述:** Obsidian 保险库 -- **用途:** 处理Obsidian纯文本Markdown笔记,通过obsidian-cli自动化 -- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/obsidian/SKILL.md` - -### 24. ontology -- **描述:** 知识图谱 -- **用途:** 结构化代理记忆和可组合技能,创建/查询实体(Person、Project、Task、Event、Document),链接相关对象,执行约束,多步骤动作规划 -- **触发词:** "记住"、"关于X我知道什么"、"链接X到Y"、"显示依赖" -- **路径:** `~/.agents/skills/ontology/SKILL.md` - -### 25. Memory -- **描述:** 无限有序记忆 -- **用途:** 补充代理内置记忆的无限分类存储 -- **路径:** `~/.agents/skills/memory-1.0.2/SKILL.md` - -### 26. obsidian-ontology-sync -- **描述:** Obsidian与 Ontology 双向同步 -- **用途:** 从markdown自动提取实体和关系,维护本体图谱,提供反馈改进笔记结构 -- **路径:** `~/.agents/skills/obsidian-ontology-sync-1.0.1/SKILL.md` - ---- - -## 🎨 内容创作 - -### 27. blog-writer -- **描述:** 博客文章写作 -- **用途:** 以作家独特风格写博客文章、长篇内容,从研究到Notion发布的完整工作流 -- **路径:** `~/.agents/skills/blog-writer-0.1.0/SKILL.md` - -### 28. copywriting -- **描述:** 文案写作 -- **用途:** 为落地页、邮件、广告、销售页、营销材料写 persuasive copy,标题、CTA、产品描述、广告文案、邮件序列 -- **触发词:** "写文案"、"copywriting"、"landing page copy"、"headline" -- **路径:** `~/.agents/skills/copywriting-0.1.0/SKILL.md` - -### 29. content-strategy -- **描述:** 内容营销策略 -- **用途:** 为solopreneur业务构建和执行内容营销策略 -- **触发词:** "内容策略"、"content marketing"、"内容计划"、"内容日历" -- **路径:** `~/.agents/skills/content-strategy-0.1.0/SKILL.md` - -### 30. seo-content-writer -- **描述:** SEO内容写作 -- **用途:** 写SEO优化内容、创建博客文章、文章 -- **触发词:** "写SEO内容"、"创建博客文章"、"内容写作" -- **路径:** `~/.agents/skills/seo-content-writer-2.0.0/SKILL.md` - -### 31. social-content -- **描述:** 社交媒体内容 -- **用途:** 创建、安排、优化LinkedIn、Twitter/X、Instagram、TikTok、Facebook等内容 -- **触发词:** "LinkedIn post"、"Twitter thread"、"社交媒体"、"内容日历" -- **路径:** `~/.agents/skills/social-content-generator-0.1.0/SKILL.md` - -### 32. Social Media Scheduler -- **描述:** 社交媒体排程 -- **用途:** 计划、起草、跨平台组织社交媒体内容,创建内容日历 -- **路径:** `~/.agents/skills/social-media-scheduler-1.0.0/SKILL.md` - -### 33. research-paper-writer -- **描述:** 研究论文写作 -- **用途:** 创建遵循IEEE/ACM格式标准的正式学术论文 -- **路径:** `~/.agents/skills/research-paper-writer-0.1.0/SKILL.md` - -### 34. Powerpoint / PPTX -- **描述:** PowerPoint 演示文稿 -- **用途:** 创建、检查、编辑Microsoft PowerPoint演示文稿,可靠的布局、模板、占位符、笔记、图表 -- **路径:** `~/.openclaw/skills/powerpoint-pptx/SKILL.md` - ---- - -## 📊 商业与分析 - -### 35. Market Research -- **描述:** 市场研究 -- **用途:** 规模市场、分析竞争对手、用实际框架和数据源验证机会 -- **路径:** `~/.agents/skills/market-research-1.0.0/SKILL.md` - -### 36. interview-designer -- **描述:** 面试设计 -- **用途:** 分析简历,使用基于证据的方法设计面试策略 -- **路径:** `~/.agents/skills/interview-designer-1.0.0/SKILL.md` - -### 37. backtest-expert -- **描述:** 回测专家 -- **用途:** 系统交易策略回测的专家指导 -- **触发词:** 回测、策略验证、鲁棒性测试、避免过度拟合 -- **路径:** `~/.agents/skills/backtest-expert-0.1.0/SKILL.md` - -### 38. automation-workflows -- **描述:** 自动化工作流 -- **用途:** 设计和实施自动化工作流以节省时间和扩展运营 -- **触发词:** "自动化"、"automation workflow"、"save time"、"reduce manual work" -- **路径:** `~/.agents/skills/automation-workflows-0.1.0/SKILL.md` - ---- - -## 🧠 AI 代理能力 - -### 39. proactive-agent-lite -- **描述:** 主动代理Lite -- **用途:** 将AI代理从任务追随者转变为积极主动的伙伴,具有记忆架构、reverse prompting和自愈模式 -- **路径:** `~/.openclaw/skills/proactive-agent-lite/SKILL.md` - -### 40. self-improvement -- **描述:** 自我改进 -- **用途:** 捕获学习、错误、纠正以实现持续改进 -- **触发词:** 命令/操作失败、用户纠正、请求不存在的功能、外部API失败、知识过时 -- **路径:** `~/.openclaw/skills/self-improving-agent/SKILL.md` - -### 41. self-reflection -- **描述:** 自我反思 -- **用途:** 定期自我反思,分析近期会话,写简洁可行的见解 -- **路径:** `~/.agents/skills/agent-self-reflection-1.0.0/SKILL.md` - -### 42. brainstorming -- **描述:** 头脑风暴 -- **用途:** 在任何创造性工作之前必须使用 - 创建功能、构建组件、添加功能或修改行为 -- **路径:** `~/.agents/skills/brainstorming-0.1.0/SKILL.md` - -### 43. writing-plans -- **描述:** 写作计划 -- **用途:** 有规范/需求的多步骤任务规范 -- **路径:** `~/.agents/skills/writing-plans-0.1.0/SKILL.md` - -### 44. executing-plans -- **描述:** 执行计划 -- **用途:** 在单独会话中执行包含审查检查点的书面实施计划 -- **路径:** `~/.agents/skills/executing-plans-0.1.0/SKILL.md` - -### 45. task-summary -- **描述:** 任务总结 -- **用途:** 任务完成后生成结构化总结,记录目标、步骤、结果、经验教训 -- **路径:** `~/.openclaw/skills/task-summary/SKILL.md` - ---- - -## 🔧 工具与系统 - -### 46. clawhub -- **描述:** ClawHub CLI -- **用途:** 从clawhub.com搜索、安装、更新、发布代理技能 -- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/clawhub/SKILL.md` - -### 47. find-skills -- **描述:** 发现技能 -- **用途:** 当用户询问"如何做X"、"找X的技能"、"有能...的技能吗"时帮助用户发现和安装技能 -- **路径:** `~/.agents/skills/find-skills/SKILL.md` - -### 48. skill-creator -- **描述:** 技能创建器 -- **用途:** 创建有效技能的指南 -- **路径:** `~/.agents/skills/skill-creator-0.1.0/SKILL.md` - -### 49. skill-vetter -- **描述:** 技能审核 -- **用途:** AI代理的安全优先技能审核,安装来自ClawHub、GitHub或其他来源的技能之前检查 -- **路径:** `~/.agents/skills/skill-vetter-1.0.0/SKILL.md` - -### 50. clawdefender -- **描述:** 安全防御 -- **用途:** AI代理的安全扫描器和输入清理器,检测prompt注入、命令注入、SSRF、凭证外泄、路径遍历攻击 -- **路径:** `~/.agents/skills/clawdefender-1/SKILL.md` - -### 51. opencode-controller -- **描述:** Opencode 控制器 -- **用途:** 通过斜杠命令控制Opencode,管理会话、选择模型、切换代理 -- **路径:** `~/.agents/skills/opencode-controller-1.0.0/SKILL.md` - ---- - -## 🌤️ 生活与娱乐 - -### 52. weather -- **描述:** 天气 -- **用途:** 通过wttr.in或Open-Meteo获取当前天气和预报 -- **触发词:** 天气、温度、预报 -- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/weather/SKILL.md` - -### 53. video-frames -- **描述:** 视频帧提取 -- **用途:** 使用ffmpeg从视频提取帧或短片段 -- **路径:** `~/.agents/skills/video-frames-1.0.0/SKILL.md` - -### 54. FFmpeg Video Editor -- **描述:** FFmpeg 视频编辑器 -- **用途:** 从自然语言视频编辑请求生成FFmpeg命令 - 剪切、裁剪、转换、压缩、改变宽高比、提取音频等 -- **路径:** `~/.agents/skills/ffmpeg-video-editor-1.0.0/SKILL.md` - -### 55. UI/UX Pro Max -- **描述:** UI/UX 设计 -- **用途:** UI/UX设计智能和实现指导,构建精美界面 -- **路径:** `~/.agents/skills/ui-ux-pro-max-0.1.0/SKILL.md` - ---- - -## 🛡️ 系统与运维 - -### 56. healthcheck -- **描述:** 主机安全检查 -- **用途:** 主机安全加固和风险容忍配置 -- **触发词:** 安全审计、防火墙/SSH/更新加固、风险态势、暴露审查、OpenClaw cron调度 -- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/healthcheck/SKILL.md` - -### 57. node-connect -- **描述:** OpenClaw 节点连接 -- **用途:** 诊断Android、iOS、macOS companion app的配对失败 -- **触发词:** QR/设置码手动连接失败、本地Wi-Fi正常但VPS/tailnet不正常、配对要求、未经授权、bootstrap token无效/过期 -- **路径:** `/opt/homebrew/lib/node_modules/openclaw/skills/node-connect/SKILL.md` - ---- - -## 📊 技能分类汇总 - -| 分类 | 数量 | 技能 | -|------|------|------| -| Apple 生态 | 3 | apple-notes, apple-reminders, accli | -| 云服务/协作 | 7 | gog, feishu-*(6个) | -| 通讯工具 | 1 | slack | -| 网络/浏览器 | 2 | agent-browser, tavily-search | -| 开发工具 | 8 | Docker, Code, git-essentials, frontend-design, security-auditor, architecture-designer, supabase-postgres-best-practices, tmux | -| 笔记/知识管理 | 5 | obsidian, ontology, Memory, obsidian-ontology-sync, task-summary | -| 内容创作 | 8 | blog-writer, copywriting, content-strategy, seo-content-writer, social-content, Social Media Scheduler, research-paper-writer, Powerpoint/PPTX | -| 商业/分析 | 4 | Market Research, interview-designer, backtest-expert, automation-workflows | -| AI代理能力 | 7 | proactive-agent-lite, self-improvement, self-reflection, brainstorming, writing-plans, executing-plans, task-summary | -| 工具/系统 | 6 | clawhub, find-skills, skill-creator, skill-vetter, clawdefender, opencode-controller | -| 生活/娱乐 | 4 | weather, video-frames, FFmpeg Video Editor, UI/UX Pro Max | -| 系统/运维 | 2 | healthcheck, node-connect | - -**总计: 57 个技能** - ---- - -*笔记创建于 2026-03-19 by 星辉* diff --git a/#recycle/星枢 Agent 任务解耦技术方案.md b/#recycle/星枢 Agent 任务解耦技术方案.md deleted file mode 100644 index f5f53025..00000000 --- a/#recycle/星枢 Agent 任务解耦技术方案.md +++ /dev/null @@ -1,446 +0,0 @@ -# 星枢 Agent 任务解耦技术方案 - -> 基于 RabbitMQ 的分布式任务队列架构 -> 版本: 2.1 (已更新) -> 最后更新: 2026-03-17 - ---- - -## 一、概述 - -### 背景 - -当前星枢(主 Agent)与其他 Agent 的通信方式: - -| 方式 | 命令 | 局限 | -| --- | ---------------------------------------------------------- | ---- | -| 本地 | `openclaw agent --agent xingyao --message "..." --deliver` | 同步等待 | -| 远程 | `ssh ubuntu2 "openclaw agent --agent yunce --message ..."` | 串行阻塞 | - -### 目标 - -- **异步执行**:任务下发不等待结果 -- **任务持久化**:重启不丢失 -- **可监控**:实时查看任务状态 -- **可扩展**:支持多 Agent 并行 - -### 讨论结论 - -**技术选型**: RabbitMQ - -**Exchange 命名**: `task_exchange` / `result_exchange` - ---- - -## 二、星枢调度 Agent 列表 - -根据 `星枢调度Agent列表.md`,星枢需要调度的 Agent 包括: - -### Mac Mini(中央控制节点) - -| Agent ID | 角色 | 职责 | -|----------|------|------| -| xingyao | 星曜 | IT 管家 / 运维管理 | -| xinghui | 星辉 | 个人助理 / 日程管理 | - -### Ubuntu2(开发服务器) - -| Agent ID | 角色 | 职责 | -|----------|------|------| -| yunhan | 云瀚 | 监控官 / 系统监控 | -| yunce | 云策 | 架构师 / 技术方案 | -| yunjiang | 云匠 | 工匠 / 代码开发 | -| yunzhi | 云织 | 自动化师 / CI/CD | - -### Ubuntu1(准生产服务器) - -| Agent ID | 角色 | 职责 | -|----------|------|------| -| fengheng | 风衡 | 质检官 / QA测试 | -| fengchi | 风驰 | 执行者 / 业务流程 | -| fengji | 风纪 | 审计官 / 规则审计 | - -**总计**: 9 个子 Agent - ---- - -## 三、架构设计 - -### 3.1 整体架构 - -``` -┌─────────────────────────────────────────────────────────────────────────┐ -│ 用户 │ -│ (Telegram/Discord) │ -└─────────────────────────────────┬───────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────────────┐ -│ 星枢 (xingshu) │ -│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ -│ │ 意图理解 │ │ 任务分解 │ │ 队列管理 │ │ 结果聚合 │ │ -│ │ intent_ │ │ message_ │ │ rabbitmq_ │ │ result_ │ │ -│ │ parser.py │ │ builder.py │ │ sender.py │ │ receiver.py│ │ -│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ -└─────────────────────────────────┬───────────────────────────────────────┘ - │ - ┌─────────────┴─────────────┐ - │ RabbitMQ 集群 │ - │ (task_exchange) │ - └─────────────┬─────────────┘ - │ - ┌───────────┬───────────┼───────────┬───────────┐ - │ │ │ │ │ - ▼ ▼ ▼ ▼ ▼ - ┌──────────┐┌──────────┐┌──────────┐┌──────────┐┌──────────┐ - │ tasks ││ tasks ││ tasks ││ tasks ││ tasks │ - │ .xingyao ││ .xinghui ││ .yunhan ││ .yunce ││.yunjiang │ - └────┬─────┘└────┬─────┘└────┬─────┘└────┬─────┘└────┬─────┘ - │ │ │ │ │ - ▼ ▼ ▼ ▼ ▼ - [星曜] [星辉] [云瀚] [云策] [云匠] - │ │ │ │ │ - └───────────┴───────────┼───────────┴───────────┘ - │ - ┌────────────┴────────────┐ - │ result_exchange │ - │ (result.#) │ - └────────────┬────────────┘ - │ - ▼ - ┌─────────────────────┐ - │ results.xingshu │ ← 星枢监听 - └─────────────────────┘ -``` - -### 3.2 消息流设计 - -``` -┌──────────────────────────────────────────────────────────────────────────┐ -│ 消息生命周期 │ -└──────────────────────────────────────────────────────────────────────────┘ - -[1] 任务下发 [5] 结果处理 - │ ▲ - ▼ │ -┌────────┐ ┌────────────┐ ┌───────────┐ ┌───────────┐ │ -│ 星枢 │───▶│ RabbitMQ │───▶│ Agent N │───▶│ RabbitMQ │──────┐ -│创建任务 │ │ (持久化) │ │ 执行任务 │ │ (结果队列) │ │ -└────────┘ └────────────┘ └───────────┘ └───────────┘ │ - │ │ │ - │ [4] ACK 确认 │ - │ │ │ -[2] 任务入队 │ │ -(可选: 延迟队列) ▼ │ - │ ┌───────────┐ │ - └─────────────▶│ 状态变更 │ │ - │ (处理中→完成) │ - └───────────┘ │ - -[3] Agent 消费任务 -``` - ---- - -## 四、Exchange & Queue 设计 - -### 4.1 Exchanges - -| Exchange | 类型 | 用途 | Routing Key | -|----------|------|------|-------------| -| `task_exchange` | topic | 任务下发 | `task.{agent}` | -| `result_exchange` | topic | 结果收集 | `result.{agent}` | - -### 4.2 Queues - -| Queue | 消费者 | Agent 角色 | -|-------|--------|------------| -| `tasks.xingyao` | xingyao | 星曜 - IT管家 | -| `tasks.xinghui` | xinghui | 星辉 - 个人助理 | -| `tasks.yunhan` | yunhan | 云瀚 - 监控官 | -| `tasks.yunce` | yunce | 云策 - 架构师 | -| `tasks.yunjiang` | yunjiang | 云匠 - 工匠 | -| `tasks.yunzhi` | yunzhi | 云织 - 自动化师 | -| `tasks.fengheng` | fengheng | 风衡 - 质检官 | -| `tasks.fengchi` | fengchi | 风驰 - 执行者 | -| `tasks.fengji` | fengji | 风纪 - 审计官 | -| `results.xingshu` | xingshu | 星枢 - 结果聚合 | - -### 4.3 Routing 规则 - -``` -任务下发: - task_exchange - │ - ├─→ task.xingyao → tasks.xingyao - ├─→ task.xinghui → tasks.xinghui - ├─→ task.yunhan → tasks.yunhan - ├─→ task.yunce → tasks.yunce - ├─→ task.yunjiang → tasks.yunjiang - ├─→ task.yunzhi → tasks.yunzhi - ├─→ task.fengheng → tasks.fengheng - ├─→ task.fengchi → tasks.fengchi - └─→ task.fengji → tasks.fengji - -结果收集: - result_exchange - │ - └─→ result.# → results.xingshu (星枢) -``` - ---- - -## 五、消息格式定义 - -### 5.1 任务消息 (Task Message) - -```json -{ - "taskId": "task_20260317_001", - "type": "task", - "source": "xingshu", - "target": "yunce", - "priority": "high", - "content": { - "action": "code_review", - "params": { - "repo": "my-project", - "branch": "feature/login" - } - }, - "metadata": { - "createdAt": "2026-03-17T10:30:00Z", - "expireAt": "2026-03-17T11:30:00Z", - "retryCount": 0, - "maxRetries": 3 - } -} -``` - -### 5.2 结果消息 (Result Message) - -```json -{ - "taskId": "task_20260317_001", - "type": "result", - "source": "yunce", - "target": "xingshu", - "status": "success", - "content": { - "summary": "代码审查完成", - "findings": [ - {"severity": "warning", "message": "建议添加参数校验"} - ], - "output": "/path/to/report.md" - }, - "metadata": { - "completedAt": "2026-03-17T10:35:00Z", - "duration": 300 - } -} -``` - -### 5.3 心跳消息 (Heartbeat Message) - -```json -{ - "type": "heartbeat", - "agent": "yunce", - "status": "idle", - "currentTask": null, - "timestamp": "2026-03-17T10:30:00Z" -} -``` - ---- - -## 六、星枢指令解析 - -### 6.1 意图到 Agent 的映射 - -| 用户指令 | action | target | 执行 Agent | -|----------|--------|--------|-----------| -| 运维/服务器管理 | ops | xingyao | 星曜 | -| 日程/个人事务 | personal | xinghui | 星辉 | -| 监控巡检 | monitor | yunhan | 云瀚 | -| 架构/方案 | architecture | yunce | 云策 | -| 代码开发 | coding | yunjiang | 云匠 | -| CI/CD/自动化 | automation | yunzhi | 云织 | -| QA测试 | qa_test | fengheng | 风衡 | -| 业务执行 | execute | fengchi | 风驰 | -| 审计/合规 | audit | fengji | 风纪 | - -### 6.2 async-task-scheduling 支持的 action - -| action | target | 说明 | -|--------|--------|------| -| ops | xingyao | IT 运维任务 | -| personal | xinghui | 个人事务 | -| monitor | yunhan | 系统监控 | -| architecture | yunce | 技术方案 | -| coding | yunjiang | 代码开发 | -| automation | yunzhi | 自动化 | -| qa_test | fengheng | QA 测试 | -| execute | fengchi | 业务执行 | -| audit | fengji | 审计检查 | -| code_review | yunce | 代码审查 (快捷) | -| deploy | yunzhi | 部署服务 | - ---- - -## 七、RabbitMQ 初始化步骤 - -### 7.1 环境信息 - -| 项目 | 值 | -|------|-----| -| **IP 地址** | 192.168.3.189 | -| **AMQP 端口** | 5672 | -| **管理界面** | http://192.168.3.189:15672/ | -| **用户名** | guest | -| **密码** | guest | - -### 7.2 一键初始化命令 - -```bash -python3 << 'EOF' -import pika - -connection = pika.BlockingConnection( - pika.ConnectionParameters( - host='192.168.3.189', - port=5672, - credentials=pika.PlainCredentials('guest', 'guest') - ) -) -channel = connection.channel() - -# ========== 1. 创建 Exchange ========== -channel.exchange_declare(exchange='task_exchange', exchange_type='topic', durable=True) -channel.exchange_declare(exchange='result_exchange', exchange_type='topic', durable=True) -print("✅ Exchanges: task_exchange, result_exchange") - -# ========== 2. 创建任务队列 (9个子Agent) ========== -agents = [ - 'xingyao', # 星曜 - IT管家 - 'xinghui', # 星辉 - 个人助理 - 'yunhan', # 云瀚 - 监控官 - 'yunce', # 云策 - 架构师 - 'yunjiang', # 云匠 - 工匠 - 'yunzhi', # 云织 - 自动化师 - 'fengheng', # 风衡 - 质检官 - 'fengchi', # 风驰 - 执行者 - 'fengji', # 风纪 - 审计官 -] - -for agent in agents: - queue_name = f'tasks.{agent}' - channel.queue_declare(queue=queue_name, durable=True) - channel.queue_bind( - exchange='task_exchange', - queue=queue_name, - routing_key=f'task.{agent}' - ) - print(f" 📬 {queue_name} -> task.{agent}") - -# ========== 3. 创建结果聚合队列 ========== -channel.queue_declare(queue='results.xingshu', durable=True) -channel.queue_bind( - exchange='result_exchange', - queue='results.xingshu', - routing_key='result.#' -) -print(" 📬 results.xingshu -> result.#") - -connection.close() -print("\n🎉 RabbitMQ 初始化完成!") -EOF -``` - ---- - -## 八、async-task-scheduling 技能 - -### 8.1 技能概述 - -**技能名称**: async-task-scheduling (异步任务调度) - -**用途**: 星枢专用技能,用于解析用户指令并通过 RabbitMQ 异步调度子 Agent - -**技能位置**: -``` -~/Obsidian/shenwei/openclaw/yunce/async-task-scheduling/ -``` - -### 8.2 文件结构 - -``` -async-task-scheduling/ -├── SKILL.md # 技能说明 -└── scripts/ - ├── __init__.py - ├── intent_parser.py # 意图解析 (action → target 映射) - ├── message_builder.py # 消息构建 (JSON 格式) - ├── rabbitmq_sender.py # RabbitMQ 发送 - └── agent_listener.py # 子 Agent 监听 (可选) -``` - -### 8.3 使用方法 - -```python -from scripts import IntentParser, MessageBuilder, RabbitMQSender - -# 1. 解析用户指令 -parser = IntentParser() -intent = parser.parse_intent("帮我审查 my-project 仓库") - -# 2. 构建消息 -builder = MessageBuilder(source="xingshu") -message = builder.build_task_message(intent) - -# 3. 发送到 RabbitMQ -sender = RabbitMQSender() -task_id = sender.send_task(message) -sender.close() - -return f"✅ 任务已下发: {task_id} → {intent['target']}" -``` - -### 8.4 配置 - -RabbitMQ 连接配置 (rabbitmq_sender.py): - -```python -DEFAULT_CONFIG = { - "host": "192.168.3.189", - "port": 5672, - "username": "guest", - "password": "guest", - "exchange": "task_exchange", - "result_exchange": "result_exchange" -} -``` - ---- - -## 九、待执行事项 - -- [ ] 确认设计后,初始化 RabbitMQ -- [ ] 为星枢 (xingshu) 加载 async-task-scheduling 技能 -- [ ] 子 Agent 监听队列并消费任务 -- [ ] 端到端测试 - ---- - -## 十、相关文件 - -| 文件 | 位置 | -|------|------| -| 星枢调度 Agent 列表 | `~/Obsidian/shenwei/openclaw/xingshu/星枢调度Agent列表.md` | -| 异步任务调度技能 | `~/Obsidian/shenwei/openclaw/yunce/async-task-scheduling/` | - ---- - -*文档版本: 2.1* -*更新日期: 2026-03-17* -*作者: 云策* diff --git a/AI/@eaDir/AI 解决方案专家培训课程.md@SynoEAStream b/AI/@eaDir/AI 解决方案专家培训课程.md@SynoEAStream deleted file mode 100644 index f444f24d6d1fd612bddd70b0e31b259a94247053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/@eaDir/Best 7 news API data feeds - AI News.md@SynoEAStream b/AI/@eaDir/Best 7 news API data feeds - AI News.md@SynoEAStream deleted file mode 100644 index f444f24d6d1fd612bddd70b0e31b259a94247053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/@eaDir/Designing for Agentic AI.md@SynoEAStream b/AI/@eaDir/Designing for Agentic AI.md@SynoEAStream deleted file mode 100644 index f444f24d6d1fd612bddd70b0e31b259a94247053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/@eaDir/Google 神级生产力工具,所有 GitHub 开源平替都找到了。.md@SynoEAStream b/AI/@eaDir/Google 神级生产力工具,所有 GitHub 开源平替都找到了。.md@SynoEAStream deleted file mode 100644 index 426746b6432469ff5ff9a5a8f159663d4893594e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/@eaDir/LLMs、RAG、AI Agent 三个到底什么区别?.md@SynoEAStream b/AI/@eaDir/LLMs、RAG、AI Agent 三个到底什么区别?.md@SynoEAStream deleted file mode 100644 index f444f24d6d1fd612bddd70b0e31b259a94247053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/@eaDir/Nano Banana 提示词框架.md@SynoEAStream b/AI/@eaDir/Nano Banana 提示词框架.md@SynoEAStream deleted file mode 100644 index f444f24d6d1fd612bddd70b0e31b259a94247053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/@eaDir/Never write another prompt.md@SynoEAStream b/AI/@eaDir/Never write another prompt.md@SynoEAStream deleted file mode 100644 index f444f24d6d1fd612bddd70b0e31b259a94247053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/@eaDir/OpenAI ChatGPT 个性化定义.md@SynoEAStream b/AI/@eaDir/OpenAI ChatGPT 个性化定义.md@SynoEAStream deleted file mode 100644 index f444f24d6d1fd612bddd70b0e31b259a94247053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/@eaDir/Untitled.md@SynoEAStream b/AI/@eaDir/Untitled.md@SynoEAStream deleted file mode 100644 index f444f24d6d1fd612bddd70b0e31b259a94247053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/@eaDir/openclaw@SynoEAStream b/AI/@eaDir/openclaw@SynoEAStream deleted file mode 100644 index f444f24d6d1fd612bddd70b0e31b259a94247053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/@eaDir/如何利用Sora接口实现视频自动化生成工作流.md@SynoEAStream b/AI/@eaDir/如何利用Sora接口实现视频自动化生成工作流.md@SynoEAStream deleted file mode 100644 index 426746b6432469ff5ff9a5a8f159663d4893594e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/@eaDir/文字生成视频网站推荐.md@SynoEAStream b/AI/@eaDir/文字生成视频网站推荐.md@SynoEAStream deleted file mode 100644 index f444f24d6d1fd612bddd70b0e31b259a94247053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/@eaDir/详细!离线部署大模型:ollama+deepseek+open-webui安装使用方法及常见问题解决 1.md@SynoEAStream b/AI/@eaDir/详细!离线部署大模型:ollama+deepseek+open-webui安装使用方法及常见问题解决 1.md@SynoEAStream deleted file mode 100644 index f444f24d6d1fd612bddd70b0e31b259a94247053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/@eaDir/𝗔𝗜 𝗶𝘀 𝗘𝗻𝘁𝗲𝗿𝗶𝗻𝗴 𝘁𝗵𝗲 𝗔𝗴𝗲 𝗼𝗳 𝗔𝗴𝗲𝗻𝗰𝘆 – 𝗠𝗼𝘃𝗶𝗻𝗴 𝗕𝗲𝘆𝗼𝗻𝗱 𝗔𝘂𝘁𝗼𝗺𝗮𝘁𝗶𝗼𝗻.md@SynoEAStream b/AI/@eaDir/𝗔𝗜 𝗶𝘀 𝗘𝗻𝘁𝗲𝗿𝗶𝗻𝗴 𝘁𝗵𝗲 𝗔𝗴𝗲 𝗼𝗳 𝗔𝗴𝗲𝗻𝗰𝘆 – 𝗠𝗼𝘃𝗶𝗻𝗴 𝗕𝗲𝘆𝗼𝗻𝗱 𝗔𝘂𝘁𝗼𝗺𝗮𝘁𝗶𝗼𝗻.md@SynoEAStream deleted file mode 100644 index f444f24d6d1fd612bddd70b0e31b259a94247053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/@eaDir/🟠API Key.md@SynoEAStream b/AI/@eaDir/🟠API Key.md@SynoEAStream deleted file mode 100644 index f444f24d6d1fd612bddd70b0e31b259a94247053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqow~ElDg%%*j@O0+1L3ClDI}u>uf-_(4ES5C8y4GzAI( diff --git a/AI/openclaw/@eaDir/OpenClaw 多 Agent 系统设计.md@SynoEAStream b/AI/openclaw/@eaDir/OpenClaw 多 Agent 系统设计.md@SynoEAStream deleted file mode 100644 index f444f24d6d1fd612bddd70b0e31b259a94247053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K$Vqox1Ojhs@R)|o50+1L3ClDI}aUl?c_=|y<2;dkJ5(HHS(lG;wxzV&S oBE&_L^K- 技术方案
    - 系统规划 | 云中筹策,技术谋略。 | -| 云匠 | - 代码开发
    - 构建
    - 工程实现 | 云端工匠 | -| 云织 | - CI/CD
    - 自动化流程
    - pipeline 编排 | 织云为网 | - - ---- - -## 3.3 Ubuntu2 最终推荐结构 - -``` -Ubuntu2(开发服务器) - -云瀚 监控 -云策 架构设计 -云匠 开发实现 -云织 CI/CD自动化 -``` - ---- - -# 4. Ubuntu1(准生产服务器) - -定位: - -- QA 测试 -- 业务执行 -- 自动任务 -- 审计规则 - -Agent 统一使用 **“风”系列命名**。 - -原因: - -> 风代表执行、速度、行动。 - -| Agent | 职责 | | -| ----- | ---------------------------- | ----- | -| 风衡 | - QA 测试
    - 自动测试
    - 质量控制 | 风中权衡。 | -| 风驰 | - 自动任务
    - Job 执行
    - 业务流程 | 风驰电掣。 | -| 风纪 | - 规则执行
    - 审计
    - 合规 | 风纪法度 | - ---- - -## 4.2 Ubuntu1 推荐结构 - -``` -Ubuntu1(准生产服务器) - -风衡 QA测试 -风驰 自动执行 -风纪 规则审计 -``` - ---- - -# 5. 完整 Agent 架构 - -最终整体结构: - -``` - 星枢 - (总调度 Agent) - │ - ┌────────────┼────────────┐ - │ │ │ - 星曜 星辉 服务器集群 - (IT管家) (个人助理) │ - │ - ┌────────────┴────────────┐ - │ │ - Ubuntu2 Ubuntu1 - (开发服务器) (准生产) - │ │ - ┌───────┼───────┐ ┌───────┼───────┐ - │ │ │ │ │ │ - 云瀚 云策 云匠 风衡 风驰 风纪 - 监控 架构 开发 QA 执行 审计 - │ - 云织 - CI/CD -``` - ---- - -# 6. Agent 体系总结 - -|系列|含义|角色类型| -|---|---|---| -|星|星辰|调度 / 管理| -|云|云海|技术 / 开发| -|风|风行|执行 / 流程| - ---- - -## 星系 Agent - -|Agent|职责| -|---|---| -|星枢|总调度| -|星曜|IT 管理| -|星辉|助手| - -未来可扩展: - -|Agent|角色| -|---|---| -|星策|战略规划| -|星典|知识管理| - ---- - -## 云系 Agent - -|Agent|职责| -|---|---| -|云瀚|监控| -|云策|架构| -|云匠|开发| -|云织|CI/CD| - ---- - -## 风系 Agent - -|Agent|职责| -|---|---| -|风衡|QA| -|风驰|自动执行| -|风纪|审计| - ---- - -# 7. 设计优势 - -该 Agent 命名体系具有以下优点: - -### 1. 语义清晰 - -看到名字即可理解职责。 - -例如: - -- 云匠 → 开发 - -- 风衡 → QA - -- 星枢 → 调度 - - ---- - -### 2. 层级清晰 - -``` -星(控制) -↓ -云(技术) -↓ -风(执行) -``` - ---- - -### 3. 易于扩展 - -未来可以继续增加: - -云系: - -- 云图(数据) - -- 云阵(基础设施) - -- 云算(AI计算) - - -风系: - -- 风策(业务策略) - -- 风行(业务执行) - -- 风巡(巡检) - - ---- - -### 4. 非常适合 Agent 调度 - -星枢可以统一调度: - -``` -星枢 → 云系 → 风系 -``` - -示例: - -``` -星枢 - ↓ -云策(制定方案) - ↓ -云匠(开发) - ↓ -云织(部署) - ↓ -风衡(测试) - ↓ -风驰(执行) -``` - -形成完整 **AI 自动化流水线**。 - ---- - -# 8. 最终推荐部署 - -### Mac Mini - -``` -星枢 -星曜 -星辉 -``` - ---- - -### Ubuntu2(开发) - -``` -云瀚 -云策 -云匠 -云织 -``` - ---- - -### Ubuntu1(准生产) - -``` -风衡 -风驰 -风纪 -``` - ---- - diff --git a/AI/openclaw/OpenClaw 多 Agent 系统设计.md b/AI/openclaw/OpenClaw 多 Agent 系统设计.md deleted file mode 100644 index 1243c43b..00000000 --- a/AI/openclaw/OpenClaw 多 Agent 系统设计.md +++ /dev/null @@ -1,574 +0,0 @@ - -#openclaw #agent #telegram -```table-of-contents -``` - ---- - -# OpenClaw 多 Agent 自动化系统架构笔记 (Advanced) - -Author: Billy -Purpose: 构建基于 OpenClaw + Telegram + n8n 的 AI 自动化控制系统 - ---- - -# 1 系统总体架构 - -**目标:** - -构建一个 **AI Automation Control Center** - -**核心组件:** - -- OpenClaw Gateway -- 多 Agent -- Telegram Interface -- n8n Workflow Engine - -**系统架构:** - -``` - Telegram - │ - ▼ - Telegram Bot - │ - ▼ - n8n - (Command Router) - │ - ▼ - OpenClaw Gateway - │ - ▼ - ┌────────┬────────┬────────┐ - ▼ ▼ ▼ ▼ - Router Dev Research Ops - Agent Agent Agent Agent -``` - -**系统功能:** - -| 组件 | 作用 | -|------|------| -| Telegram | 用户交互 | -| n8n | 任务路由 | -| OpenClaw | AI Agent Runtime | -| Agents | 任务执行 | - ---- - -# 2 OpenClaw 基础目录结构 - -**默认路径:** `~/.openclaw/` - -**结构:** - -``` -.openclaw/ -│ -├── agents/ -│ │ -│ ├── main/ -│ │ └── agent/ -│ │ ├── authprofile.json -│ │ └── models.json -│ │ -│ └── research/ -│ └── agent/ -│ ├── authprofile.json -│ └── models.json -│ -└── workspace/ - │ - ├── skills/ - ├── memory/ - ├── identity/ - │ └── Identity.md - ├── logs/ - ├── devices/ - ├── completions/ - └── canvas/ -``` - -**说明:** - -| 目录 | 作用 | -|------|------| -| agents | Agent Profile | -| workspace | 运行数据 | -| skills | 技能插件 | -| memory | AI记忆 | -| identity | System Prompt | -| logs | 日志 | - ---- - -# 3 多 Agent 设计 - -**创建 Agent:** - -```bash -openclaw agent create dev -openclaw agent create research -openclaw agent create ops -openclaw agent create orchestrator -``` - -**推荐 Agent 列表:** - -| Agent | 职责 | -|-------|------| -| orchestrator | 任务调度 | -| dev | 编程 | -| research | 搜索分析 | -| ops | 服务器运维 | -| data | 数据处理 | - -**推荐结构:** - -``` -agents/ -│ -├── orchestrator/ -├── dev/ -├── research/ -├── ops/ -└── data/ -``` - ---- - -# 4 Agent Identity 设计 - -Identity 代表:System Prompt - -**建议放在:** `agents/dev/agent/identity.md` - -**示例:** - -``` -You are DevAgent. - -Responsibilities: -- write code -- debug programs -- generate scripts -- create docker configurations -``` - -**Research Agent:** - -``` -You are ResearchAgent. - -Responsibilities: -- research information -- summarize technical topics -- analyze documents -``` - ---- - -# 5 Skills 机制 - -**Skills 目录:** `workspace/skills` - -**示例:** - -``` -skills/ -├── browser -├── filesystem -├── python -├── telegram -└── self-improving-agent -``` - -**特点:** - -- 所有 Agent 共享 -- 类似插件 - ---- - -# 6 Memory 设计 - -**默认 memory:** `workspace/memory` - -默认共享。 - -**memory 类型:** - -``` -memory/ -├── episodic -├── semantic -└── vector -``` - -**推荐 Memory 分层:** - -``` -memory/ -├── system -├── dev -├── research -└── ops -``` - -这样避免:memory pollution - -**Agent 指定 namespace:** - -```json -{ - "memoryNamespace": "dev" -} -``` - ---- - -# 7 模型配置 - -每个 Agent 独立:`agents//agent/models.json` - -**示例:** - -```json -{ - "default": "gpt-4o-mini", - "models": { - "gpt-4o-mini": { - "provider": "openai", - "model": "gpt-4o-mini" - }, - "deepseek-coder": { - "provider": "openai-compatible", - "base_url": "https://api.deepseek.com/v1", - "model": "deepseek-coder" - } - } -} -``` - -**推荐模型分配:** - -| Agent | Model | -|-------|-------| -| orchestrator | gpt-4o-mini | -| dev | deepseek-coder | -| research | gpt-4o | -| ops | claude-sonnet | - -**优点:** - -- 降低成本 -- 提升能力 - ---- - -# 8 Agent 切换 - -**切换 active agent:** - -```bash -openclaw agent use research -``` - -**行为:** - -``` -current_agent = research -``` - -下一条消息: - -``` -Telegram → research agent -``` - -不需要重启 Gateway。 - ---- - -# 9 Telegram 集成 - -OpenClaw 支持:Telegram Bot - -**结构:** - -``` -Telegram - │ - ▼ -OpenClaw Gateway -``` - -**默认:** 所有消息 → active agent - ---- - -# 10 Telegram 指令体系 - -**推荐命令:** - -``` -/dev -/research -/ops -/data -/help -``` - -**示例:** - -``` -/dev 写一个python脚本 -/research 查一下OpenClaw架构 -/ops restart docker -``` - -在 BotFather 设置:`/setcommands` - -**示例:** - -``` -dev - coding tasks -research - research tasks -ops - server tasks -``` - ---- - -# 11 n8n Command Router - -推荐使用:n8n 进行任务路由。 - -**架构:** - -``` -Telegram - │ - ▼ - n8n - │ - ▼ -OpenClaw -``` - -**Workflow:** - -``` -Telegram Trigger - │ - ▼ -Parse Command - │ - ▼ -Agent Router - │ - ▼ -HTTP → OpenClaw -``` - -**解析示例:** - -```javascript -const msg = $json.message.text - -if(msg.startsWith("/dev")){ - return {agent:"dev"} -} - -if(msg.startsWith("/research")){ - return {agent:"research"} -} -``` - ---- - -# 12 Router Agent - -Router Agent 负责:Task Distribution - -**Prompt 示例:** - -``` -You are a routing agent. - -Rules: -/dev → DevAgent -/research → ResearchAgent -/ops → OpsAgent -``` - ---- - -# 13 推荐系统架构 - -Mac Mini AI Control Center: - -``` -Mac Mini -│ -├─ OpenClaw Gateway -├─ n8n -└─ Telegram Bot - -Agents -│ -├─ orchestrator -├─ dev -├─ research -├─ ops -└─ data -``` - -**数据流:** - -``` -Telegram - ↓ -n8n Router - ↓ -OpenClaw - ↓ - Agents -``` - ---- - -# 14 高级玩法 - -**支持:** - -### 多服务器 Agent - -``` -Mac Mini - orchestrator - -Ubuntu Server - dev agent - -NAS - data agent -``` - -**通信:** - -``` -HTTP -Redis -MQ -``` - ---- - -# 15 最佳实践 - -### 1 Agent 专业化 - -**正确:** - -``` -dev-agent -ops-agent -research-agent -``` - -**错误:** - -``` -python-agent -browser-agent -``` - ---- - -### 2 模型分工 - -不要所有 agent 使用同一个模型。 - -**否则:** - -``` -multi-agent ≈ single-agent -``` - ---- - -### 3 Memory 分层 - -**推荐:** - -``` -memory/ -├── system -├── dev -├── research -└── ops -``` - ---- - -### 4 Router 统一入口 - -**不要:** - -``` -Telegram → 各 agent -``` - -**应该:** - -``` -Telegram → Router → Agents -``` - ---- - -# 16 最终架构总结 - -**最终系统:** - -``` -Telegram - │ - ▼ - n8n Router - │ - ▼ -OpenClaw Gateway - │ - ▼ -┌──────────────┬──────────────┬──────────────┐ - DevAgent ResearchAgent OpsAgent -``` - -**系统特点:** - -- 多 Agent -- 多模型 -- 自动任务分发 -- Telegram 控制 -- 自动化工作流 - ---- - -# 17 未来扩展 - -**未来可扩展:** - -- AI 自动任务 -- 自动服务器运维 -- 自动代码生成 -- 自动数据分析 -- 自动监控告警 - -**目标:** 构建 Personal AI Operations Center - - - - diff --git a/AI/openclaw/OpenClaw-Agent管理指南.md b/AI/openclaw/OpenClaw-Agent管理指南.md deleted file mode 100644 index e5a4da2b..00000000 --- a/AI/openclaw/OpenClaw-Agent管理指南.md +++ /dev/null @@ -1,194 +0,0 @@ -# OpenClaw Agent 管理指南 - -> 创建日期: 2026-03-15 -> 作者: 星曜 - ---- - -## 1. 创建新 Agent - -### 基本命令 - -```bash -openclaw agents add --non-interactive --workspace -``` - -### 参数说明 - -| 参数 | 说明 | -| ------------------- | ----------------- | -| `` | Agent 名称(唯一标识) | -| `--non-interactive` | 跳过交互式提示,自动创建 | -| `--workspace` | 指定 workspace 目录路径 | - -### 示例 - -```bash -# 创建名为 xinghui 的 agent -openclaw agents add xinghui --non-interactive --workspace ~/.openclaw/workspace-agent-xinghui - -# 创建名为 xingyao 的 agent(复制现有workspace) -openclaw agents add xingyao --non-interactive --workspace ~/.openclaw/workspace-agent-xingyao -``` - -### Workspace 路径规范 - -- 格式: `~/.openclaw/workspace-agent-` -- 示例: `~/.openclaw/workspace-agent-xinghui` - ---- - -## 2. 复制 Workspace 到新 Agent - -### 场景 -创建一个与现有 agent(通常是 main)拥有相同内容的 workspace - -### 方法一:rsync 复制(推荐) - -```bash -rsync -av --exclude='.git' /Users/weishen/.openclaw/workspace/ /Users/weishen/.openclaw/workspace-agent-xingyao/ -``` - -### 方法二:软链接共享记忆 - -如果想让多个 agent 共享记忆(MEMORY.md 和 memory/ 目录): - -```bash -# 为新 agent 创建软链接 -ln -sf /Users/weishen/.openclaw/workspace/memory /Users/weishen/.openclaw/workspace-agent-/memory -ln -sf /Users/weishen/.openclaw/workspace/MEMORY.md /Users/weishen/.openclaw/workspace-agent-/MEMORY.md -``` - -**注意**: 共用 workspace 可能导致配置冲突,建议独立 workspace + 软链接共享 memory 目录 - ---- - -## 3. 绑定 Agent 到 Channel - -### 查看当前绑定 - -```bash -openclaw agents bindings -``` - -### 绑定命令 - -```bash -openclaw agents bind --agent --bind : -``` - -### 参数说明 - -| 参数 | 说明 | -| -------------- | ----------------------------------- | -| `` | 要绑定的 agent 名称 | -| `` | 频道类型(telegram, discord, whatsapp 等) | -| `` | 账号 ID(数字形式) | - -### 示例[[How to get Youtube Channel ID]] - -```bash -# 绑定 xinghui 到 Telegram -openclaw agents bind --agent xinghui --bind telegram:5038825565 - -# 绑定 xingyao 到 Telegram -openclaw agents bind --agent xingyao --bind telegram:5038825565 -``` - -### 解绑 - -```bash -# 解绑指定 channel -openclaw agents unbind --bind telegram:5038825565 - -# 解绑指定 agent 的 channel -openclaw agents unbind --agent xinghui --bind telegram:5038825565 -``` - ---- - -## 4. 删除 Agent - -### 命令 - -```bash -openclaw agents delete -``` - -### 示例 - -```bash -# 需要确认 -openclaw agents delete agent-macmini-001 - -# 强制删除(非交互模式) -openclaw agents delete agent-macmini-001 --force -``` - -### 删除效果 -- Workspace 目录移至废纸篓 -- Sessions 目录删除 -- 从配置文件移除 - ---- - -## 5. 查看 Agent 列表 - -```bash -openclaw agents list -``` - -### 输出示例 - -``` -Agents: -- main (default) - Workspace: ~/.openclaw/workspace - Agent dir: ~/.openclaw/agents/main/agent - Model: minimax-portal/MiniMax-M2.5 - Routing rules: 0 - Routing: default (no explicit rules) -- xinghui - Workspace: ~/.openclaw/workspace-agent-xinghui - Agent dir: ~/.openclaw/agents/xinghui/agent - Model: minimax-portal/MiniMax-M2.5 - Routing rules: 0 -``` - ---- - -## 6. Agent 配置说明 - -### 默认模型 -所有新创建的 agent 默认使用: `minimax-portal/MiniMax-M2.5` - -### 配置文件位置 -- 主配置: `~/.openclaw/openclaw.json` -- Agent 状态: `~/.openclaw/agents//agent/` - ---- - -## 7. 常用命令速查 - -| 操作 | 命令 | -|------|------| -| 创建 agent | `openclaw agents add --non-interactive --workspace ~/.openclaw/workspace-agent-` | -| 查看列表 | `openclaw agents list` | -| 查看绑定 | `openclaw agents bindings` | -| 绑定 channel | `openclaw agents bind --agent --bind telegram:` | -| 解绑 channel | `openclaw agents unbind --bind telegram:` | -| 删除 agent | `openclaw agents delete --force` | - ---- - -## 8. 当前已创建的 Agent - -| Agent 名称 | Workspace | 状态 | -|------------|-----------|------| -| main | ~/.openclaw/workspace | 默认 | -| xinghui | ~/.openclaw/workspace-agent-xinghui | 独立(无共享记忆) | -| xingyao | ~/.openclaw/workspace-agent-xingyao | 完整复制 main workspace | - ---- - -*最后更新: 2026-03-15 14:33* diff --git a/openclaw/knowledgebase/FRP 配置详细笔记.md b/openclaw/knowledgebase/FRP 配置详细笔记.md index 1ce46e02..a0f4eafe 100644 --- a/openclaw/knowledgebase/FRP 配置详细笔记.md +++ b/openclaw/knowledgebase/FRP 配置详细笔记.md @@ -231,7 +231,7 @@ remotePort = 15678 ### 基本信息 - **FRP目录**: `/opt/frp/frp_0.65.0_linux_amd64` - **配置文件**: `frpc.toml` -- **运行用户**: root (通过 tmux 管理) +- **运行用户**: root (通过 systemd 管理) ### 代理配置列表 @@ -285,7 +285,7 @@ remotePort = 18889 ### 基本信息 - **FRP目录**: `/opt/frp/frp_0.65.0_linux_amd64` - **配置文件**: `frpc.toml` -- **运行用户**: root +- **运行用户**: root (通过 systemd 管理) ### 代理配置列表 diff --git a/AI/openclaw/GOG-CLI-安装配置指南.md b/openclaw/knowledgebase/GOG-CLI-安装配置指南.md similarity index 70% rename from AI/openclaw/GOG-CLI-安装配置指南.md rename to openclaw/knowledgebase/GOG-CLI-安装配置指南.md index 251f7182..0d2ab341 100644 --- a/AI/openclaw/GOG-CLI-安装配置指南.md +++ b/openclaw/knowledgebase/GOG-CLI-安装配置指南.md @@ -3,14 +3,8 @@ 本文档记录在 macOS 系统上安装和配置 gog CLI 的完整步骤,以便通过命令行管理 Google Workspace(Gmail、Google Calendar、Google Drive、Google Contacts、Google Docs、Google Sheets)。 ## 目录 - -- [前置条件](#前置条件) -- [安装步骤](#安装步骤) -- [配置 OAuth 凭证](#配置-oauth-凭证) -- [解除 Google 安全限制](#解除-google-安全限制) -- [验证配置](#验证配置) -- [常用命令](#常用命令) -- [故障排除](#故障排除) +```table-of-contents +``` --- @@ -54,22 +48,21 @@ which gog ### 2. 移动凭证文件到 gogcli 配置目录 -创建 gogcli 配置目录(如果不存在): +- 创建 gogcli 配置目录(如果不存在): ```bash mkdir -p "/Users/weishen/Library/Application Support/gogcli" ``` -移动下载的凭证文件: +- 移动下载的凭证文件: ```bash mv ~/Downloads/credentials.json "/Users/weishen/Library/Application Support/gogcli/credentials.json" ``` -或者使用命令指定凭证路径: - +- 使用命令指定凭证路径: ```bash -gog auth credentials /path/to/credentials.json +gog auth credentials /Users/weishen/Library/Application\ Support/gogcli/credentials.json ``` --- @@ -86,11 +79,12 @@ gog auth credentials /path/to/credentials.json ### 解决方法:添加测试用户 1. 打开 [Google Cloud Console - Credentials](https://console.cloud.google.com/apis/credentials) -2. 找到你创建的 OAuth 客户端ID,点击进入详情 -3. 找到 **「测试用户」** 部分 -4. 点击 **「添加用户」** -5. 输入你的 Google 邮箱:`ishenwei@gmail.com` -6. 保存 +2. 找到你创建的 OAuth 客户端ID的项目,点击进入详情 +3. 找到 **「目标对象」** +4. 找到 **「测试用户」** 部分 +5. 点击 **「添加用户」** +6. 输入你的 Google 邮箱:`ishenwei@gmail.com` +7. 保存 添加测试用户后,重新运行授权命令即可: @@ -102,6 +96,55 @@ gog auth add ishenwei@gmail.com --services gmail,calendar,drive,contacts,docs,sh --- +## 启用Google API 服务(以 Gmail API 为例) + +### 1. 核心原理 + +Google API 调用需要满足两层条件: + +| 层级 | 控制内容 | +| -------------- | ---------- | +| OAuth | 用户身份 | +| API Enablement | 是否允许调用 API | +👉 即使 OAuth 成功,如果 API 未启用: + +也会报错: +403 accessNotConfigured + +### 2. 典型错误示例 + +Gmail API has not been used in project XXX + +👉 表示: + +该 Project 未启用 Gmail API + +### 3. 操作步骤 + +#### Step 1:进入 API 页面 + +Google Cloud Console +→ APIs & Services +→ Library +#### Step 2:搜索 API + +例如: +Gmail API +#### Step 3:启用 + +Enable +#### Step 4:等待生效 + +30 秒 ~ 2 分钟(有延迟) +#### Step 5:重新授权(关键) + +gog auth revoke +gog auth login + +👉 原因: +旧 token 不包含新权限 + +--- ## 验证配置 ### 1. 查看已授权的账号 @@ -110,12 +153,24 @@ gog auth add ishenwei@gmail.com --services gmail,calendar,drive,contacts,docs,sh gog auth list ``` +- 正确结果 +``` +weishen@WeideMac-mini ~ % gog auth list +ishenwei@gmail.com default calendar,contacts,docs,drive,gmail,sheets 2026-03-24T01:29:14Z oauth +``` + ### 2. 测试 Gmail ```bash gog gmail search "newer_than:1d" --max 5 ``` +- 正确结果: +``` +weishen@WeideMac-mini ~ % gog auth list +ishenwei@gmail.com default calendar,contacts,docs,drive,gmail,sheets 2026-03-24T01:29:14Z oauth +``` + ### 3. 测试 Calendar ```bash @@ -193,10 +248,18 @@ gog auth add ishenwei@gmail.com --services gmail,calendar,drive,contacts,docs,sh ### 设置默认账号 避免每次重复指定账号: - +``` +cd ~ +nano .zshrc +``` +在.zshrc中添加以下设定 ```bash export GOG_ACCOUNT=ishenwei@gmail.com ``` +保存生效 +``` +source ~/.zshrc +``` --- diff --git a/AI/openclaw/Ubuntu 下 OpenClaw 安装与管理指南.md b/openclaw/knowledgebase/Ubuntu 下 OpenClaw 安装与管理指南.md similarity index 100% rename from AI/openclaw/Ubuntu 下 OpenClaw 安装与管理指南.md rename to openclaw/knowledgebase/Ubuntu 下 OpenClaw 安装与管理指南.md