@lark-project/openclaw-lark-project 2026.3.170 → 2026.3.171

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -67,7 +67,7 @@ import { parseMessageEvent } from "./src/messaging/inbound/parse.js";
67
67
  import { checkMessageGate } from "./src/messaging/inbound/gate.js";
68
68
  import { isMessageExpired } from "./src/messaging/inbound/dedup.js";
69
69
  const plugin = {
70
- id: "feishu-openclaw-plugin",
70
+ id: "openclaw-lark-project",
71
71
  name: "Feishu",
72
72
  description: "Lark/Feishu channel plugin with im/doc/wiki/drive/task/calendar tools",
73
73
  configSchema: emptyPluginConfigSchema(),
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../index.ts"],
4
- "sourcesContent": ["/**\n * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n *\n * OpenClaw Lark/Feishu plugin entry point.\n *\n * Registers the Feishu channel and all tool families:\n * doc, wiki, drive, perm, bitable, task, calendar.\n */\n\nimport type { OpenClawPluginApi } from 'openclaw/plugin-sdk';\nimport { emptyPluginConfigSchema } from 'openclaw/plugin-sdk';\nimport { feishuPlugin } from './src/channel/plugin';\nimport { LarkClient } from './src/core/lark-client';\nimport { registerOapiTools } from './src/tools/oapi/index';\nimport { registerFeishuMcpDocTools } from './src/tools/mcp/doc/index';\nimport { registerFeishuMcpProjectTools } from './src/tools/mcp/project/index';\nimport { registerFeishuOAuthTool } from './src/tools/oauth';\nimport { registerFeishuOAuthBatchAuthTool } from './src/tools/oauth-batch-auth';\nimport { registerFeishuProjectOAuthTool } from './src/tools/project-oauth';\nimport {\n runDiagnosis,\n formatDiagReportCli,\n traceByMessageId,\n formatTraceOutput,\n analyzeTrace,\n} from './src/commands/diagnose';\nimport { registerCommands } from './src/commands/index';\nimport { larkLogger } from './src/core/lark-logger';\nimport { emitSecurityWarnings } from './src/core/security-check';\n\nconst log = larkLogger('plugin');\n\n// ---------------------------------------------------------------------------\n// Re-exports for external consumers\n// ---------------------------------------------------------------------------\n\nexport { monitorFeishuProvider } from './src/channel/monitor';\nexport { sendMessageFeishu, sendCardFeishu, updateCardFeishu, editMessageFeishu } from './src/messaging/outbound/send';\nexport { getMessageFeishu } from './src/messaging/outbound/fetch';\nexport {\n uploadImageLark,\n uploadFileLark,\n sendImageLark,\n sendFileLark,\n sendAudioLark,\n uploadAndSendMediaLark,\n} from './src/messaging/outbound/media';\nexport {\n sendTextLark,\n sendCardLark,\n sendMediaLark,\n type SendTextLarkParams,\n type SendCardLarkParams,\n type SendMediaLarkParams,\n} from './src/messaging/outbound/deliver';\nexport { type FeishuChannelData } from './src/messaging/outbound/outbound';\nexport { probeFeishu } from './src/channel/probe';\nexport {\n addReactionFeishu,\n removeReactionFeishu,\n listReactionsFeishu,\n FeishuEmoji,\n VALID_FEISHU_EMOJI_TYPES,\n} from './src/messaging/outbound/reactions';\nexport { forwardMessageFeishu } from './src/messaging/outbound/forward';\nexport {\n updateChatFeishu,\n addChatMembersFeishu,\n removeChatMembersFeishu,\n listChatMembersFeishu,\n} from './src/messaging/outbound/chat-manage';\nexport { feishuMessageActions } from './src/messaging/outbound/actions';\nexport {\n mentionedBot,\n nonBotMentions,\n extractMessageBody,\n formatMentionForText,\n formatMentionForCard,\n formatMentionAllForText,\n formatMentionAllForCard,\n buildMentionedMessage,\n buildMentionedCardContent,\n type MentionInfo,\n} from './src/messaging/inbound/mention';\nexport { feishuPlugin } from './src/channel/plugin';\nexport type {\n MessageContext,\n RawMessage,\n RawSender,\n FeishuMessageContext,\n FeishuReactionCreatedEvent,\n} from './src/messaging/types';\nexport { handleFeishuReaction } from './src/messaging/inbound/reaction-handler';\nexport { parseMessageEvent } from './src/messaging/inbound/parse';\nexport { checkMessageGate } from './src/messaging/inbound/gate';\nexport { isMessageExpired } from './src/messaging/inbound/dedup';\n\n// ---------------------------------------------------------------------------\n// Plugin definition\n// ---------------------------------------------------------------------------\n\nconst plugin = {\n id: 'feishu-openclaw-plugin',\n name: 'Feishu',\n description: 'Lark/Feishu channel plugin with im/doc/wiki/drive/task/calendar tools',\n configSchema: emptyPluginConfigSchema(),\n register(api: OpenClawPluginApi) {\n LarkClient.setRuntime(api.runtime);\n api.registerChannel({ plugin: feishuPlugin });\n\n // ========================================\n\n // Register OAPI tools (calendar, task - using Feishu Open API directly)\n registerOapiTools(api);\n\n // Register MCP doc tools (using Model Context Protocol)\n registerFeishuMcpDocTools(api);\n\n // Register MCP project tools (Meego - using independent OAuth)\n registerFeishuMcpProjectTools(api);\n\n // Register OAuth tool (UAT device flow authorization)\n registerFeishuOAuthTool(api);\n\n // Register OAuth batch auth tool (batch authorization for all app scopes)\n registerFeishuOAuthBatchAuthTool(api);\n\n // Register Feishu Project OAuth tool (independent OAuth for Meego)\n registerFeishuProjectOAuthTool(api);\n\n // ---- Tool call hooks (auto-trace AI tool invocations) ----\n\n api.on('before_tool_call', (event) => {\n log.info(`tool call: ${event.toolName} params=${JSON.stringify(event.params)}`);\n });\n\n api.on('after_tool_call', (event) => {\n if (event.error) {\n log.error(`tool fail: ${event.toolName} ${event.error} (${event.durationMs ?? 0}ms)`);\n } else {\n log.info(`tool done: ${event.toolName} ok (${event.durationMs ?? 0}ms)`);\n }\n });\n\n // ---- Diagnostic commands ----\n\n // CLI: openclaw feishu-diagnose [--trace <messageId>]\n api.registerCli(\n (ctx) => {\n ctx.program\n .command('feishu-diagnose')\n .description('\u8FD0\u884C\u98DE\u4E66\u63D2\u4EF6\u8BCA\u65AD\uFF0C\u68C0\u67E5\u914D\u7F6E\u3001\u8FDE\u901A\u6027\u548C\u6743\u9650\u72B6\u6001')\n .option('--trace <messageId>', '\u6309 message_id \u8FFD\u8E2A\u5B8C\u6574\u5904\u7406\u94FE\u8DEF')\n .option('--analyze', '\u5206\u6790\u8FFD\u8E2A\u65E5\u5FD7\uFF08\u9700\u914D\u5408 --trace \u4F7F\u7528\uFF09')\n .action(async (opts: { trace?: string; analyze?: boolean }) => {\n try {\n if (opts.trace) {\n const lines = await traceByMessageId(opts.trace);\n // eslint-disable-next-line no-console -- CLI \u547D\u4EE4\u76F4\u63A5\u8F93\u51FA\u5230\u7EC8\u7AEF\n console.log(formatTraceOutput(lines, opts.trace));\n if (opts.analyze && lines.length > 0) {\n // eslint-disable-next-line no-console -- CLI \u547D\u4EE4\u76F4\u63A5\u8F93\u51FA\u5230\u7EC8\u7AEF\n console.log(analyzeTrace(lines, opts.trace));\n }\n } else {\n const report = await runDiagnosis({\n config: ctx.config,\n logger: ctx.logger,\n });\n // eslint-disable-next-line no-console -- CLI \u547D\u4EE4\u76F4\u63A5\u8F93\u51FA\u5230\u7EC8\u7AEF\n console.log(formatDiagReportCli(report));\n if (report.overallStatus === 'unhealthy') {\n process.exitCode = 1;\n }\n }\n } catch (err) {\n ctx.logger.error(`\u8BCA\u65AD\u547D\u4EE4\u6267\u884C\u5931\u8D25: ${err}`);\n process.exitCode = 1;\n }\n });\n },\n { commands: ['feishu-diagnose'] },\n );\n\n // Chat commands: /feishu_diagnose, /feishu_doctor, /feishu_auth, /feishu\n registerCommands(api);\n\n // ---- Multi-account security checks ----\n if (api.config) {\n emitSecurityWarnings(api.config, api.logger);\n }\n },\n};\n\nexport default plugin;\n"],
4
+ "sourcesContent": ["/**\n * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n *\n * OpenClaw Lark/Feishu plugin entry point.\n *\n * Registers the Feishu channel and all tool families:\n * doc, wiki, drive, perm, bitable, task, calendar.\n */\n\nimport type { OpenClawPluginApi } from 'openclaw/plugin-sdk';\nimport { emptyPluginConfigSchema } from 'openclaw/plugin-sdk';\nimport { feishuPlugin } from './src/channel/plugin';\nimport { LarkClient } from './src/core/lark-client';\nimport { registerOapiTools } from './src/tools/oapi/index';\nimport { registerFeishuMcpDocTools } from './src/tools/mcp/doc/index';\nimport { registerFeishuMcpProjectTools } from './src/tools/mcp/project/index';\nimport { registerFeishuOAuthTool } from './src/tools/oauth';\nimport { registerFeishuOAuthBatchAuthTool } from './src/tools/oauth-batch-auth';\nimport { registerFeishuProjectOAuthTool } from './src/tools/project-oauth';\nimport {\n runDiagnosis,\n formatDiagReportCli,\n traceByMessageId,\n formatTraceOutput,\n analyzeTrace,\n} from './src/commands/diagnose';\nimport { registerCommands } from './src/commands/index';\nimport { larkLogger } from './src/core/lark-logger';\nimport { emitSecurityWarnings } from './src/core/security-check';\n\nconst log = larkLogger('plugin');\n\n// ---------------------------------------------------------------------------\n// Re-exports for external consumers\n// ---------------------------------------------------------------------------\n\nexport { monitorFeishuProvider } from './src/channel/monitor';\nexport { sendMessageFeishu, sendCardFeishu, updateCardFeishu, editMessageFeishu } from './src/messaging/outbound/send';\nexport { getMessageFeishu } from './src/messaging/outbound/fetch';\nexport {\n uploadImageLark,\n uploadFileLark,\n sendImageLark,\n sendFileLark,\n sendAudioLark,\n uploadAndSendMediaLark,\n} from './src/messaging/outbound/media';\nexport {\n sendTextLark,\n sendCardLark,\n sendMediaLark,\n type SendTextLarkParams,\n type SendCardLarkParams,\n type SendMediaLarkParams,\n} from './src/messaging/outbound/deliver';\nexport { type FeishuChannelData } from './src/messaging/outbound/outbound';\nexport { probeFeishu } from './src/channel/probe';\nexport {\n addReactionFeishu,\n removeReactionFeishu,\n listReactionsFeishu,\n FeishuEmoji,\n VALID_FEISHU_EMOJI_TYPES,\n} from './src/messaging/outbound/reactions';\nexport { forwardMessageFeishu } from './src/messaging/outbound/forward';\nexport {\n updateChatFeishu,\n addChatMembersFeishu,\n removeChatMembersFeishu,\n listChatMembersFeishu,\n} from './src/messaging/outbound/chat-manage';\nexport { feishuMessageActions } from './src/messaging/outbound/actions';\nexport {\n mentionedBot,\n nonBotMentions,\n extractMessageBody,\n formatMentionForText,\n formatMentionForCard,\n formatMentionAllForText,\n formatMentionAllForCard,\n buildMentionedMessage,\n buildMentionedCardContent,\n type MentionInfo,\n} from './src/messaging/inbound/mention';\nexport { feishuPlugin } from './src/channel/plugin';\nexport type {\n MessageContext,\n RawMessage,\n RawSender,\n FeishuMessageContext,\n FeishuReactionCreatedEvent,\n} from './src/messaging/types';\nexport { handleFeishuReaction } from './src/messaging/inbound/reaction-handler';\nexport { parseMessageEvent } from './src/messaging/inbound/parse';\nexport { checkMessageGate } from './src/messaging/inbound/gate';\nexport { isMessageExpired } from './src/messaging/inbound/dedup';\n\n// ---------------------------------------------------------------------------\n// Plugin definition\n// ---------------------------------------------------------------------------\n\nconst plugin = {\n id: 'openclaw-lark-project',\n name: 'Feishu',\n description: 'Lark/Feishu channel plugin with im/doc/wiki/drive/task/calendar tools',\n configSchema: emptyPluginConfigSchema(),\n register(api: OpenClawPluginApi) {\n LarkClient.setRuntime(api.runtime);\n api.registerChannel({ plugin: feishuPlugin });\n\n // ========================================\n\n // Register OAPI tools (calendar, task - using Feishu Open API directly)\n registerOapiTools(api);\n\n // Register MCP doc tools (using Model Context Protocol)\n registerFeishuMcpDocTools(api);\n\n // Register MCP project tools (Meego - using independent OAuth)\n registerFeishuMcpProjectTools(api);\n\n // Register OAuth tool (UAT device flow authorization)\n registerFeishuOAuthTool(api);\n\n // Register OAuth batch auth tool (batch authorization for all app scopes)\n registerFeishuOAuthBatchAuthTool(api);\n\n // Register Feishu Project OAuth tool (independent OAuth for Meego)\n registerFeishuProjectOAuthTool(api);\n\n // ---- Tool call hooks (auto-trace AI tool invocations) ----\n\n api.on('before_tool_call', (event) => {\n log.info(`tool call: ${event.toolName} params=${JSON.stringify(event.params)}`);\n });\n\n api.on('after_tool_call', (event) => {\n if (event.error) {\n log.error(`tool fail: ${event.toolName} ${event.error} (${event.durationMs ?? 0}ms)`);\n } else {\n log.info(`tool done: ${event.toolName} ok (${event.durationMs ?? 0}ms)`);\n }\n });\n\n // ---- Diagnostic commands ----\n\n // CLI: openclaw feishu-diagnose [--trace <messageId>]\n api.registerCli(\n (ctx) => {\n ctx.program\n .command('feishu-diagnose')\n .description('\u8FD0\u884C\u98DE\u4E66\u63D2\u4EF6\u8BCA\u65AD\uFF0C\u68C0\u67E5\u914D\u7F6E\u3001\u8FDE\u901A\u6027\u548C\u6743\u9650\u72B6\u6001')\n .option('--trace <messageId>', '\u6309 message_id \u8FFD\u8E2A\u5B8C\u6574\u5904\u7406\u94FE\u8DEF')\n .option('--analyze', '\u5206\u6790\u8FFD\u8E2A\u65E5\u5FD7\uFF08\u9700\u914D\u5408 --trace \u4F7F\u7528\uFF09')\n .action(async (opts: { trace?: string; analyze?: boolean }) => {\n try {\n if (opts.trace) {\n const lines = await traceByMessageId(opts.trace);\n // eslint-disable-next-line no-console -- CLI \u547D\u4EE4\u76F4\u63A5\u8F93\u51FA\u5230\u7EC8\u7AEF\n console.log(formatTraceOutput(lines, opts.trace));\n if (opts.analyze && lines.length > 0) {\n // eslint-disable-next-line no-console -- CLI \u547D\u4EE4\u76F4\u63A5\u8F93\u51FA\u5230\u7EC8\u7AEF\n console.log(analyzeTrace(lines, opts.trace));\n }\n } else {\n const report = await runDiagnosis({\n config: ctx.config,\n logger: ctx.logger,\n });\n // eslint-disable-next-line no-console -- CLI \u547D\u4EE4\u76F4\u63A5\u8F93\u51FA\u5230\u7EC8\u7AEF\n console.log(formatDiagReportCli(report));\n if (report.overallStatus === 'unhealthy') {\n process.exitCode = 1;\n }\n }\n } catch (err) {\n ctx.logger.error(`\u8BCA\u65AD\u547D\u4EE4\u6267\u884C\u5931\u8D25: ${err}`);\n process.exitCode = 1;\n }\n });\n },\n { commands: ['feishu-diagnose'] },\n );\n\n // Chat commands: /feishu_diagnose, /feishu_doctor, /feishu_auth, /feishu\n registerCommands(api);\n\n // ---- Multi-account security checks ----\n if (api.config) {\n emitSecurityWarnings(api.config, api.logger);\n }\n },\n};\n\nexport default plugin;\n"],
5
5
  "mappings": "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",
6
6
  "names": ["feishuPlugin"]
7
7
  }
