Compare commits

...

5 Commits

Author SHA1 Message Date
Docker7530 521496f2df 1779195890 2026-05-19 21:04:53 +08:00
Docker7530 7f14056210 1778682052 2026-05-13 22:20:54 +08:00
Docker7530 6b50219f55 1776654103 2026-04-20 11:01:47 +08:00
Docker7530 ab41c81a53 1775206638 2026-04-03 16:57:21 +08:00
Docker7530 30063feba4 1774919088 2026-03-31 09:04:50 +08:00
347 changed files with 6793 additions and 1704 deletions
+2 -3
View File
@@ -7,9 +7,8 @@
}, },
{ {
"type": "file", "type": "file",
"ctime": 1772680366639, "ctime": 1778660024443,
"path": "work/移动杭研/开发记录/7.19.0/开发笔记.md", "path": "work/移动杭研/开发记录/7.21.0/开发笔记 7.21.0.md"
"title": "7.19.0 开发笔记"
} }
] ]
} }
+3 -1
View File
@@ -4,5 +4,7 @@
"oz-clear-unused-images", "oz-clear-unused-images",
"obsidian-excalidraw-plugin", "obsidian-excalidraw-plugin",
"templater-obsidian", "templater-obsidian",
"obsidian-linter" "obsidian-linter",
"recent-files-obsidian",
"quickadd"
] ]
+1 -1
View File
@@ -11,7 +11,7 @@
"page-preview": true, "page-preview": true,
"daily-notes": true, "daily-notes": true,
"templates": false, "templates": false,
"note-composer": false, "note-composer": true,
"command-palette": true, "command-palette": true,
"slash-command": false, "slash-command": false,
"editor-status": true, "editor-status": true,
+2 -2
View File
@@ -5,7 +5,7 @@
"showAttachments": false, "showAttachments": false,
"hideUnresolved": false, "hideUnresolved": false,
"showOrphans": true, "showOrphans": true,
"collapse-color-groups": true, "collapse-color-groups": false,
"colorGroups": [], "colorGroups": [],
"collapse-display": false, "collapse-display": false,
"showArrow": false, "showArrow": false,
@@ -17,6 +17,6 @@
"repelStrength": 10, "repelStrength": 10,
"linkStrength": 1, "linkStrength": 1,
"linkDistance": 250, "linkDistance": 250,
"scale": 0.09848280266864458, "scale": 0.13807120506649795,
"close": true "close": true
} }
+11 -5
View File
@@ -11,26 +11,32 @@
"workspace:goto-last-tab": [], "workspace:goto-last-tab": [],
"editor:set-heading-1": [ "editor:set-heading-1": [
{ {
"modifiers": ["Mod"], "modifiers": [
"Mod"
],
"key": "1" "key": "1"
} }
], ],
"editor:set-heading-2": [ "editor:set-heading-2": [
{ {
"modifiers": ["Mod"], "modifiers": [
"Mod"
],
"key": "2" "key": "2"
} }
], ],
"editor:set-heading-3": [ "editor:set-heading-3": [
{ {
"modifiers": ["Mod"], "modifiers": [
"Mod"
],
"key": "3" "key": "3"
} }
], ],
"templater-obsidian:create-attachment/templates/日常记录-闪念笔记.md": [ "quickadd:runQuickAdd": [
{ {
"modifiers": [], "modifiers": [],
"key": "F1" "key": "F1"
} }
] ]
} }
+179 -11
View File
@@ -2,6 +2,7 @@
"copyLinkToElemenetAnchorTo100": false, "copyLinkToElemenetAnchorTo100": false,
"copyFrameLinkByName": false, "copyFrameLinkByName": false,
"disableDoubleClickTextEditing": false, "disableDoubleClickTextEditing": false,
"phoneFooterSafeAreaPadding": false,
"folder": "excalidraw", "folder": "excalidraw",
"cropFolder": "excalidraw/cropped", "cropFolder": "excalidraw/cropped",
"annotateFolder": "excalidraw/annotations", "annotateFolder": "excalidraw/annotations",
@@ -29,8 +30,10 @@
"annotateSuffix": "", "annotateSuffix": "",
"annotatePrefix": "annotated_", "annotatePrefix": "annotated_",
"annotatePreserveSize": false, "annotatePreserveSize": false,
"displaySVGInPreview": false,
"previewImageType": "SVGIMG", "previewImageType": "SVGIMG",
"renderingConcurrency": 3, "renderingConcurrency": 3,
"imageCacheRetentionDays": 30,
"allowImageCache": true, "allowImageCache": true,
"allowImageCacheInScene": true, "allowImageCacheInScene": true,
"displayExportedImageIfAvailable": false, "displayExportedImageIfAvailable": false,
@@ -107,13 +110,14 @@
"addDummyTextElement": false, "addDummyTextElement": false,
"zoteroCompatibility": false, "zoteroCompatibility": false,
"fieldSuggester": true, "fieldSuggester": true,
"enableOnloadScripts": false,
"compatibilityMode": false, "compatibilityMode": false,
"drawingOpenCount": 0, "drawingOpenCount": 0,
"library": "deprecated", "library": "deprecated",
"library2": { "library2": {
"type": "excalidrawlib", "type": "excalidrawlib",
"version": 2, "version": 2,
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.20.6", "source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.22.3",
"libraryItems": [] "libraryItems": []
}, },
"imageElementNotice": true, "imageElementNotice": true,
@@ -126,6 +130,7 @@
"scriptEngineSettings": {}, "scriptEngineSettings": {},
"previousRelease": "2.20.6", "previousRelease": "2.20.6",
"showReleaseNotes": false, "showReleaseNotes": false,
"excalidrawMasteryPromoCollapsed": false,
"compareManifestToPluginVersion": true, "compareManifestToPluginVersion": true,
"showNewVersionNotification": true, "showNewVersionNotification": true,
"latexBoilerplate": "\\color{blue}", "latexBoilerplate": "\\color{blue}",
@@ -482,15 +487,178 @@
"canvasImmersiveEmbed": true, "canvasImmersiveEmbed": true,
"startupScriptPath": "", "startupScriptPath": "",
"aiEnabled": true, "aiEnabled": true,
"openAIAPIToken": "sk-JynMarAEOuLlYb3_bdQAdHEhKp-vK9az-uQXGlw_VSKQIEHnCb86PeqtxLQ", "aiVerboseLogging": false,
"openAIDefaultTextModel": "gpt-5.2", "aiProviderProfiles": {
"openAIDefaultTextModelMaxTokens": 0, "OpenAI": {
"openAIDefaultVisionModel": "gemini-3.1-pro-preview", "provider": "openai",
"openAIDefaultImageGenerationModel": "gemini-3.1-pro-preview", "apiKey": "",
"openAIURL": "https://api.ai-wave.org/v1/chat/completions", "baseURL": "https://api.openai.com/v1"
"openAIImageGenerationURL": "https://api.openai.com/v1/images/generations", },
"openAIImageEditsURL": "https://api.openai.com/v1/images/edits", "Anthropic": {
"openAIImageVariationURL": "https://api.openai.com/v1/images/variations", "provider": "anthropic",
"apiKey": "",
"baseURL": "https://api.anthropic.com/v1"
},
"Google Gemini": {
"provider": "google",
"apiKey": "",
"baseURL": "https://generativelanguage.googleapis.com/v1beta"
},
"xAI": {
"provider": "xai",
"apiKey": "",
"baseURL": "https://api.x.ai/v1"
},
"OpenAI-compatible": {
"provider": "openai-compatible",
"apiKey": "",
"baseURL": "https://api.openai.com/v1"
}
},
"aiTextModelConfigs": {
"gpt-5-mini": {
"providerId": "OpenAI",
"model": "gpt-5-mini",
"endpoint": "",
"multimodalSupport": true
},
"claude-sonnet-4-5": {
"providerId": "Anthropic",
"model": "claude-sonnet-4-5",
"endpoint": "",
"multimodalSupport": true
},
"gemini-2.5-pro": {
"providerId": "Google Gemini",
"model": "gemini-2.5-pro",
"endpoint": "",
"multimodalSupport": true
},
"grok-4-fast": {
"providerId": "xAI",
"model": "grok-4-fast",
"endpoint": "",
"multimodalSupport": true
}
},
"aiImageModelConfigs": {
"dall-e-2": {
"providerId": "OpenAI",
"model": "dall-e-2",
"supportedSizes": [
"256x256",
"512x512",
"1024x1024"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": true
},
"dall-e-3": {
"providerId": "OpenAI",
"model": "dall-e-3",
"supportedSizes": [
"1024x1024",
"1792x1024",
"1024x1792"
],
"supportsPromptImageTransforms": false,
"supportsMaskImageEdits": false
},
"gpt-image-1": {
"providerId": "OpenAI",
"model": "gpt-image-1",
"supportedSizes": [
"1024x1024",
"1536x1024",
"1024x1536"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": true
},
"gpt-image-1-mini": {
"providerId": "OpenAI",
"model": "gpt-image-1-mini",
"supportedSizes": [
"1024x1024",
"1536x1024",
"1024x1536"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": true
},
"gpt-image-1.5": {
"providerId": "OpenAI",
"model": "gpt-image-1.5",
"supportedSizes": [
"1024x1024",
"1536x1024",
"1024x1536"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": true
},
"gpt-image-2": {
"providerId": "OpenAI",
"model": "gpt-image-2",
"supportedSizes": [
"1024x1024",
"1536x1024",
"1024x1536",
"2048x2048"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": true
},
"gemini-2.5-flash-image": {
"providerId": "Google Gemini",
"model": "gemini-2.5-flash-image",
"supportedSizes": [
"1024x1024"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": false
},
"gemini-3.1-flash-image-preview": {
"providerId": "Google Gemini",
"model": "gemini-3.1-flash-image-preview",
"supportedSizes": [
"1024x1024"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": false
},
"gemini-3-pro-image-preview": {
"providerId": "Google Gemini",
"model": "gemini-3-pro-image-preview",
"supportedSizes": [
"1024x1024"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": false
},
"grok-imagine-image-quality": {
"providerId": "xAI",
"model": "grok-imagine-image-quality",
"supportedSizes": [
"1024x1024"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": false
},
"grok-imagine-image-pro": {
"providerId": "xAI",
"model": "grok-imagine-image-pro",
"supportedSizes": [
"1024x1024"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": false
}
},
"aiDefaultTextModel": "gpt-5-mini",
"aiDefaultImageGenerationModel": "gpt-image-1",
"aiDefaultMaxOutgoingTokens": 0,
"aiDefaultMaxResponseTokens": 4096,
"modifierKeyConfig": { "modifierKeyConfig": {
"Mac": { "Mac": {
"LocalFileDragAction": { "LocalFileDragAction": {
@@ -780,7 +948,6 @@
"longPressDesktop": 500, "longPressDesktop": 500,
"longPressMobile": 500, "longPressMobile": 500,
"doubleClickLinkOpenViewMode": true, "doubleClickLinkOpenViewMode": true,
"isDebugMode": false,
"rank": "Bronze", "rank": "Bronze",
"modifierKeyOverrides": [ "modifierKeyOverrides": [
{ {
@@ -813,6 +980,7 @@
"margin": "normal" "margin": "normal"
}, },
"disableContextMenu": false, "disableContextMenu": false,
"isDebugMode": false,
"defaultTrayMode": true, "defaultTrayMode": true,
"compactModeOnTablets": true "compactModeOnTablets": true
} }
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,9 +1,9 @@
{ {
"id": "obsidian-excalidraw-plugin", "id": "obsidian-excalidraw-plugin",
"name": "Excalidraw", "name": "Excalidraw",
"version": "2.21.2", "version": "2.23.3",
"minAppVersion": "1.5.7", "minAppVersion": "1.5.7",
"description": "Sketch Your Mind. An Obsidian plugin to edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.", "description": "Sketch Your Mind. Edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.",
"author": "Zsolt Viczian", "author": "Zsolt Viczian",
"authorUrl": "https://excalidraw-obsidian.online", "authorUrl": "https://excalidraw-obsidian.online",
"fundingUrl": "https://ko-fi.com/zsolt", "fundingUrl": "https://ko-fi.com/zsolt",
File diff suppressed because one or more lines are too long
+220
View File
@@ -0,0 +1,220 @@
{
"choices": [
{
"id": "c31732d3-4333-4aa1-9963-4f2ee5580251",
"name": "日常记录-闪念笔记",
"type": "Template",
"command": false,
"templatePath": "attachment/templates/日常记录-闪念笔记.md",
"fileNameFormat": {
"enabled": true,
"format": "{{DATE:MM月DD日 HHmmss}}"
},
"folder": {
"enabled": false,
"folders": [],
"chooseWhenCreatingNote": false,
"createInSameFolderAsActiveFile": false,
"chooseFromSubfolders": false
},
"appendLink": false,
"openFile": true,
"fileOpening": {
"location": "split",
"direction": "vertical",
"mode": "default",
"focus": true
},
"fileExistsMode": "Increment the file name",
"setFileExistsBehavior": false
},
{
"id": "d9111ada-faa6-4d0f-8260-9c3cb97eade8",
"name": "移动杭研-开发笔记",
"type": "Template",
"command": false,
"templatePath": "attachment/templates/移动杭研-开发笔记.md",
"fileNameFormat": {
"enabled": true,
"format": "开发笔记 {{VALUE:version}}"
},
"folder": {
"enabled": false,
"folders": [],
"chooseWhenCreatingNote": false,
"createInSameFolderAsActiveFile": false,
"chooseFromSubfolders": false
},
"appendLink": false,
"openFile": true,
"fileOpening": {
"location": "split",
"direction": "vertical",
"mode": "default",
"focus": true
},
"fileExistsMode": "Increment the file name",
"setFileExistsBehavior": false
},
{
"id": "9b9829e0-5cb5-4cc1-907c-7eb0626a2c3d",
"name": "移动杭研-问题记录",
"type": "Template",
"command": false,
"templatePath": "attachment/templates/移动杭研-问题记录.md",
"fileNameFormat": {
"enabled": true,
"format": "{{DATE:MMDD}}-{{VALUE:info|{{DATE:HHmmss}}}}"
},
"folder": {
"enabled": false,
"folders": [],
"chooseWhenCreatingNote": false,
"createInSameFolderAsActiveFile": false,
"chooseFromSubfolders": false
},
"appendLink": false,
"openFile": true,
"fileOpening": {
"location": "split",
"direction": "vertical",
"mode": "default",
"focus": true
},
"fileExistsMode": "Increment the file name",
"setFileExistsBehavior": false
},
{
"id": "170cca5b-3037-4b3b-9f1c-82235ecde717",
"name": "打开控制台",
"type": "Macro",
"command": false,
"runOnStartup": false,
"macro": {
"name": "打开控制台",
"id": "244eb44a-c362-440c-a21e-8065a482ab68",
"commands": [
{
"name": "openTerminal",
"type": "UserScript",
"id": "2144335d-f088-4156-a81c-6fb4ab30bf55",
"path": "attachment/scripts/openTerminal.js",
"settings": {}
}
]
}
}
],
"inputPrompt": "single-line",
"persistInputPromptDrafts": true,
"useSelectionAsCaptureValue": true,
"devMode": false,
"templateFolderPath": "attachment/templates",
"announceUpdates": "major",
"version": "2.12.0",
"globalVariables": {},
"onePageInputEnabled": false,
"disableOnlineFeatures": true,
"enableRibbonIcon": false,
"showCaptureNotification": true,
"showInputCancellationNotification": false,
"enableTemplatePropertyTypes": false,
"dateAliases": {
"t": "today",
"tm": "tomorrow",
"yd": "yesterday",
"nw": "next week",
"nm": "next month",
"ny": "next year",
"lw": "last week",
"lm": "last month",
"ly": "last year"
},
"ai": {
"defaultModel": "Ask me",
"defaultSystemPrompt": "As an AI assistant within Obsidian, your primary goal is to help users manage their ideas and knowledge more effectively. Format your responses using Markdown syntax. Please use the [[Obsidian]] link format. You can write aliases for the links by writing [[Obsidian|the alias after the pipe symbol]]. To use mathematical notation, use LaTeX syntax. LaTeX syntax for larger equations should be on separate lines, surrounded with double dollar signs ($$). You can also inline math expressions by wrapping it in $ symbols. For example, use $$w_{ij}^{\text{new}}:=w_{ij}^{\text{current}}+etacdotdelta_jcdot x_{ij}$$ on a separate line, but you can write \"($eta$ = learning rate, $delta_j$ = error term, $x_{ij}$ = input)\" inline.",
"promptTemplatesFolderPath": "",
"showAssistant": true,
"providers": [
{
"name": "OpenAI",
"endpoint": "https://api.openai.com/v1",
"apiKey": "",
"models": [
{
"name": "gpt-3.5-turbo",
"maxTokens": 4096
},
{
"name": "gpt-3.5-turbo-16k",
"maxTokens": 16384
},
{
"name": "gpt-3.5-turbo-1106",
"maxTokens": 16385
},
{
"name": "gpt-4",
"maxTokens": 8192
},
{
"name": "gpt-4-32k",
"maxTokens": 32768
},
{
"name": "gpt-4-1106-preview",
"maxTokens": 128000
},
{
"name": "gpt-4-turbo",
"maxTokens": 128000
},
{
"name": "gpt-4o",
"maxTokens": 128000
},
{
"name": "gpt-4o-mini",
"maxTokens": 128000
}
],
"autoSyncModels": false,
"modelSource": "modelsDev"
},
{
"name": "Gemini",
"endpoint": "https://generativelanguage.googleapis.com",
"apiKey": "",
"models": [
{
"name": "gemini-1.5-pro",
"maxTokens": 1000000
},
{
"name": "gemini-1.5-flash",
"maxTokens": 1000000
},
{
"name": "gemini-1.5-flash-8b",
"maxTokens": 1000000
}
],
"autoSyncModels": false,
"modelSource": "modelsDev"
}
]
},
"migrations": {
"migrateToMacroIDFromEmbeddedMacro": true,
"useQuickAddTemplateFolder": true,
"incrementFileNameSettingMoveToDefaultBehavior": true,
"mutualExclusionInsertAfterAndWriteToBottomOfFile": true,
"setVersionAfterUpdateModalRelease": true,
"addDefaultAIProviders": true,
"removeMacroIndirection": true,
"migrateFileOpeningSettings": true,
"backfillFileOpeningDefaults": true,
"setProviderModelDiscoveryMode": true,
"migrateProviderApiKeysToSecretStorage": true
}
}
File diff suppressed because one or more lines are too long
+12
View File
@@ -0,0 +1,12 @@
{
"id": "quickadd",
"name": "QuickAdd",
"version": "2.12.0",
"minAppVersion": "1.11.4",
"description": "Quickly add new pages or content to your vault.",
"author": "Christian B. B. Houmann",
"authorUrl": "https://bagerbach.com",
"fundingUrl": "https://www.buymeacoffee.com/chhoumann",
"helpUrl": "https://quickadd.obsidian.guide/docs/",
"isDesktopOnly": false
}
File diff suppressed because one or more lines are too long
+211
View File
@@ -0,0 +1,211 @@
{
"recentFiles": [
{
"basename": "Prompt 02 COSMIC 功能过程",
"path": "resource/ai/prompts/cosmic/Prompt 02 COSMIC 功能过程.md"
},
{
"basename": "开发笔记 7.21.0",
"path": "work/移动杭研/开发记录/7.21.0/开发笔记 7.21.0.md"
},
{
"basename": "05月18日 154321 华为、中兴、自研解封禁联调",
"path": "000-inbox/05月18日 154321 华为、中兴、自研解封禁联调.md"
},
{
"basename": "Prompt 01 COSMIC 需求扩写",
"path": "resource/ai/prompts/cosmic/Prompt 01 COSMIC 需求扩写.md"
},
{
"basename": "Prompt 00 COSMIC v1",
"path": "resource/ai/prompts/cosmic/Prompt 00 COSMIC v1.md"
},
{
"basename": "05月19日 154820",
"path": "000-inbox/05月19日 154820.md"
},
{
"basename": "开发笔记 7.20.0",
"path": "work/移动杭研/开发记录/7.20.0/开发笔记 7.20.0.md"
},
{
"basename": "服务器-美国",
"path": "personal/服务器-美国.md"
},
{
"basename": "服务器-香港",
"path": "personal/服务器-香港.md"
},
{
"basename": "试用业务-时长、流量到期",
"path": "work/移动杭研/业务梳理/业务工单/试用业务-时长、流量到期.md"
},
{
"basename": "ubuntu",
"path": "resource/系统/ubuntu.md"
},
{
"basename": "001 大模型启动流程",
"path": "resource/ai/大模型安装笔记/001 大模型启动流程.md"
},
{
"basename": "Hermes 命令 cli",
"path": "resource/ai/Hermes 命令 cli.md"
},
{
"basename": "Hermes",
"path": "resource/ai/Hermes.md"
},
{
"basename": "个人债务测算",
"path": "000-inbox/个人债务测算.md"
},
{
"basename": "Prompt 06 COSMIC 锐评",
"path": "resource/ai/prompts/cosmic/Prompt 06 COSMIC 锐评.md"
},
{
"basename": "Prompt 05 COSMIC 时序图",
"path": "resource/ai/prompts/cosmic/Prompt 05 COSMIC 时序图.md"
},
{
"basename": "Prompt 04 COSMIC PRD 文档",
"path": "resource/ai/prompts/cosmic/Prompt 04 COSMIC PRD 文档.md"
},
{
"basename": "Prompt 03 COSMIC 子过程",
"path": "resource/ai/prompts/cosmic/Prompt 03 COSMIC 子过程.md"
},
{
"basename": "数据库信息",
"path": "work/移动杭研/项目备忘/数据库信息.md"
},
{
"basename": "Hermes 命令 slash",
"path": "resource/ai/Hermes 命令 slash.md"
},
{
"basename": "数据库设计-监控系统",
"path": "excalidraw/工作相关/数据库设计-监控系统.md"
},
{
"basename": "VSCode 配置文件",
"path": "resource/配置/VSCode 配置文件.md"
},
{
"basename": "vim 快捷键与操作手册",
"path": "resource/系统/vim 快捷键与操作手册.md"
},
{
"basename": "openpalm",
"path": "openpalm/openpalm.md"
},
{
"basename": "Claude Code 配置文件",
"path": "resource/配置/Claude Code 配置文件.md"
},
{
"basename": "Codex 配置文件",
"path": "resource/配置/Codex 配置文件.md"
},
{
"basename": "ibs-ai-mcp",
"path": "000-inbox/ibs-ai-mcp.md"
},
{
"basename": "gitleaks.toml",
"path": "resource/工具/gitleaks.toml.md"
},
{
"basename": "ibs-export",
"path": "work/移动杭研/业务梳理/ibs-export.md"
},
{
"basename": "常用命令",
"path": "resource/常用命令.md"
},
{
"basename": "s-ui",
"path": "resource/系统/网络/s-ui.md"
},
{
"basename": "论文系统",
"path": "personal/专升本/毕业论文/论文系统.md"
},
{
"basename": "MCP 学习",
"path": "000-inbox/MCP 学习.md"
},
{
"basename": "labelImg",
"path": "resource/ai/labelImg.md"
},
{
"basename": "月报 202604",
"path": "work/移动杭研/项目备忘/月报 202604.md"
},
{
"basename": "CLAUDE",
"path": "work/移动杭研/AI 项目/CLAUDE.md"
},
{
"basename": "cache+域名配置工单",
"path": "work/移动杭研/业务梳理/运营工单/cache+域名配置工单.md"
},
{
"basename": "IBS 智能体具体落实技术方案",
"path": "work/移动杭研/AI 项目/IBS 智能体具体落实技术方案.md"
},
{
"basename": "AI 工具需求-MCP 请求数统计",
"path": "work/移动杭研/AI 项目/AI 工具需求-MCP 请求数统计.md"
},
{
"basename": "AI 工具需求-命中率计算",
"path": "work/移动杭研/AI 项目/AI 工具需求-命中率计算.md"
},
{
"basename": "图纸-IBS 智能体-v1-流量查询 demo",
"path": "work/移动杭研/AI 项目/图纸-IBS 智能体-v1-流量查询 demo.md"
},
{
"basename": "图纸-IBS 智能体-v1-流量查询 demo 对象存储",
"path": "work/移动杭研/AI 项目/图纸-IBS 智能体-v1-流量查询 demo 对象存储.md"
},
{
"basename": "图纸-IBS 智能体-v2-项目架构 原生 MCP",
"path": "work/移动杭研/AI 项目/图纸-IBS 智能体-v2-项目架构 原生 MCP.md"
},
{
"basename": "图纸-IBS 智能体-v3-项目架构",
"path": "work/移动杭研/AI 项目/图纸-IBS 智能体-v3-项目架构.md"
},
{
"basename": "getHitRatio接口分析",
"path": "work/移动杭研/AI 项目/getHitRatio接口分析.md"
},
{
"basename": "settings.local.json",
"path": "work/移动杭研/AI 项目/settings.local.json.md"
},
{
"basename": "RAG Flow 部署",
"path": "work/移动杭研/AI 项目/RAG Flow 部署.md"
},
{
"basename": "RAG Flow",
"path": "work/移动杭研/AI 项目/RAG Flow.md"
},
{
"basename": "ibs-ai 项目梳理",
"path": "work/移动杭研/AI 项目/ibs-ai 项目梳理.md"
}
],
"omittedPaths": [
"^calendar/",
"^attachment/"
],
"omittedTags": [],
"updateOn": "file-open",
"omitBookmarks": false
}
File diff suppressed because one or more lines are too long
+15
View File
@@ -0,0 +1,15 @@
{
"id": "recent-files-obsidian",
"name": "Recent Files",
"version": "1.7.9",
"minAppVersion": "0.16.3",
"description": "List files by most recently opened.",
"author": "Tony Grosinger",
"authorUrl": "https://grosinger.net",
"isDesktopOnly": false,
"fundingUrl": {
"Github Sponsor": "https://github.com/sponsors/tgrosinger",
"Buy me a Coffee": "https://buymeacoffee.com/tgrosinger",
"Paypal": "https://paypal.me/tgrosinger"
}
}
+34
View File
@@ -0,0 +1,34 @@
.recent-files-file {
.tree-item-spacer {
flex-grow: 1;
}
}
.recent-files-title {
justify-content: flex-start;
align-items: unset;
}
.recent-files-file-delete {
justify-content: right;
display: none;
}
.recent-files-title:hover .recent-files-file-delete {
display: flex;
cursor: var(--cursor);
}
.recent-files-file-delete:hover {
color: var(--nav-item-color-hover);
}
.recent-files-donation {
width: 70%;
margin: 0 auto;
text-align: center;
}
.recent-files-donate-button {
margin: 10px;
}
+1 -3
View File
@@ -23,9 +23,7 @@
], ],
"syntax_highlighting": true, "syntax_highlighting": true,
"syntax_highlighting_mobile": false, "syntax_highlighting_mobile": false,
"enabled_templates_hotkeys": [ "enabled_templates_hotkeys": [],
"attachment/templates/日常记录-闪念笔记.md"
],
"startup_templates": [], "startup_templates": [],
"intellisense_render": 1, "intellisense_render": 1,
"enable_ribbon_icon": true "enable_ribbon_icon": true
File diff suppressed because one or more lines are too long
+9 -3
View File
@@ -1,11 +1,17 @@
{ {
"id": "templater-obsidian", "id": "templater-obsidian",
"name": "Templater", "name": "Templater",
"version": "2.18.1", "version": "2.20.4",
"description": "Create and use templates", "description": "Advanced templating and automation using handlebars-like syntax.",
"minAppVersion": "1.5.0", "minAppVersion": "1.12.2",
"author": "SilentVoid", "author": "SilentVoid",
"authorUrl": "https://github.com/SilentVoid13", "authorUrl": "https://github.com/SilentVoid13",
"fundingUrl": {
"GitHub Sponser (Zachatoo, maintainer)": "https://github.com/sponsors/Zachatoo",
"Ko-fi (Zachatoo, maintainer)": "https://ko-fi.com/zachatoo",
"GitHub Sponser (SilentVoid13, creator)": "https://github.com/sponsors/SilentVoid13",
"Paypal (SilentVoid13, creator)": "https://www.paypal.com/donate?hosted_button_id=U2SRGAFYXT32Q"
},
"helpUrl": "https://silentvoid13.github.io/Templater/", "helpUrl": "https://silentvoid13.github.io/Templater/",
"isDesktopOnly": false "isDesktopOnly": false
} }
+1 -1
View File
@@ -221,6 +221,6 @@ textarea.templater-prompt-input:focus {
} }
li.CodeMirror-hint-active { li.CodeMirror-hint-active {
background: #08f; background: #0088ff;
color: white; color: white;
} }
+2 -2
View File
@@ -10,6 +10,7 @@
"excalidraw-export-padding": "number", "excalidraw-export-padding": "number",
"excalidraw-export-pngscale": "number", "excalidraw-export-pngscale": "number",
"excalidraw-export-embed-scene": "checkbox", "excalidraw-export-embed-scene": "checkbox",
"excalidraw-export-internal-links": "checkbox",
"excalidraw-link-prefix": "text", "excalidraw-link-prefix": "text",
"excalidraw-url-prefix": "text", "excalidraw-url-prefix": "text",
"excalidraw-link-brackets": "checkbox", "excalidraw-link-brackets": "checkbox",
@@ -23,7 +24,6 @@
"excalidraw-autoexport": "text", "excalidraw-autoexport": "text",
"excalidraw-embeddable-theme": "text", "excalidraw-embeddable-theme": "text",
"excalidraw-open-md": "checkbox", "excalidraw-open-md": "checkbox",
"excalidraw-embed-md": "checkbox", "excalidraw-embed-md": "checkbox"
"excalidraw-export-internal-links": "checkbox"
} }
} }
+104 -57
View File
@@ -4,11 +4,26 @@
"type": "split", "type": "split",
"children": [ "children": [
{ {
"id": "0a4507548b25ff58", "id": "64438af04f4b395c",
"type": "tabs", "type": "tabs",
"children": [ "children": [
{ {
"id": "1184ee15ec1fc896", "id": "7642168f74ef821a",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "resource/ai/Hermes 命令 cli.md",
"mode": "source",
"source": false,
"backlinks": false
},
"icon": "lucide-file",
"title": "Hermes 命令 cli"
}
},
{
"id": "6fa615aca5f7108e",
"type": "leaf", "type": "leaf",
"state": { "state": {
"type": "markdown", "type": "markdown",
@@ -23,22 +38,37 @@
} }
}, },
{ {
"id": "c3b31f156a70117f", "id": "e366a44a66017faf",
"type": "leaf", "type": "leaf",
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "000-inbox/2026-03-29_16-52-52.md", "file": "personal/服务器-美国.md",
"mode": "source", "mode": "source",
"source": false, "source": false,
"backlinks": false "backlinks": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "2026-03-29_16-52-52" "title": "服务器-美国"
}
},
{
"id": "3e12e0f7fca28148",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "calendar/diary/2026-05-19.md",
"mode": "source",
"source": false,
"backlinks": false
},
"icon": "lucide-file",
"title": "2026-05-19"
} }
} }
], ],
"currentTab": 1 "currentTab": 3
} }
], ],
"direction": "vertical" "direction": "vertical"
@@ -50,6 +80,7 @@
{ {
"id": "6836caf2765d7139", "id": "6836caf2765d7139",
"type": "tabs", "type": "tabs",
"dimension": 73.04860088365243,
"children": [ "children": [
{ {
"id": "c8718c0c63702202", "id": "c8718c0c63702202",
@@ -70,7 +101,7 @@
"state": { "state": {
"type": "search", "type": "search",
"state": { "state": {
"query": "file:香港", "query": "file: ubu",
"matchingCase": false, "matchingCase": false,
"explainSearch": true, "explainSearch": true,
"collapseAll": false, "collapseAll": false,
@@ -92,10 +123,27 @@
} }
} }
] ]
},
{
"id": "2184ba625789cef2",
"type": "tabs",
"dimension": 26.95139911634757,
"children": [
{
"id": "910ff34a625157e6",
"type": "leaf",
"state": {
"type": "recent-files",
"state": {},
"icon": "clock",
"title": "Recent files"
}
}
]
} }
], ],
"direction": "horizontal", "direction": "horizontal",
"width": 255.5 "width": 261.5
}, },
"right": { "right": {
"id": "ca733f6d5936ae40", "id": "ca733f6d5936ae40",
@@ -112,13 +160,13 @@
"state": { "state": {
"type": "outline", "type": "outline",
"state": { "state": {
"file": "000-inbox/2026-03-29_16-52-52.md", "file": "calendar/diary/2026-05-19.md",
"followCursor": true, "followCursor": true,
"showSearch": false, "showSearch": false,
"searchQuery": "" "searchQuery": ""
}, },
"icon": "lucide-list", "icon": "lucide-list",
"title": "2026-03-29_16-52-52 的大纲" "title": "2026-05-19 的大纲"
} }
}, },
{ {
@@ -213,7 +261,7 @@
} }
], ],
"direction": "horizontal", "direction": "horizontal",
"width": 281.5 "width": 291.5
}, },
"left-ribbon": { "left-ribbon": {
"hiddenItems": { "hiddenItems": {
@@ -223,58 +271,57 @@
"daily-notes:打开/创建今天的日记": false, "daily-notes:打开/创建今天的日记": false,
"canvas:新建白板": false, "canvas:新建白板": false,
"bases:新建数据库": false, "bases:新建数据库": false,
"obsidian-excalidraw-plugin:New drawing": false, "templater-obsidian:Templater": true,
"templater-obsidian:Templater": false "obsidian-excalidraw-plugin:新建绘图文件": false
} }
}, },
"active": "c3b31f156a70117f", "active": "c8718c0c63702202",
"lastOpenFiles": [ "lastOpenFiles": [
"000-inbox/2026-03-29_16-51-46.md", "resource/ai/prompts/cosmic/Prompt 02 COSMIC 功能过程.md",
"work/移动杭研/开发记录/7.21.0/开发笔记 7.21.0.md",
"000-inbox/05月18日 154321 华为、中兴、自研解封禁联调.md",
"attachment/Pasted image 20260519174702.png",
"calendar/diary/2026-05-19.md",
"attachment/Pasted image 20260519170953.png",
"attachment/Pasted image 20260519170006.png",
"attachment/Pasted image 20260519163906.png",
"attachment/Pasted image 20260519163145.png",
"resource/ai/prompts/cosmic/Prompt 01 COSMIC 需求扩写.md",
"resource/ai/prompts/cosmic/Prompt 00 COSMIC v1.md",
"000-inbox/05月19日 154820.md",
"attachment/Pasted image 20260519140133.png",
"calendar/diary/2026-05-18.md",
"work/移动杭研/开发记录/7.20.0/开发笔记 7.20.0.md",
"personal/服务器-美国.md",
"personal/服务器-香港.md", "personal/服务器-香港.md",
"000-inbox/2026-03-30_20-38-38.md", "calendar/diary/2026-05-17.md",
"calendar/weeks/2026-W20.md",
"calendar/diary/2026-05-16.md",
"calendar/diary/2026-05-15.md",
"calendar/diary/2026-05-14.md",
"calendar/diary/2026-05-13.md",
"calendar/diary/2026-05-12.md",
"calendar/diary/2026-05-11.md",
"work/移动杭研/业务梳理/业务工单/试用业务-时长、流量到期.md",
"calendar/diary/2025年/2025-12-30.md",
"resource/系统/ubuntu.md", "resource/系统/ubuntu.md",
"resource/ai/大模型安装笔记/关于模型思考问题.md", "resource/ai/大模型安装笔记/001 大模型启动流程.md",
"000-inbox/n8n 安装.md", "attachment/b0a6584f6636a36fa59bd0c5054c8c97.png",
"000-inbox/2026-03-29_16-55-23.md", "resource/ai/Hermes 命令 cli.md",
"000-inbox/2026-03-29_22-08-03.md", "resource/ai/Hermes.md",
"000-inbox/2026-03-29_16-52-52.md", "attachment/Pasted image 20260513222338.png",
"attachment/Pasted image 20260329165253.png", "attachment/7e1e741c766535189b32065c7a64eac1.png",
"000-inbox/2026-03-291.md", "attachment/Pasted image 20260512224844.png",
"000-inbox/2026-03-291111111111111111111.md", "work/移动杭研/开发记录/7.21.0",
"000-inbox/2026-03-2911.md", "openpalm",
"000-inbox/202603292037501.md", "resource/rust",
"attachment/templates/time.md", "kids-coding",
"000-inbox/2026-03-29_19-37-09.md", "resource/python",
"000-inbox/2026-03-29_17-01-36.md", "work/移动杭研/问题处理/2026-04",
"attachment/Pasted image 20260329170137.png", "work/移动杭研/开发记录/7.20.0",
"attachment/Pasted image 20260329165321.png", "attachment/scripts/openTerminal.js",
"attachment/Pasted image 20260329165301.png", "attachment/scripts",
"attachment/templates/日常记录-闪念笔记.md",
"resource/go/待总结/010 Go 语言 IO 流.md",
"attachment/images-paste/image-20230226203841579.png",
"attachment/templates/打开控制台.md",
"attachment/templates/移动杭研-开发笔记.md",
"attachment/templates/移动杭研-问题记录.md",
"calendar/diary/2026-03-29.md",
"attachment/templates/查找未引用图片.md",
"calendar/diary/2026-03-28.md",
"calendar/diary/2026-03-27.md",
"000-inbox/Untitled 2.md",
"attachment/Pasted image 20260329133947.png",
"attachment/jsscripts/openTerminal.js", "attachment/jsscripts/openTerminal.js",
"attachment/jsscripts/新建文本文档.txt",
"attachment/jsscripts",
"attachment/images-paste/image-20260325102650978.png",
"attachment/images-paste/image-20260325224014579.png",
"attachment/images-paste/image-20260325224132102.png",
"attachment/images-paste/image-20260325224152205.png",
"resource/ai/大模型安装笔记",
"work/移动杭研/问题处理/2026-03",
"resource/ai/prompts/cosmic 业务版本",
"resource/ai/prompts/cosmic",
"resource/ai/prompts/临时",
"resource/工具/rime",
"work/移动杭研/开发记录/7.19.0",
"000-inbox/未命名.canvas" "000-inbox/未命名.canvas"
] ]
} }
@@ -0,0 +1,100 @@
# 华为
```
http://test.okkc.top/heb.jpg
http://test.okkc.top/nmgdx.jpg
http://test.okkc.top/wkc.png
```
## 封禁
### 下发
```
2026-05-18 08:38:46 [e694222eb3c14d19] [e694222eb3c14d19] [] [ibs-portal] [http-nio-8080-exec-9] INFO com.cmcc.cdn.platform.selfservice.service.impl.URLBanLiftServiceImpl 104 urlBanOrLift - URL封禁/解封下发配管参数:{"cp_id":"83537947","operate":0,"task_id":"WG_84e454ab445df9ad78bdecf7a2c6c","urls":[{"areas":["ZJ"],"forbid_share_cache":false,"method":"exact","plain":[1],"url":"http://test.okkc.top/heb.jpg"}]}
2026-05-18 08:38:47 [e694222eb3c14d19] [e694222eb3c14d19] [] [ibs-portal] [http-nio-8080-exec-9] INFO com.cmcc.cdn.platform.selfservice.service.impl.URLBanLiftServiceImpl 106 urlBanOrLift - 向统一网管下发URL封禁/解禁返回参数e{"error_code":0,"error_msg":"success"}
```
### 回调
```
2026-05-19 08:38:29 [5af0086375c91839] [5af0086375c91839] [] [ibs-portal] [http-nio-8080-exec-3] INFO com.cmcc.cdn.platform.selfservice.controller.OmsApiDomainController 1466 urlBanLiftCallback - 统一网管URL封禁/解禁回调参数,urlBanLiftCallBackVO:{"tasks":[{"operate":0,"status":1,"task_id":"WG_84e454ab445df9ad78bdecf7a2c6c"}]}
```
## 解禁
### 下发
```
2026-05-19 08:58:13 [40cc38f9c31c4b22] [40cc38f9c31c4b22] [] [ibs-portal] [http-nio-8080-exec-7] INFO com.cmcc.cdn.platform.selfservice.service.impl.URLBanLiftServiceImpl 104 urlBanOrLift - URL封禁/解封下发配管参数:{"cp_id":"83537947","operate":1,"task_id":"WG_af52d3c8f4890ae8c313c68b84d27","urls":[{"areas":["ZJ"],"forbid_share_cache":false,"method":"exact","plain":[1],"url":"http://test.okkc.top/heb.jpg"}]}
2026-05-19 08:58:13 [40cc38f9c31c4b22] [40cc38f9c31c4b22] [] [ibs-portal] [http-nio-8080-exec-7] INFO com.cmcc.cdn.platform.selfservice.service.impl.URLBanLiftServiceImpl 106 urlBanOrLift - 向统一网管下发URL封禁/解禁返回参数e{"error_code":0,"error_msg":"success"}
```
### 回调
```
2026-05-19 09:04:29 [5e61bcc746cd302d] [5e61bcc746cd302d] [] [ibs-portal] [http-nio-8080-exec-3] INFO com.cmcc.cdn.platform.selfservice.controller.OmsApiDomainController 1466 urlBanLiftCallback - 统一网管URL封禁/解禁回调参数,urlBanLiftCallBackVO:{"tasks":[{"operate":1,"status":1,"task_id":"WG_af52d3c8f4890ae8c313c68b84d27"}]}
```
## 多 URL
### 下发
```
2026-05-19 09:09:36 [09b677d484384b4f] [09b677d484384b4f] [] [ibs-portal] [http-nio-8080-exec-8] INFO com.cmcc.cdn.platform.selfservice.service.impl.URLBanLiftServiceImpl 104 urlBanOrLift - URL封禁/解封下发配管参数:{"cp_id":"83537947","operate":0,"task_id":"WG_0a4e9ca06497b883ab2c1435851f0","urls":[{"areas":["ZJ"],"forbid_share_cache":false,"method":"exact","plain":[1],"url":"http://test.okkc.top/nmgdx.jpg"},{"areas":["ZJ"],"forbid_share_cache":false,"method":"exact","plain":[1],"url":"http://test.okkc.top/wkc.png"}]}
2026-05-19 09:09:36 [09b677d484384b4f] [09b677d484384b4f] [] [ibs-portal] [http-nio-8080-exec-8] INFO com.cmcc.cdn.platform.selfservice.service.impl.URLBanLiftServiceImpl 106 urlBanOrLift - 向统一网管下发URL封禁/解禁返回参数e{"error_code":0,"error_msg":"success"}
```
### 回调
```
2026-05-19 09:14:29 [3df12b80589f53fa] [3df12b80589f53fa] [] [ibs-portal] [http-nio-8080-exec-2] INFO com.cmcc.cdn.platform.selfservice.service.impl.URLBanLiftServiceImpl 164 urlBanLiftUpdate - URL封禁/解封回调参数:param{"tasks":[{"operate":0,"status":1,"task_id":"WG_0a4e9ca06497b883ab2c1435851f0"}]}
```
![](../attachment/Pasted%20image%2020260519170953.png)
# 中兴
```
https://sms-drcn.hihonorcdn.com/sms/20260512_1778575271708/patch_20260512161.zip
https://push.hihonorcdn.com/103412129/95ec15bc36347c636815599f863438ac1.png
```
## 下发
```
2026-05-19 09:51:54 [37d64e05cd954f5e] [37d64e05cd954f5e] [] [ibs-portal] [http-nio-8080-exec-7] INFO com.cmcc.cdn.platform.selfservice.service.impl.URLBanLiftServiceImpl 104 urlBanOrLift - URL封禁/解封下发配管参数:{"cp_id":"83537947","operate":0,"task_id":"WG_20cb8e5274608a97651b261e07491","urls":[{"areas":["ZJ"],"forbid_share_cache":false,"method":"exact","plain":[2],"url":"https://sms-drcn.hihonorcdn.com/sms/20260512_1778575271708/patch_20260512161.zip"},{"areas":["ZJ"],"forbid_share_cache":false,"method":"exact","plain":[2],"url":"https://push.hihonorcdn.com/103412129/95ec15bc36347c636815599f863438ac1.png"}]}
2026-05-19 09:51:54 [37d64e05cd954f5e] [37d64e05cd954f5e] [] [ibs-portal] [http-nio-8080-exec-7] INFO com.cmcc.cdn.platform.selfservice.service.impl.URLBanLiftServiceImpl 106 urlBanOrLift - 向统一网管下发URL封禁/解禁返回参数e{"error_code":0,"error_msg":"success"}
```
## 回调
```
2026-05-19 09:52:29 [cb930538344a7daf] [cb930538344a7daf] [] [ibs-portal] [http-nio-8080-exec-9] INFO com.cmcc.cdn.platform.selfservice.controller.OmsApiDomainController 1466 urlBanLiftCallback - 统一网管URL封禁/解禁回调参数,urlBanLiftCallBackVO:{"tasks":[{"operate":0,"status":0,"task_id":"WG_20cb8e5274608a97651b261e07491"}]}
```
## 下发
```
2026-05-19 09:54:10 [6723e252542e4d27] [6723e252542e4d27] [] [ibs-portal] [http-nio-8080-exec-10] INFO com.cmcc.cdn.platform.selfservice.service.impl.URLBanLiftServiceImpl 104 urlBanOrLift - URL封禁/解封下发配管参数:{"cp_id":"83537947","operate":1,"task_id":"WG_364e5c36c43e9bd58c96151f66bbc","urls":[{"areas":["ZJ"],"forbid_share_cache":false,"method":"exact","plain":[2],"url":"https://sms-drcn.hihonorcdn.com/sms/20260512_1778575271708/patch_20260512161.zip"},{"areas":["ZJ"],"forbid_share_cache":false,"method":"exact","plain":[2],"url":"https://push.hihonorcdn.com/103412129/95ec15bc36347c636815599f863438ac1.png"}]}
2026-05-19 09:54:10 [6723e252542e4d27] [6723e252542e4d27] [] [ibs-portal] [http-nio-8080-exec-10] INFO com.cmcc.cdn.platform.selfservice.service.impl.URLBanLiftServiceImpl 106 urlBanOrLift - 向统一网管下发URL封禁/解禁返回参数e{"error_code":0,"error_msg":"success"}
```
## 回调
```
2026-05-19 09:54:29 [873eaa002f421e4b] [873eaa002f421e4b] [] [ibs-portal] [http-nio-8080-exec-2] INFO com.cmcc.cdn.platform.selfservice.controller.OmsApiDomainController 1466 urlBanLiftCallback - 统一网管URL封禁/解禁回调参数,urlBanLiftCallBackVO:{"tasks":[{"operate":1,"status":0,"task_id":"WG_364e5c36c43e9bd58c96151f66bbc"}]}
```
![](../attachment/Pasted%20image%2020260519174702.png)
# 自研
```
http://yanlian.e.cdn.chinamobile.com/video.ts
http://yanlian.e.cdn.chinamobile.com/intro.html
http://yanlian.e.cdn.chinamobile.com/image.jpg
http://yanlian.e.cdn.chinamobile.com/index.html
```
+78
View File
@@ -0,0 +1,78 @@
我梳理了一下,这块是“URL 封禁/解封”能力,入口是 [ProhibitionController.java](D:/MyCode/Work/yd-hy/ibs-portal/cdn-web/src/main/java/com/cmcc/cdn/platform/selfservice/controller/ProhibitionController.java:217) 的 `POST /api/url/ban`,回调是 [OmsApiDomainController.java](D:/MyCode/Work/yd-hy/ibs-portal/cdn-web/src/main/java/com/cmcc/cdn/platform/selfservice/controller/OmsApiDomainController.java:1462) 的 `POST /action?commandType=banCallBack&version=1`
**主流程**
`/api/url/ban` 根据两个配置开关分流:
`WG_TOTAL_SWITCH=true`,或当前企业在 `WG_ENTERPRISE_ID_SWITCH` 里时,走统一网管新链路:
1. 从请求头 `Tenant-Id` 查企业。
2. 把 `URLDenyAllowTaskVO.urls` 转成统一网管 `UrlBanLiftTaskVO.urls`
3. 校验 URL、域名归属、操作类型、重复封禁等。
4. 生成 `WG_` 开头的 `taskId`
5. 调统一网管/BPM`bpmService.urlBanOrLiftOperate(…)`
6. 下发成功后落库,返回 `taskId`
不命中开关时,走旧链路:
1. 生成 `WS_` 开头的 `itemId`
2. 校验 URL、域名归属、操作类型、重复封禁等。
3. 调旧配管/各平面下发。
4. 落库任务、URL 明细、配管记录、平面下发记录。
**统一网管新链路写入的表**
在 [URLBanLiftServiceImpl.java](D:/MyCode/Work/yd-hy/ibs-portal/cdn-service/src/main/java/com/cmcc/cdn/platform/selfservice/service/impl/URLBanLiftServiceImpl.java:76) 里,下发成功后写:
- `ban_lift_task`
对应实体 `NetworkURLBanLiftTask`。记录任务主表:`task_id``cp_id``operate`
- `ban_lift_url`
对应实体 `NetworkBanLiftURL`。记录每个 URL`url``task_id``areas``method``forbid_share_cache``operate``status``start_time`。初始 `status=11`,表示进行中。
- `ban_lift_task_url`
`ban_lift_task``ban_lift_url` 的关联表。
统一网管链路下发失败时,代码里没有保存这几张表,只返回失败。
**旧链路写入的表**
旧链路在 [ProhibitionServiceImpl.java](D:/MyCode/Work/yd-hy/ibs-portal/cdn-service/src/main/java/com/cmcc/cdn/platform/selfservice/service/impl/ProhibitionServiceImpl.java:253) 的 `pipeUrlDenyAllowed` 里写:
- `deny_allow_task`
任务主表,记录 `item_id``type``status``start_time``cp_id``task_state` 等。
- `deny_allow_url`
URL 明细表,记录 `url``domain``method``areas`
- `deny_allow_task_url`
任务和 URL 的关联表。
- `pipe_config_entity`
配管消息记录,保存 `message_id``target_name=itemId``type=WANG_SU_DENY/WANG_SU_DENY_RESET` 等,用于后续配管回调匹配。
- `ban_or_filter_record`
平面下发记录,保存 `task_id``distribution_plane``success_plane``error_plane``reason``urls``type=ban/unban`
另外,旧链路会更新 Redis 里的企业每日操作次数限制,不是数据库表。
**统一网管回调改哪些表**
你贴的 `banCallBack` 回调只处理统一网管新链路。逻辑在 [URLBanLiftServiceImpl.java](D:/MyCode/Work/yd-hy/ibs-portal/cdn-service/src/main/java/com/cmcc/cdn/platform/selfservice/service/impl/URLBanLiftServiceImpl.java:163)
1. 按回调里的 `taskId``ban_lift_task`
2. 找到该任务下所有 `ban_lift_url`
3. 更新每条 URL 的:
- `status`
- `operate`
- `start_time`
- `end_time`
4. 再通过 `urlBanLiftTaskDao.save(networkURLBanLiftTask)` 保存。
所以业务上主要修改的是:
- `ban_lift_url`
同时因为是通过父对象 `ban_lift_task` 保存,JPA 可能会触发 `ban_lift_task.updated_time` 更新;但任务主表没有业务字段被主动改,关联表 `ban_lift_task_url` 也不会变。
旧链路的回调不是这个接口,它会更新 `deny_allow_task``success_rate``end_time``status``task_state`;但你贴的 `banCallBack` 不会改 `deny_allow_task`
-9
View File
@@ -1,9 +0,0 @@
![](../attachment/Pasted%20image%2020260329165253.png)
![](../attachment/Pasted%20image%2020260329165301.png)
![](../attachment/Pasted%20image%2020260329165321.png)
```
MPLkv5dlbyKh_q0DdvH5ECxaUHVr5BVg0Ogf5AOH
```
-3
View File
@@ -1,3 +0,0 @@
![](../attachment/Pasted%20image%2020260329170137.png)
2026-01-13 21:46
+77
View File
@@ -0,0 +1,77 @@
MCP 协议的实现,可以有2种方式,
1. stdio,把 jar 提供出去,别人本地配置引入即可使用,但这样的方式不太适合做统一网关服务。
2. sse
项目采用 [DDD](DDD.md) 架构,首先聚焦 domain 层。
### 会话管理服务
```java
private final ScheduledExecutorService cleanupScheduler = Executors.newSingleThreadScheduledExecutor();
```
其中 private 说明这个变量这能在类内部访问,声明为 final 则此变量只能赋值一次。`newSingleThreadScheduledExecutor` 代表只有一个工作线程。
> 一个带有定时功能的单线程定时队列。
```java
private final Map<String, SessionConfigVO> activeSessions = new ConcurrentHashMap<>();
```
考虑点在于这个会话是否会被多个线程操作处理。
```java
public SessionManagementService() {
cleanupScheduler.scheduleAtFixedRate(this::cleanupExpiredSessions, 5, 5, TimeUnit.MINUTES);
log.info("会话管理服务已启动,会话超时时间: {} 分钟", SESSION_TIMEOUT_MINUTES);
}
```
可以在构造中执行一些方法。
### 实时通讯
> 对立面轮训
SSEServer sent Events
基于普通的 HTTP 长连接,Content-type: text/event-stream
消息格式,每条消息以 \n\n 结尾,
![](../attachment/images-paste/Pasted%20image%2020260413135806.png)
```
SSE(协议)
需要一个好的服务器框架来实现它
Spring WebFlux(响应式 Web 框架) ← 最适合实现 SSE 的框架
因为它是响应式(非阻塞),非常适合长连接
在 WebFlux 里,用 Sinks + Flux<ServerSentEvent> 来产生和推送 SSE 事件
```
```
客户端发起 SSE 请求
Netty EventLoop 接收请求(线程A
Controller 返回 sink.asFlux() → 注册“有新事件时推送”的回调
线程A 立刻释放,去处理其他请求
...(连接保持打开,线程A 忙别的)
你的服务层调用 sink.tryEmitNext(新消息)
Reactor 通知 Netty:“这个连接有数据要写”
EventLoop 线程(可能是线程B)被唤醒
执行回调:把消息转成 "data: xxx\n\n" 格式 → 写入 Socket
写完后,线程B 立刻释放,继续干别的
```
+30
View File
@@ -0,0 +1,30 @@
| 方法 | 接口名称 | 入参描述 | 一句话作用 |
| ------ | ----------------------------------------------- | ------------------------------------------------ | ---------------------- |
| GET | `/api/mcp-tools` | `toolGroupId``displayName``pageNum``pageSize` | 分页查询动态工具列表 |
| GET | `/api/mcp-tools/{id}` | 工具 ID | 查询动态工具详情 |
| POST | `/api/mcp-tools` | `McpToolRequest` | 创建动态工具并注册到 MCP Server |
| PUT | `/api/mcp-tools/{id}` | 工具 ID、`McpToolRequest` | 更新动态工具并重新注册 |
| DELETE | `/api/mcp-tools/{id}` | 工具 ID | 删除动态工具并从 MCP Server 移除 |
| POST | `/api/mcp-tools/{id}/toggle` | 工具 ID | 启用或禁用动态工具 |
| POST | `/api/mcp-tools/{id}/tool-groups/{groupId}` | 工具 ID、工具组 ID | 将工具绑定到工具组 |
| DELETE | `/api/mcp-tools/{id}/tool-groups/{groupId}` | 工具 ID、工具组 ID | 解除工具与工具组绑定 |
| | | | |
| GET | `/api/tool-groups` | `pageNum``pageSize` | 分页查询工具组列表 |
| GET | `/api/tool-groups/{id}` | 工具组 ID | 查询工具组详情 |
| GET | `/api/tool-groups/{id}/tools` | 工具组 ID、`displayName` | 查询工具组关联的全部工具 |
| POST | `/api/tool-groups` | `McpToolGroupRequest` | 创建工具组并生成 API Key |
| PUT | `/api/tool-groups/{id}` | 工具组 ID、`McpToolGroupRequest` | 更新工具组名称或描述 |
| DELETE | `/api/tool-groups/{id}` | 工具组 ID | 删除工具组并解除相关关联 |
| POST | `/api/tool-groups/{id}/toggle` | 工具组 ID | 启用或禁用工具组 |
| POST | `/api/tool-groups/{id}/reset-api-key` | 工具组 ID | 重置工具组 API Key |
| | | | |
| GET | `/api/roles` | `pageNum``pageSize` | 分页查询角色列表 |
| GET | `/api/roles/{id}` | 角色 ID | 查询角色详情 |
| POST | `/api/roles` | `RoleRequest` | 创建角色并生成角色 Key |
| PUT | `/api/roles/{id}` | 角色 ID、`RoleRequest` | 更新角色名称或描述 |
| DELETE | `/api/roles/{id}` | 角色 ID | 删除角色并解除工具组关联 |
| POST | `/api/roles/{id}/toggle` | 角色 ID | 启用或禁用角色 |
| POST | `/api/roles/{id}/reset-key` | 角色 ID | 重置角色 Key |
| GET | `/api/roles/{id}/tool-groups` | 角色 ID | 查询角色可用工具组 |
| POST | `/api/roles/tool-groups` | `roleId``toolGroupId` | 给角色关联工具组 |
| DELETE | `/api/roles/{roleId}/tool-groups/{toolGroupId}` | 角色 ID、工具组 ID | 移除角色的工具组关联 |
-3
View File
@@ -1,3 +0,0 @@
```
{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='') %}{%- for message in messages %}{%- if message['role'] == 'system' %}{% set ns.system_prompt = message['content'] %}{%- endif %}{%- endfor %}{{bos_token}}{{ns.system_prompt}}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{{'<User>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is none %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls']%}{%- if not ns.is_first %}{{'<Assistant><tool▁calls▁begin><tool▁call▁begin>' + tool['type'] + '<tool▁sep>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<tool▁call▁end>'}}{%- set ns.is_first = true -%}{%- else %}{{'\\n' + '<tool▁call▁begin>' + tool['type'] + '<tool▁sep>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<tool▁call▁end>'}}{{'<tool▁calls▁end><end▁of▁sentence>'}}{%- endif %}{%- endfor %}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is not none %}{%- if ns.is_tool %}{{'<tool▁outputs▁end>' + message['content'] + '<end▁of▁sentence>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{% if '</think>' in content %}{% set content = message['content'].replace('</think>', '').split('<think>')[-1] %}{% endif %}{{'<Assistant>' + content + '<end▁of▁sentence>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<tool▁outputs▁begin><tool▁output▁begin>' + message['content'] + '<tool▁output▁end>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\\n<tool▁output▁begin>' + message['content'] + '<tool▁output▁end>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<tool▁outputs▁end>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<Assistant>'}}{% endif %}
```
+37
View File
@@ -0,0 +1,37 @@
```java
package cn.bugstack.ai.infrastructure.gateway;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.HeaderMap;
import retrofit2.http.POST;
import retrofit2.http.QueryMap;
import retrofit2.http.Url;
import java.util.Map;
/**
* 资料:<a href="https://bugstack.cn/md/road-map/http.html">HTTP 框架案例</a>
*/
public interface GenericHttpGateway {
@POST
Call<ResponseBody> post(
@Url String url,
@HeaderMap Map<String, Object> headers,
@Body RequestBody body
);
@GET
Call<ResponseBody> get(
@Url String url,
@HeaderMap Map<String, Object> headers,
@QueryMap Map<String, Object> queryParams
);
}
```
-20
View File
@@ -1,20 +0,0 @@
```
telegrambots 相关源码路径:D:\MyCode\Study\TelegramBots
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots-longpolling</artifactId>
<version>${telegrambots.version}</version>
</dependency>
因为我是 Spring Boot 项目,那这里是不是用官方推荐的 telegrambots-springboot-longpolling-starter 更方便呢?
现在请帮我实现一个最基础的机器人的功能:
1. 双向机器人的功能,当有人给这个机器人发消息的时候,可以通知到我。可以参考下比较成熟的双项机器人实现的手段。
2. 给我提供一个前台页面,让我可以在上面发布通知,使得所有使用我这个机器人的用户都能收到消息
```
```
7786028912:AAGxQ1jmD4a7j6k-KGsSainVpsFGplSXp-0
```
Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 637 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 962 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 683 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 343 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 637 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 588 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 512 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 704 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 368 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 625 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 909 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 520 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 499 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 643 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 679 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 348 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Some files were not shown because too many files have changed in this diff Show More