mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-22 00:05:51 +00:00
feat: 注册内建 weixin channel 插件
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -14,10 +14,11 @@
|
|||||||
* 2. Call registerBuiltinPlugin() with the plugin definition here
|
* 2. Call registerBuiltinPlugin() with the plugin definition here
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { registerWeixinBuiltinPlugin } from './weixin.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize built-in plugins. Called during CLI startup.
|
* Initialize built-in plugins. Called during CLI startup.
|
||||||
*/
|
*/
|
||||||
export function initBuiltinPlugins(): void {
|
export function initBuiltinPlugins(): void {
|
||||||
// No built-in plugins registered yet — this is the scaffolding for
|
registerWeixinBuiltinPlugin()
|
||||||
// migrating bundled skills that should be user-toggleable.
|
|
||||||
}
|
}
|
||||||
|
|||||||
21
src/plugins/bundled/weixin.ts
Normal file
21
src/plugins/bundled/weixin.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import { registerBuiltinPlugin } from '../builtinPlugins.js'
|
||||||
|
import { buildCliLaunch } from '../../utils/cliLaunch.js'
|
||||||
|
|
||||||
|
export function registerWeixinBuiltinPlugin(): void {
|
||||||
|
const launch = buildCliLaunch(['weixin', 'serve'])
|
||||||
|
|
||||||
|
registerBuiltinPlugin({
|
||||||
|
name: 'weixin',
|
||||||
|
description:
|
||||||
|
'WeChat channel integration. Enables inbound WeChat messages via channels and provides reply/send_typing MCP tools. Configure with `ccb weixin login` and enable for a session with `--channels plugin:weixin@builtin`.',
|
||||||
|
version: MACRO.VERSION,
|
||||||
|
defaultEnabled: true,
|
||||||
|
mcpServers: {
|
||||||
|
weixin: {
|
||||||
|
type: 'stdio',
|
||||||
|
command: launch.execPath,
|
||||||
|
args: launch.args,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
17
src/services/mcp/__tests__/channelAllowlist.test.ts
Normal file
17
src/services/mcp/__tests__/channelAllowlist.test.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { describe, expect, mock, test } from 'bun:test'
|
||||||
|
|
||||||
|
mock.module('../../analytics/growthbook.js', () => ({
|
||||||
|
getFeatureValue_CACHED_MAY_BE_STALE: () => [],
|
||||||
|
}))
|
||||||
|
|
||||||
|
import { isChannelAllowlisted } from '../channelAllowlist.js'
|
||||||
|
|
||||||
|
describe('isChannelAllowlisted', () => {
|
||||||
|
test('allows builtin weixin plugin', () => {
|
||||||
|
expect(isChannelAllowlisted('weixin@builtin')).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('rejects undefined plugin source', () => {
|
||||||
|
expect(isChannelAllowlisted(undefined)).toBe(false)
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { z } from 'zod/v4'
|
import { z } from 'zod/v4'
|
||||||
|
import { BUILTIN_MARKETPLACE_NAME } from '../../plugins/builtinPlugins.js'
|
||||||
import { lazySchema } from '../../utils/lazySchema.js'
|
import { lazySchema } from '../../utils/lazySchema.js'
|
||||||
import { parsePluginIdentifier } from '../../utils/plugins/pluginIdentifier.js'
|
import { parsePluginIdentifier } from '../../utils/plugins/pluginIdentifier.js'
|
||||||
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../analytics/growthbook.js'
|
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../analytics/growthbook.js'
|
||||||
@@ -68,6 +69,9 @@ export function isChannelAllowlisted(
|
|||||||
if (!pluginSource) return false
|
if (!pluginSource) return false
|
||||||
const { name, marketplace } = parsePluginIdentifier(pluginSource)
|
const { name, marketplace } = parsePluginIdentifier(pluginSource)
|
||||||
if (!marketplace) return false
|
if (!marketplace) return false
|
||||||
|
if (marketplace === BUILTIN_MARKETPLACE_NAME && name === 'weixin') {
|
||||||
|
return true
|
||||||
|
}
|
||||||
return getChannelAllowlist().some(
|
return getChannelAllowlist().some(
|
||||||
e => e.plugin === name && e.marketplace === marketplace,
|
e => e.plugin === name && e.marketplace === marketplace,
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user