@cubeai/dsh-feishu-channels 0.0.0-stage → 0.2.0

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.
Files changed (65) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +15 -0
  3. package/README.md +56 -2
  4. package/client.js +4189 -0
  5. package/cordis.patch.yml +4 -0
  6. package/docs/coexistence.md +112 -0
  7. package/docs/dsh-feishu-channels-plan.md +1406 -0
  8. package/docs/ui-revamp-plan.md +263 -0
  9. package/docs/verification.md +120 -0
  10. package/icon.svg +17 -0
  11. package/locale/en.json +6 -0
  12. package/locale/zh.json +6 -0
  13. package/package.json +76 -4
  14. package/src/channels/connection-state.js +12 -0
  15. package/src/channels/diagnostics.js +77 -0
  16. package/src/channels/factory.js +20 -0
  17. package/src/channels/feishu-app.js +267 -0
  18. package/src/channels/feishu.js +399 -0
  19. package/src/channels/media.js +9 -0
  20. package/src/channels/meta.js +24 -0
  21. package/src/channels/qr/feishu.js +84 -0
  22. package/src/channels/qr/hub.js +229 -0
  23. package/src/channels/qr/render.js +8 -0
  24. package/src/channels/qr/shared.js +50 -0
  25. package/src/engine/abort.js +35 -0
  26. package/src/engine/access.js +23 -0
  27. package/src/engine/agent-options.js +19 -0
  28. package/src/engine/approval.js +70 -0
  29. package/src/engine/assistant-settings.js +38 -0
  30. package/src/engine/assistant-text.js +11 -0
  31. package/src/engine/atomic-file.js +45 -0
  32. package/src/engine/chat-commands.js +752 -0
  33. package/src/engine/choice-delivery.js +20 -0
  34. package/src/engine/choices.js +103 -0
  35. package/src/engine/command-locale.js +70 -0
  36. package/src/engine/command-messages.js +434 -0
  37. package/src/engine/command-permissions.js +38 -0
  38. package/src/engine/command-replies.js +59 -0
  39. package/src/engine/credentials.js +54 -0
  40. package/src/engine/deferred-delivery.js +260 -0
  41. package/src/engine/delivery-history.js +39 -0
  42. package/src/engine/file-delivery.js +215 -0
  43. package/src/engine/file-input.js +52 -0
  44. package/src/engine/file-log.js +25 -0
  45. package/src/engine/gateway.js +1337 -0
  46. package/src/engine/image-input.js +31 -0
  47. package/src/engine/json-state.js +25 -0
  48. package/src/engine/keyed-queue.js +20 -0
  49. package/src/engine/merge.js +56 -0
  50. package/src/engine/message-progress.js +274 -0
  51. package/src/engine/question.js +201 -0
  52. package/src/engine/quiet-logger.js +25 -0
  53. package/src/engine/reply-stream.js +86 -0
  54. package/src/engine/router.js +713 -0
  55. package/src/engine/secure-file.js +8 -0
  56. package/src/engine/seen-store.js +43 -0
  57. package/src/engine/session-export.js +64 -0
  58. package/src/engine/session-history.js +30 -0
  59. package/src/engine/session-id.js +62 -0
  60. package/src/engine/session-store.js +109 -0
  61. package/src/engine/session-title.js +29 -0
  62. package/src/engine/split.js +291 -0
  63. package/src/engine/workspace-path.js +9 -0
  64. package/src/index.js +62 -0
  65. package/src/manager.js +1325 -0
package/src/index.js ADDED
@@ -0,0 +1,62 @@
1
+ import Schema from '@deepseek-ai/schemastery';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { mkdirSync } from 'node:fs';
5
+ import { ChannelManager } from './manager.js';
6
+ import { createRotatingFileAppender } from './engine/file-log.js';
7
+
8
+ export const name = 'dsh-feishu-channels';
9
+ export const inject = [
10
+ 'webServer',
11
+ 'credentials',
12
+ 'agents',
13
+ 'agentPresets',
14
+ 'agentDefaultModel',
15
+ 'llm',
16
+ 'permissionPresets',
17
+ ];
18
+ export const Config = Schema.object({
19
+ stateDir: Schema.string().default(''),
20
+ cwd: Schema.string().default(process.cwd()),
21
+ provider: Schema.string().default(''),
22
+ model: Schema.string().default(''),
23
+ agentPreset: Schema.string().default('standard'),
24
+ mergeTimeoutSecs: Schema.number().default(5),
25
+ });
26
+ export function apply(ctx, config) {
27
+ const permissionPresets = ctx.permissionPresets;
28
+ const stateDir = config.stateDir !== ''
29
+ ? config.stateDir
30
+ : join(process.env.DSH_HOME ?? join(homedir(), '.dsh'), 'dsh-feishu-channels');
31
+ mkdirSync(stateDir, { recursive: true });
32
+ const logFile = join(stateDir, 'gateway.log');
33
+ const fileLog = createRotatingFileAppender(logFile);
34
+ const log = (line) => {
35
+ const stamped = `${new Date().toISOString()} ${line}`;
36
+ ctx.logger(name).info(line);
37
+ fileLog.append(`${stamped}\n`);
38
+ };
39
+ const engineConfig = {
40
+ cwd: config.cwd || process.cwd(),
41
+ provider: config.provider,
42
+ model: config.model,
43
+ agentPreset: config.agentPreset || 'standard',
44
+ mergeTimeoutSecs: config.mergeTimeoutSecs || 5,
45
+ permissionPreset: permissionPresets.defaultPreset,
46
+ };
47
+ const applyStarted = Date.now();
48
+ const manager = new ChannelManager({ ctx, stateDir, log, engineConfig });
49
+ log(`[boot] ChannelManager 构造 ${Date.now() - applyStarted}ms`);
50
+ ctx.effect(() => {
51
+ manager.registerApi(ctx);
52
+ // 卸载或初始化失败后不再恢复会话;保留一个完整异常链,避免后台拒绝终止宿主。
53
+ void manager.initEnabled().then(() => manager.attachMappedSessions()).catch(error => {
54
+ fileLog.append(`${new Date().toISOString()} [boot] 初始化失败: ${error instanceof Error ? error.message : String(error)}\n`);
55
+ });
56
+ log(`[boot] apply 完成 ${Date.now() - applyStarted}ms`);
57
+ return () => { manager.disposeApi(); void fileLog.flush(); };
58
+ }, 'feishu-channel.serve');
59
+ }
60
+ export { CHANNEL_META, CHANNEL_ORDER, listChannelMeta } from './channels/meta.js';
61
+ export { DFC_ORIGIN, DFC_SESSION_PREFIX, createFeishuSessionId, isFeishuOrigin, isFeishuSessionId, isTaskSession, sessionKeyOf, } from './engine/session-id.js';
62
+ export { splitText } from './engine/split.js';