@@ -18,7 +18,7 @@ function getPluginVersion() {
18
18
  }
19
19
  }
20
20
  function getUserAgent() {
21
- return `feishu-openclaw-plugin/${getPluginVersion()}`;
21
+ return `openclaw-lark-project/${getPluginVersion()}`;
22
22
  }
23
23
  export {
24
24
  getPluginVersion,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/core/version.ts"],
4
- "sourcesContent": ["/**\n * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n *\n * \u63D2\u4EF6\u7248\u672C\u53F7\u7BA1\u7406\n *\n * \u4ECE package.json \u8BFB\u53D6\u7248\u672C\u53F7\u5E76\u751F\u6210 User-Agent \u5B57\u7B26\u4E32\u3002\n */\n\nimport { fileURLToPath } from 'node:url';\nimport { dirname, join } from 'node:path';\nimport { readFileSync } from 'node:fs';\n\n/** \u7F13\u5B58\u7684\u7248\u672C\u53F7 */\nlet cachedVersion: string | undefined;\n\n/**\n * \u83B7\u53D6\u63D2\u4EF6\u7248\u672C\u53F7\uFF08\u4ECE package.json \u8BFB\u53D6\uFF09\n *\n * @returns \u7248\u672C\u53F7\u5B57\u7B26\u4E32\uFF0C\u5982 \"2026.2.28.5\"\uFF1B\u8BFB\u53D6\u5931\u8D25\u8FD4\u56DE \"unknown\"\n */\nexport function getPluginVersion(): string {\n if (cachedVersion) return cachedVersion;\n\n try {\n // \u5F53\u524D\u6587\u4EF6: src/core/version.ts \u2192 \u5411\u4E0A\u4E24\u7EA7\u5230\u8FBE\u9879\u76EE\u6839\u76EE\u5F55\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const packageJsonPath = join(__dirname, '..', '..', 'package.json');\n\n const raw = readFileSync(packageJsonPath, 'utf8');\n const pkg = JSON.parse(raw) as { version?: string };\n cachedVersion = pkg.version ?? 'unknown';\n return cachedVersion;\n } catch {\n cachedVersion = 'unknown';\n return cachedVersion;\n }\n}\n\n/**\n * \u751F\u6210 User-Agent \u5B57\u7B26\u4E32\n *\n * @returns User-Agent \u5B57\u7B26\u4E32\uFF0C\u683C\u5F0F\uFF1A`feishu-openclaw-plugin/{version}`\n *\n * @example\n * ```typescript\n * getUserAgent() // => \"feishu-openclaw-plugin/2026.2.28.5\"\n * ```\n */\nexport function getUserAgent(): string {\n return `feishu-openclaw-plugin/${getPluginVersion()}`;\n}\n"],
5
- "mappings": "AASA,SAAS,qBAAqB;AAC9B,SAAS,SAAS,YAAY;AAC9B,SAAS,oBAAoB;AAG7B,IAAI;AAOG,SAAS,mBAA2B;AACzC,MAAI,cAAe,QAAO;AAE1B,MAAI;AAEF,UAAM,aAAa,cAAc,YAAY,GAAG;AAChD,UAAM,YAAY,QAAQ,UAAU;AACpC,UAAM,kBAAkB,KAAK,WAAW,MAAM,MAAM,cAAc;AAElE,UAAM,MAAM,aAAa,iBAAiB,MAAM;AAChD,UAAM,MAAM,KAAK,MAAM,GAAG;AAC1B,oBAAgB,IAAI,WAAW;AAC/B,WAAO;AAAA,EACT,QAAQ;AACN,oBAAgB;AAChB,WAAO;AAAA,EACT;AACF;AAYO,SAAS,eAAuB;AACrC,SAAO,0BAA0B,iBAAiB,CAAC;AACrD;",
4
+ "sourcesContent": ["/**\n * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n *\n * \u63D2\u4EF6\u7248\u672C\u53F7\u7BA1\u7406\n *\n * \u4ECE package.json \u8BFB\u53D6\u7248\u672C\u53F7\u5E76\u751F\u6210 User-Agent \u5B57\u7B26\u4E32\u3002\n */\n\nimport { fileURLToPath } from 'node:url';\nimport { dirname, join } from 'node:path';\nimport { readFileSync } from 'node:fs';\n\n/** \u7F13\u5B58\u7684\u7248\u672C\u53F7 */\nlet cachedVersion: string | undefined;\n\n/**\n * \u83B7\u53D6\u63D2\u4EF6\u7248\u672C\u53F7\uFF08\u4ECE package.json \u8BFB\u53D6\uFF09\n *\n * @returns \u7248\u672C\u53F7\u5B57\u7B26\u4E32\uFF0C\u5982 \"2026.2.28.5\"\uFF1B\u8BFB\u53D6\u5931\u8D25\u8FD4\u56DE \"unknown\"\n */\nexport function getPluginVersion(): string {\n if (cachedVersion) return cachedVersion;\n\n try {\n // \u5F53\u524D\u6587\u4EF6: src/core/version.ts \u2192 \u5411\u4E0A\u4E24\u7EA7\u5230\u8FBE\u9879\u76EE\u6839\u76EE\u5F55\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const packageJsonPath = join(__dirname, '..', '..', 'package.json');\n\n const raw = readFileSync(packageJsonPath, 'utf8');\n const pkg = JSON.parse(raw) as { version?: string };\n cachedVersion = pkg.version ?? 'unknown';\n return cachedVersion;\n } catch {\n cachedVersion = 'unknown';\n return cachedVersion;\n }\n}\n\n/**\n * \u751F\u6210 User-Agent \u5B57\u7B26\u4E32\n *\n * @returns User-Agent \u5B57\u7B26\u4E32\uFF0C\u683C\u5F0F\uFF1A`openclaw-lark-project/{version}`\n *\n * @example\n * ```typescript\n * getUserAgent() // => \"openclaw-lark-project/2026.2.28.5\"\n * ```\n */\nexport function getUserAgent(): string {\n return `openclaw-lark-project/${getPluginVersion()}`;\n}\n"],
5
+ "mappings": "AASA,SAAS,qBAAqB;AAC9B,SAAS,SAAS,YAAY;AAC9B,SAAS,oBAAoB;AAG7B,IAAI;AAOG,SAAS,mBAA2B;AACzC,MAAI,cAAe,QAAO;AAE1B,MAAI;AAEF,UAAM,aAAa,cAAc,YAAY,GAAG;AAChD,UAAM,YAAY,QAAQ,UAAU;AACpC,UAAM,kBAAkB,KAAK,WAAW,MAAM,MAAM,cAAc;AAElE,UAAM,MAAM,aAAa,iBAAiB,MAAM;AAChD,UAAM,MAAM,KAAK,MAAM,GAAG;AAC1B,oBAAgB,IAAI,WAAW;AAC/B,WAAO;AAAA,EACT,QAAQ;AACN,oBAAgB;AAChB,WAAO;AAAA,EACT;AACF;AAYO,SAAS,eAAuB;AACrC,SAAO,yBAAyB,iBAAiB,CAAC;AACpD;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "id": "feishu-openclaw-plugin",
2
+ "id": "openclaw-lark-project",
3
3
  "channels": ["feishu"],
4
4
  "skills": ["./skills"],
5
5
  "configSchema": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lark-project/openclaw-lark-project",
3
- "version": "2026.3.170",
3
+ "version": "2026.3.171",
4
4
  "description": "OpenClaw Lark/Feishu channel plugin",
5
5
  "type": "module",
6
6
  "files": [
@@ -45,7 +45,7 @@
45
45
  "./dist/index.js"
46
46
  ],
47
47
  "channel": {
48
- "id": "feishu-openclaw-plugin",
48
+ "id": "openclaw-lark-project",
49
49
  "label": "Feishu",
50
50
  "selectionLabel": "Lark/Feishu (飞书)",
51
51
  "docsPath": "/channels/feishu",