@lemoncat7/dsh-partner 0.1.0-alpha.22 → 1.1.6

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/README.md +15 -7
  2. package/lib/agent-runtime.d.ts +14 -1
  3. package/lib/agent-runtime.d.ts.map +1 -1
  4. package/lib/agent-runtime.js +201 -39
  5. package/lib/agent-runtime.js.map +1 -1
  6. package/lib/api.d.ts +2 -0
  7. package/lib/api.d.ts.map +1 -1
  8. package/lib/api.js +18 -2
  9. package/lib/api.js.map +1 -1
  10. package/lib/autonomy.d.ts +8 -0
  11. package/lib/autonomy.d.ts.map +1 -0
  12. package/lib/autonomy.js +32 -0
  13. package/lib/autonomy.js.map +1 -0
  14. package/lib/channel-message.d.ts +23 -0
  15. package/lib/channel-message.d.ts.map +1 -0
  16. package/lib/channel-message.js +8 -0
  17. package/lib/channel-message.js.map +1 -0
  18. package/lib/channels/manager.d.ts +27 -1
  19. package/lib/channels/manager.d.ts.map +1 -1
  20. package/lib/channels/manager.js +222 -15
  21. package/lib/channels/manager.js.map +1 -1
  22. package/lib/channels/weixin/api.d.ts +2 -0
  23. package/lib/channels/weixin/api.d.ts.map +1 -1
  24. package/lib/channels/weixin/api.js +80 -1
  25. package/lib/channels/weixin/api.js.map +1 -1
  26. package/lib/channels/weixin/media.d.ts +4 -0
  27. package/lib/channels/weixin/media.d.ts.map +1 -0
  28. package/lib/channels/weixin/media.js +78 -0
  29. package/lib/channels/weixin/media.js.map +1 -0
  30. package/lib/channels/weixin/types.d.ts +19 -2
  31. package/lib/channels/weixin/types.d.ts.map +1 -1
  32. package/lib/client-api.d.ts +16 -0
  33. package/lib/client-api.d.ts.map +1 -1
  34. package/lib/client-api.js.map +1 -1
  35. package/lib/client.d.ts.map +1 -1
  36. package/lib/client.js +599 -437
  37. package/lib/client.js.map +4 -4
  38. package/lib/daily-review.d.ts +26 -0
  39. package/lib/daily-review.d.ts.map +1 -0
  40. package/lib/daily-review.js +86 -0
  41. package/lib/daily-review.js.map +1 -0
  42. package/lib/domain.d.ts +3 -1
  43. package/lib/domain.d.ts.map +1 -1
  44. package/lib/domain.js +3 -1
  45. package/lib/domain.js.map +1 -1
  46. package/lib/index.d.ts.map +1 -1
  47. package/lib/index.js +11 -5
  48. package/lib/index.js.map +1 -1
  49. package/lib/memory-domain.d.ts +27 -0
  50. package/lib/memory-domain.d.ts.map +1 -1
  51. package/lib/memory-reflection.d.ts +3 -1
  52. package/lib/memory-reflection.d.ts.map +1 -1
  53. package/lib/memory-reflection.js +53 -7
  54. package/lib/memory-reflection.js.map +1 -1
  55. package/lib/memory-store.d.ts +13 -1
  56. package/lib/memory-store.d.ts.map +1 -1
  57. package/lib/memory-store.js +120 -0
  58. package/lib/memory-store.js.map +1 -1
  59. package/lib/store.js +13 -2
  60. package/lib/store.js.map +1 -1
  61. package/lib/workspace-ownership.d.ts +5 -0
  62. package/lib/workspace-ownership.d.ts.map +1 -0
  63. package/lib/workspace-ownership.js +18 -0
  64. package/lib/workspace-ownership.js.map +1 -0
  65. package/package.json +11 -2
package/README.md CHANGED
@@ -15,14 +15,19 @@
15
15
  - 私聊首次联系配对审批
16
16
  - `微信机器人 + 联系人` 独立 Session 路由
17
17
  - DSH Agent 完整回复后回发微信,并保留 iLink `context_token`
18
+ - 微信图片与文档双向收发:图片进入 DSH 原生附件上下文,文档安全保存到伙伴独立工作目录
19
+ - 伙伴可把工作目录内生成的图片、PDF、Office 文档及常用文本文件回发微信
20
+ - DSH 运行中发起选择题或自由提问时同步到微信;联系人回复序号、选项文字或自定义答案后,原 Agent 继续执行
21
+ - 微信在伙伴忙碌时遵循 DSH 全局 `ui-conversation.busyEnter`:`steer` 插入当前轮,`queue` 排入下一轮
18
22
  - 按伙伴和微信联系人双重隔离的完整对话归档、每日回顾与结构化长期记忆
19
- - 对话和心跳前按话题召回画像、偏好、任务、事件、关系与短期情绪信号
20
- - 可配置的低打扰心跳:静默时段、检查间隔、每日上限、失败退避和手动检查
21
- - 心跳只有在模型判断存在实际价值时才发送;`NO_ACTION` 不触发微信通知
23
+ - 对话前按话题召回画像、偏好、任务、事件、关系与短期情绪信号
24
+ - 心跳上下文只注入当前 Agent 作用域的真实工具目录,不注入近期回顾、长期任务、偏好、情绪或其他记忆
25
+ - 心跳会在有限预算内从关注变化、学习新知和整理现状中发现并核实最多三条线索;只有产生可靠且有实际价值的信息才通过渠道通知
26
+ - 可配置静默时段、检查间隔、每日通知上限、失败退避和手动检查
22
27
  - 修改伙伴身份或能力时清理该伙伴的渠道 Session,防止新旧人格串联
23
28
  - Windows、macOS、Linux 兼容的原子状态写入
24
29
 
25
- 心跳默认关闭,升级后不会突然主动发送消息。图片、文件、群聊策略和多渠道适配尚未开放。收到媒体消息时第一版只提供安全的占位说明,不会假装已经读取附件。
30
+ 心跳默认关闭,升级后不会突然主动发送消息。群聊策略和多渠道适配尚未开放。
26
31
 
27
32
  ## 安装
28
33
 
@@ -33,7 +38,7 @@ dsh plugin --profile web add @lemoncat7/dsh-partner
33
38
  本地压缩包:
34
39
 
35
40
  ```bash
36
- dsh plugin --profile web add ./lemoncat7-dsh-partner-0.1.0-alpha.2.tgz
41
+ dsh plugin --profile web add ./lemoncat7-dsh-partner-1.0.0.tgz
37
42
  ```
38
43
 
39
44
  重启对应 DSH profile 后,左侧「空间」上方会出现「伙伴」。打开伙伴面板,创建或选择伙伴,再进入「微信」扫码。
@@ -61,17 +66,20 @@ dsh plugin --profile web add ./lemoncat7-dsh-partner-0.1.0-alpha.2.tgz
61
66
  3. 后台通过 `/ilink/bot/getupdates` 长轮询接收消息。
62
67
  4. 未授权联系人只会创建配对请求。
63
68
  5. 批准后,为该联系人创建或恢复独立 DSH Agent。
64
- 6. Agent 使用伙伴身份和所选 Preset 运行,最终文本通过 `/ilink/bot/sendmessage` 返回微信。
69
+ 6. 收到图片时,插件通过微信 CDN 下载并解密媒体,保存到伙伴工作目录,同时作为 DSH 原生图片附件交给 Agent;文档保存后以安全路径交给 Agent。
70
+ 7. Agent 使用伙伴身份和所选 Preset 运行,最终文本通过 `/ilink/bot/sendmessage` 返回微信;回复中明确引用的工作目录文件会加密上传并作为微信附件发送。
65
71
 
66
72
  渠道身份只决定消息归属,不授予任何工具权限。SSH、知识库和未来 Git 插件仍执行各自的挂载、授权和审批规则。
67
73
 
68
74
  ## 数据与安全
69
75
 
70
76
  - 普通状态:`statePath` 指向的 JSON 文件。
71
- - 伙伴记忆:`<defaultCwd>/partners/<伙伴 ID>/memory/scopes/`,按联系人隔离保存每日完整对话归档、每日回顾和结构化长期记忆;相关记忆会在对话与心跳前按需召回,默认永久保留。
77
+ - 伙伴记忆:`<defaultCwd>/partners/<伙伴 ID>/memory/`,按联系人隔离保存每日完整对话归档、每日回顾和结构化长期记忆;相关记忆会在对话与心跳前按需召回,默认永久保留。
72
78
  - 敏感凭据:DSH Credential Store,scope 为 `dsh-partner-weixin`。
73
79
  - 管理 API:默认 `/partner-local/v1`,仅接受同源请求;写操作还要求 `X-DSH-Partner-Request: 1`。
74
80
  - 微信机器人只能绑定一个伙伴;联系人上下文不会跨机器人、伙伴或其他联系人共享。
81
+ - 入站附件上限为 64 MB,保存在 `<伙伴 cwd>/inbound/`,目录权限为 `0700`、文件权限为 `0600`。
82
+ - 出站附件最多 8 个,只允许伙伴工作目录内的真实文件;会解析真实路径并拒绝符号链接越界、未知格式和超限文件。
75
83
 
76
84
  ## 开发
77
85
 
@@ -4,15 +4,18 @@ import type { AgentPresets } from '@deepseek-ai/dsh-agent-presets';
4
4
  import type { SessionId } from '@deepseek-ai/dsh-session';
5
5
  import type { Session, SessionEvent } from '@deepseek-ai/dsh-session';
6
6
  import type { WorkspaceRegistry } from '@deepseek-ai/dsh-workspace';
7
+ import type { ToolRuntime } from '@deepseek-ai/dsh-tools';
7
8
  import type { Companion, ChannelSession } from './domain.js';
8
9
  import { PartnerStore } from './store.js';
9
10
  import type { PartnerMemoryStore } from './memory-store.js';
10
11
  import type { MemoryReflectionService } from './memory-reflection.js';
12
+ import type { PartnerInboundMessage, PartnerOutboundAttachment, PartnerReply } from './channel-message.js';
11
13
  type RuntimeContext = Context & {
12
14
  agents: Context['agents'];
13
15
  agentDefaultModel: AgentDefaultModelConfig;
14
16
  agentPresets: AgentPresets;
15
17
  workspaceRegistry: WorkspaceRegistry;
18
+ tools: ToolRuntime;
16
19
  };
17
20
  export declare class PartnerAgentRuntime {
18
21
  private readonly ctx;
@@ -22,11 +25,18 @@ export declare class PartnerAgentRuntime {
22
25
  private readonly reflection?;
23
26
  private readonly handles;
24
27
  private readonly queues;
28
+ private readonly heartbeatQueues;
29
+ private readonly steeringQueues;
25
30
  private readonly workspaces;
26
31
  constructor(ctx: RuntimeContext, store: PartnerStore, defaultCwd: string, memory?: PartnerMemoryStore | undefined, reflection?: MemoryReflectionService | undefined);
27
- reply(companion: Companion, channelId: string, userId: string, text: string): Promise<string>;
32
+ reply(companion: Companion, channelId: string, userId: string, message: PartnerInboundMessage): Promise<PartnerReply>;
33
+ steer(companion: Companion, channelId: string, userId: string, message: PartnerInboundMessage): Promise<boolean>;
34
+ private deliverSteering;
28
35
  prepareSession(routeId: string): Promise<ChannelSession>;
36
+ isArchived(route: ChannelSession): boolean;
37
+ renewSession(routeId: string): Promise<ChannelSession>;
29
38
  heartbeat(companion: Companion, route: ChannelSession): Promise<string | undefined>;
39
+ private runHeartbeatWhenIdle;
30
40
  observeSessionEvent(session: Session, event: SessionEvent): Promise<void>;
31
41
  private driveHeartbeat;
32
42
  resetCompanion(companionId: string): Promise<void>;
@@ -35,10 +45,12 @@ export declare class PartnerAgentRuntime {
35
45
  resetChannel(channelId: string): Promise<void>;
36
46
  close(): Promise<void>;
37
47
  private drive;
48
+ private persistInbound;
38
49
  private ensureSession;
39
50
  private ensureAgent;
40
51
  private attachSession;
41
52
  }
53
+ export declare function extractOutboundAttachments(text: string, cwd: string): Promise<PartnerOutboundAttachment[]>;
42
54
  export declare function completedTurnEvents(events: readonly SessionEvent[], end: Extract<SessionEvent, {
43
55
  type: 'turn/end';
44
56
  }>): readonly SessionEvent[];
@@ -49,6 +61,7 @@ export declare function resolveAgentOptions(defaultModel: AgentDefaultModelConfi
49
61
  reasoningEffort?: import("@deepseek-ai/dsh-llm").ReasoningEffortId;
50
62
  };
51
63
  export declare function canReuseSession(route: ChannelSession, companionId: string, archivedSessionIds: readonly SessionId[]): boolean;
64
+ export declare function renewedSession(previous: ChannelSession, now?: number): ChannelSession;
52
65
  export declare function partnerCwd(root: string, companionId: string): string;
53
66
  export declare function renderToolProtocol(): string;
54
67
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAA;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAIlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACrE,OAAO,KAAK,EAAa,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAErE,OAAO,KAAK,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAG1G,KAAK,cAAc,GAAG,OAAO,GAAG;IAC9B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IACzB,iBAAiB,EAAE,uBAAuB,CAAA;IAC1C,YAAY,EAAE,YAAY,CAAA;IAC1B,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,KAAK,EAAE,WAAW,CAAA;CACnB,CAAA;AAID,qBAAa,mBAAmB;IAQ5B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAX9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiD;IACjF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmC;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwC;gBAGhD,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,kBAAkB,YAAA,EAC3B,UAAU,CAAC,EAAE,uBAAuB,YAAA;IAGjD,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC;IASrH,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;YASxG,eAAe;IAevB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAS9D,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO;IAIpC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAWtD,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAS3E,oBAAoB;IAY5B,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YAsBjE,cAAc;IAuBtB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAI3C,gBAAgB;IASxB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAOd,KAAK;YAyBL,cAAc;YAwBd,aAAa;YAoBb,WAAW;YA0DX,aAAa;CAS5B;AAMD,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAiChH;AAYD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,GAAG,SAAS,YAAY,EAAE,CAY9I;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAoC;AAS1G,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,uBAAuB,EAAE,SAAS,EAAE,SAAS;;;;EAM9F;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAE7H;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,SAAa,GAAG,cAAc,CAOzF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpE;AAcD,wBAAgB,kBAAkB,IAAI,MAAM,CAS3C"}
@@ -1,7 +1,10 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { mkdir } from 'node:fs/promises';
3
- import { join } from 'node:path';
2
+ import { mkdir, realpath, stat, writeFile } from 'node:fs/promises';
3
+ import { basename, extname, join, relative, resolve } from 'node:path';
4
4
  import { createUserMessage } from '@deepseek-ai/dsh-llm';
5
+ import { heartbeatMessage, heartbeatPrompt, renderHeartbeatContext } from './autonomy.js';
6
+ import { PARTNER_MEDIA_MAX_BYTES, safeMediaName } from './channel-message.js';
7
+ const HEARTBEAT_TIMEOUT_MS = 120_000;
5
8
  export class PartnerAgentRuntime {
6
9
  ctx;
7
10
  store;
@@ -10,6 +13,8 @@ export class PartnerAgentRuntime {
10
13
  reflection;
11
14
  handles = new Map();
12
15
  queues = new Map();
16
+ heartbeatQueues = new Map();
17
+ steeringQueues = new Map();
13
18
  workspaces = new Map();
14
19
  constructor(ctx, store, defaultCwd, memory, reflection) {
15
20
  this.ctx = ctx;
@@ -18,11 +23,11 @@ export class PartnerAgentRuntime {
18
23
  this.memory = memory;
19
24
  this.reflection = reflection;
20
25
  }
21
- async reply(companion, channelId, userId, text) {
26
+ async reply(companion, channelId, userId, message) {
22
27
  const key = `${channelId}:${userId}`;
23
28
  const previous = this.queues.get(key) ?? Promise.resolve();
24
- let output = '';
25
- const current = previous.catch(() => { }).then(async () => { output = await this.drive(companion, channelId, userId, text); });
29
+ let output = { text: '', attachments: [] };
30
+ const current = previous.catch(() => { }).then(async () => { output = await this.drive(companion, channelId, userId, message); });
26
31
  this.queues.set(key, current);
27
32
  try {
28
33
  await current;
@@ -33,6 +38,38 @@ export class PartnerAgentRuntime {
33
38
  this.queues.delete(key);
34
39
  }
35
40
  }
41
+ async steer(companion, channelId, userId, message) {
42
+ const key = `${channelId}:${userId}`;
43
+ const previous = this.steeringQueues.get(key) ?? Promise.resolve();
44
+ let accepted = false;
45
+ const current = previous.catch(() => { }).then(async () => { accepted = await this.deliverSteering(companion, channelId, userId, message); });
46
+ this.steeringQueues.set(key, current);
47
+ try {
48
+ await current;
49
+ return accepted;
50
+ }
51
+ finally {
52
+ if (this.steeringQueues.get(key) === current)
53
+ this.steeringQueues.delete(key);
54
+ }
55
+ }
56
+ async deliverSteering(companion, channelId, userId, message) {
57
+ const route = this.store.snapshot().sessions.find(item => item.channelId === channelId && item.userId === userId && item.companionId === companion.id);
58
+ if (route === undefined)
59
+ return false;
60
+ const agent = this.handles.get(route.sessionId)?.agent ?? this.ctx.agents.get(route.sessionId);
61
+ if (agent === undefined || agent.status !== 'running')
62
+ return false;
63
+ const inbound = await this.persistInbound(route, message);
64
+ const recalled = await this.memory?.recall(companion.id, memoryScope(channelId, userId), inbound.query, 12).catch(() => []);
65
+ if (recalled && recalled.length > 0)
66
+ agent.inject(createUserMessage({
67
+ content: [{ type: 'text', text: renderMemory(recalled) }],
68
+ source: { kind: 'plugin', plugin: '@lemoncat7/dsh-partner', form: 'notice', summary: '伙伴为插话召回了相关长期记忆' },
69
+ }));
70
+ agent.steer(createUserMessage({ content: inbound.content, source: { kind: 'user' } }));
71
+ return true;
72
+ }
36
73
  async prepareSession(routeId) {
37
74
  const route = this.store.snapshot().sessions.find(item => item.id === routeId);
38
75
  if (route === undefined)
@@ -43,19 +80,47 @@ export class PartnerAgentRuntime {
43
80
  await this.ensureAgent(companion, route);
44
81
  return route;
45
82
  }
83
+ isArchived(route) {
84
+ return this.ctx.workspaceRegistry.archivedSessionIds.includes(route.sessionId);
85
+ }
86
+ async renewSession(routeId) {
87
+ const previous = this.store.snapshot().sessions.find(item => item.id === routeId);
88
+ if (previous === undefined)
89
+ throw new Error('伙伴会话不存在');
90
+ if (!this.isArchived(previous))
91
+ return previous;
92
+ const next = renewedSession(previous);
93
+ await this.store.update(state => {
94
+ state.sessions = state.sessions.map(item => item.id === routeId ? next : item);
95
+ });
96
+ return next;
97
+ }
46
98
  async heartbeat(companion, route) {
47
99
  const key = `${route.channelId}:${route.userId}`;
48
- const previous = this.queues.get(key) ?? Promise.resolve();
49
- let output;
50
- const current = previous.catch(() => { }).then(async () => { output = await this.driveHeartbeat(companion, route); });
51
- this.queues.set(key, current);
100
+ const queued = this.heartbeatQueues.get(key);
101
+ if (queued !== undefined)
102
+ return queued;
103
+ const current = this.runHeartbeatWhenIdle(key, companion, route);
104
+ this.heartbeatQueues.set(key, current);
52
105
  try {
53
- await current;
54
- return output;
106
+ return await current;
55
107
  }
56
108
  finally {
57
- if (this.queues.get(key) === current)
58
- this.queues.delete(key);
109
+ if (this.heartbeatQueues.get(key) === current)
110
+ this.heartbeatQueues.delete(key);
111
+ }
112
+ }
113
+ async runHeartbeatWhenIdle(key, companion, route) {
114
+ for (;;) {
115
+ await this.queues.get(key)?.catch(() => { });
116
+ const agent = await this.ensureAgent(companion, route);
117
+ if (agent.status !== 'idle')
118
+ await agent.whenIdle();
119
+ const stableSeq = agent.session.seq;
120
+ await delay(2_000);
121
+ if (this.queues.has(key) || agent.status !== 'idle' || agent.session.seq !== stableSeq)
122
+ continue;
123
+ return this.driveHeartbeat(agent);
59
124
  }
60
125
  }
61
126
  async observeSessionEvent(session, event) {
@@ -84,32 +149,32 @@ export class PartnerAgentRuntime {
84
149
  target.lastMessageAt = Date.now();
85
150
  });
86
151
  }
87
- async driveHeartbeat(companion, route) {
88
- const agent = await this.ensureAgent(companion, route);
89
- if (agent.status !== 'idle')
90
- return undefined;
91
- const recalled = await this.memory?.recall(companion.id, memoryScope(route.channelId, route.userId), '未完成任务 承诺 跟进 风险 提醒', 16).catch(() => []);
92
- if (recalled && recalled.length > 0)
93
- agent.inject(createUserMessage({
94
- content: [{ type: 'text', text: renderMemory(recalled) }],
95
- source: { kind: 'plugin', plugin: '@lemoncat7/dsh-partner', form: 'notice', summary: '心跳召回相关长期记忆' },
96
- }));
152
+ async driveHeartbeat(agent) {
153
+ const tools = this.ctx.tools.schemas(agent);
154
+ agent.inject(createUserMessage({
155
+ content: [{ type: 'text', text: renderHeartbeatContext({ tools }) }],
156
+ source: { kind: 'plugin', plugin: '@lemoncat7/dsh-partner', form: 'notice', summary: `心跳已注入 ${tools.length} 项可用工具` },
157
+ }));
97
158
  const startSeq = agent.session.seq;
98
159
  agent.followup(createUserMessage({
99
- content: [{ type: 'text', text: [
100
- '执行一次伙伴心跳检查。结合当前会话、召回的结构化记忆、每日回顾和可用工具,判断现在是否确实有一条值得主动告诉用户的信息。',
101
- '检查范围:用户明确交代但尚未完成的事项、承诺过的后续跟进、临近风险,以及通过当前已挂载知识库或工具获得的真正有用的新发现。',
102
- '所有主动报告必须能从当前会话、该联系人的结构化记忆、每日回顾或工具结果中找到依据;不得为了活跃而寒暄,不得虚构进展,不得重复近期提醒。',
103
- '如果没有必要通知,只回复:NO_ACTION',
104
- '如果需要通知,只输出准备发送给用户的简短中文消息,不要解释这是心跳。',
105
- ].join('\n') }],
160
+ content: [{ type: 'text', text: heartbeatPrompt() }],
106
161
  source: { kind: 'plugin', plugin: '@lemoncat7/dsh-partner', form: 'notice', summary: '伙伴正在进行低打扰心跳检查' },
107
162
  }));
108
- await agent.whenIdle();
109
- const response = extractAssistantText(agent, startSeq).trim();
110
- if (!response || /^NO_ACTION[。.!!]?$/i.test(response))
111
- return undefined;
112
- return response;
163
+ let timedOut = false;
164
+ const timeout = setTimeout(() => {
165
+ timedOut = true;
166
+ agent.cancel({ kind: 'hook', reason: 'dsh-partner heartbeat exceeded its two-minute budget' }, { keepInbox: true });
167
+ }, HEARTBEAT_TIMEOUT_MS);
168
+ timeout.unref?.();
169
+ try {
170
+ await agent.whenIdle();
171
+ }
172
+ finally {
173
+ clearTimeout(timeout);
174
+ }
175
+ if (timedOut)
176
+ throw new Error('伙伴心跳超过两分钟,已安全终止');
177
+ return heartbeatMessage(extractAssistantText(agent, startSeq));
113
178
  }
114
179
  async resetCompanion(companionId) {
115
180
  await this.releaseCompanion(companionId);
@@ -138,13 +203,16 @@ export class PartnerAgentRuntime {
138
203
  async close() {
139
204
  await Promise.all([...this.handles.values()].map(handle => handle.dispose().catch(() => { })));
140
205
  this.handles.clear();
206
+ this.heartbeatQueues.clear();
207
+ this.steeringQueues.clear();
141
208
  }
142
- async drive(companion, channelId, userId, text) {
209
+ async drive(companion, channelId, userId, message) {
143
210
  const session = await this.ensureSession(companion, channelId, userId);
144
211
  const agent = await this.ensureAgent(companion, session);
145
212
  if (agent.status !== 'idle')
146
213
  await agent.whenIdle();
147
- const recalled = await this.memory?.recall(companion.id, memoryScope(channelId, userId), text, 12).catch(() => []);
214
+ const inbound = await this.persistInbound(session, message);
215
+ const recalled = await this.memory?.recall(companion.id, memoryScope(channelId, userId), inbound.query, 12).catch(() => []);
148
216
  if (recalled && recalled.length > 0)
149
217
  agent.inject(createUserMessage({
150
218
  content: [{ type: 'text', text: renderMemory(recalled) }],
@@ -152,7 +220,7 @@ export class PartnerAgentRuntime {
152
220
  }));
153
221
  const startSeq = agent.session.seq;
154
222
  agent.followup(createUserMessage({
155
- content: [{ type: 'text', text }],
223
+ content: inbound.content,
156
224
  source: { kind: 'user' },
157
225
  }));
158
226
  await agent.whenIdle();
@@ -164,7 +232,33 @@ export class PartnerAgentRuntime {
164
232
  });
165
233
  if (!response)
166
234
  throw new Error('伙伴没有生成可发送的文本回复');
167
- return response;
235
+ return { text: response, attachments: await extractOutboundAttachments(response, session.cwd ?? this.defaultCwd) };
236
+ }
237
+ async persistInbound(session, message) {
238
+ const cwd = session.cwd ?? this.defaultCwd;
239
+ const directory = join(cwd, 'inbound');
240
+ await mkdir(directory, { recursive: true, mode: 0o700 });
241
+ const content = [];
242
+ const notes = [];
243
+ for (const attachment of message.attachments) {
244
+ if (attachment.data.byteLength > PARTNER_MEDIA_MAX_BYTES)
245
+ throw new Error('微信附件超过 64 MB 限制');
246
+ const name = `${Date.now()}-${randomUUID().slice(0, 8)}-${safeMediaName(attachment.name)}`;
247
+ const path = join(directory, name);
248
+ await writeFile(path, attachment.data, { flag: 'wx', mode: 0o600 });
249
+ notes.push(`微信${attachment.kind === 'image' ? '图片' : '文档'}已保存:${path}`);
250
+ if (attachment.kind === 'image') {
251
+ const mediaType = attachment.mediaType;
252
+ const ref = await this.ctx.attachments.saveImage({ data: attachment.data, mediaType, name: attachment.name });
253
+ content.push({ type: 'image', attachment: ref });
254
+ }
255
+ }
256
+ const visibleText = [message.text.trim(), ...notes].filter(Boolean).join('\n\n');
257
+ if (visibleText)
258
+ content.unshift({ type: 'text', text: visibleText });
259
+ if (content.length === 0)
260
+ content.push({ type: 'text', text: '[微信附件消息]' });
261
+ return { content, query: [message.text, ...message.attachments.map(item => item.name)].filter(Boolean).join(' ') };
168
262
  }
169
263
  async ensureSession(companion, channelId, userId) {
170
264
  const existing = this.store.snapshot().sessions.find(item => item.channelId === channelId && item.userId === userId);
@@ -256,6 +350,65 @@ export class PartnerAgentRuntime {
256
350
  await (await workspace).attachSession(route.sessionId);
257
351
  }
258
352
  }
353
+ function delay(milliseconds) {
354
+ return new Promise(resolve => setTimeout(resolve, milliseconds));
355
+ }
356
+ export async function extractOutboundAttachments(text, cwd) {
357
+ const candidates = new Set();
358
+ for (const match of text.matchAll(/\[[^\]]*\]\((?:<)?(file:\/\/)?([^)>]+)(?:>)?\)/g)) {
359
+ const value = decodeURIComponent(match[2] ?? '').trim();
360
+ if (value)
361
+ candidates.add(value);
362
+ }
363
+ for (const match of text.matchAll(/`([^`\n]+)`/g)) {
364
+ const value = match[1]?.trim();
365
+ if (value && mediaTypeFor(value))
366
+ candidates.add(value);
367
+ }
368
+ for (const line of text.split('\n').map(item => item.trim())) {
369
+ const value = line.replace(/^`|`$/g, '');
370
+ if (value.startsWith('/') && !value.includes(' '))
371
+ candidates.add(value);
372
+ }
373
+ const root = await realpath(cwd);
374
+ const result = [];
375
+ const included = new Set();
376
+ for (const candidate of candidates) {
377
+ if (result.length >= 8)
378
+ break;
379
+ const target = resolve(root, candidate);
380
+ let actual;
381
+ try {
382
+ actual = await realpath(target);
383
+ }
384
+ catch {
385
+ continue;
386
+ }
387
+ if (included.has(actual))
388
+ continue;
389
+ const rel = relative(root, actual);
390
+ if (rel.startsWith('..') || rel === '..' || resolve(root, rel) !== actual)
391
+ continue;
392
+ const info = await stat(actual);
393
+ if (!info.isFile() || info.size > PARTNER_MEDIA_MAX_BYTES)
394
+ continue;
395
+ const mediaType = mediaTypeFor(actual);
396
+ if (!mediaType)
397
+ continue;
398
+ included.add(actual);
399
+ result.push({ path: actual, name: basename(actual), mediaType, kind: mediaType.startsWith('image/') ? 'image' : 'file' });
400
+ }
401
+ return result;
402
+ }
403
+ function mediaTypeFor(path) {
404
+ return {
405
+ '.png': 'image/png', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg', '.gif': 'image/gif', '.webp': 'image/webp',
406
+ '.pdf': 'application/pdf', '.doc': 'application/msword', '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
407
+ '.xls': 'application/vnd.ms-excel', '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
408
+ '.ppt': 'application/vnd.ms-powerpoint', '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
409
+ '.txt': 'text/plain', '.md': 'text/markdown', '.csv': 'text/csv', '.json': 'application/json', '.zip': 'application/zip',
410
+ }[extname(path).toLowerCase()];
411
+ }
259
412
  export function completedTurnEvents(events, end) {
260
413
  let startSeq;
261
414
  for (let index = events.length - 1; index >= 0; index -= 1) {
@@ -288,6 +441,14 @@ export function resolveAgentOptions(defaultModel, companion) {
288
441
  export function canReuseSession(route, companionId, archivedSessionIds) {
289
442
  return route.companionId === companionId && !archivedSessionIds.includes(route.sessionId);
290
443
  }
444
+ export function renewedSession(previous, now = Date.now()) {
445
+ return {
446
+ ...previous,
447
+ id: `route-${randomUUID()}`,
448
+ sessionId: `session-${randomUUID()}`,
449
+ lastMessageAt: now,
450
+ };
451
+ }
291
452
  export function partnerCwd(root, companionId) {
292
453
  return join(root, 'partners', companionId);
293
454
  }
@@ -309,6 +470,7 @@ export function renderToolProtocol() {
309
470
  '`run_code` 的程序只返回完成当前任务所需的精简结果。需要顺序依赖时逐个 `await`,互不依赖的只读调用才可并行。',
310
471
  '若工具结果提示 “only `run_code` is callable directly”,说明路由方式错误;立即在同一轮改用 `run_code` 重试。只有规范重试也失败时,才向用户说明真正的失败原因。',
311
472
  '若当前请求原生暴露了目标工具,则可以直接调用该原生工具;不要臆造未出现在顶层清单或生成 SDK 中的工具。',
473
+ '需要把生成的图片或文档交给用户时,最终回复必须用 Markdown 链接明确引用伙伴工作目录中的文件,例如 `[下载文件](/绝对路径/文件.pdf)`;不要只说“文件在这里”。渠道会在确认真实路径位于伙伴工作目录后发送附件。',
312
474
  ].join('\n');
313
475
  }
314
476
  function extractAssistantText(agent, fromSeq) {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAKhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAgBxD,MAAM,OAAO,mBAAmB;IAMX;IACA;IACA;IACA;IACA;IATF,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAA;IACxC,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAA;IACzC,UAAU,GAAG,IAAI,GAAG,EAA8B,CAAA;IAEnE,YACmB,GAAmB,EACnB,KAAmB,EACnB,UAAkB,EAClB,MAA2B,EAC3B,UAAoC;QAJpC,QAAG,GAAH,GAAG,CAAgB;QACnB,UAAK,GAAL,KAAK,CAAc;QACnB,eAAU,GAAV,UAAU,CAAQ;QAClB,WAAM,GAAN,MAAM,CAAqB;QAC3B,eAAU,GAAV,UAAU,CAA0B;IACpD,CAAC;IAEJ,KAAK,CAAC,KAAK,CAAC,SAAoB,EAAE,SAAiB,EAAE,MAAc,EAAE,IAAY;QAC/E,MAAM,GAAG,GAAG,GAAG,SAAS,IAAI,MAAM,EAAE,CAAA;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAA;QAC1D,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,GAAG,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QAC5H,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAC7B,IAAI,CAAC;YAAC,MAAM,OAAO,CAAC;YAAC,OAAO,MAAM,CAAA;QAAC,CAAC;gBAAS,CAAC;YAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAAC,CAAC;IAChH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;QAC9E,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAA;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,WAAW,CAAC,CAAA;QAC9F,IAAI,SAAS,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAA;QACvD,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACxC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAoB,EAAE,KAAqB;QACzD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE,CAAA;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAA;QAC1D,IAAI,MAA0B,CAAA;QAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,GAAG,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACnH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAC7B,IAAI,CAAC;YAAC,MAAM,OAAO,CAAC;YAAC,OAAO,MAAM,CAAA;QAAC,CAAC;gBAAS,CAAC;YAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO;gBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAAC,CAAC;IAChH,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAgB,EAAE,KAAmB;QAC7D,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,OAAM;QAChH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,CAAC,CAAA;QACxF,IAAI,KAAK,KAAK,SAAS;YAAE,OAAM;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,WAAW,CAAC,CAAA;QAC9F,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;YAAE,OAAM;QAC3E,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACzD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;QACpG,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,mBAAmB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAClG,MAAM,QAAQ,GAAG,MAAM,EAAE,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACxF,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC7J,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa;YAAE,OAAM;QACvC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE;YACvC,EAAE,EAAE,QAAQ,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;YAC1G,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa;SAChF,CAAC,CAAA;QACF,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAA;YAChE,IAAI,MAAM;gBAAE,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC/C,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,SAAoB,EAAE,KAAqB;QACtE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACtD,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,SAAS,CAAA;QAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QAC7I,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC;gBAClE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,wBAAwB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;aACpG,CAAC,CAAC,CAAA;QACH,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAA;QAClC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC/B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;wBAC9B,8DAA8D;wBAC9D,+DAA+D;wBAC/D,qEAAqE;wBACrE,wBAAwB;wBACxB,oCAAoC;qBACrC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACf,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,wBAAwB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE;SACvG,CAAC,CAAC,CAAA;QACH,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAA;QACtB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAA;QAC7D,IAAI,CAAC,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAA;QACvE,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,WAAmB;QACtC,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;QACxC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;IACxH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,WAAmB;QACvC,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;IAC1C,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,WAAmB;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,CAAA;QAChG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACnC,MAAM,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACzC,CAAC,CAAC,CAAC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAA;QAC5F,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACnC,MAAM,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACzC,CAAC,CAAC,CAAC,CAAA;QACH,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;IACpH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7F,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,SAAoB,EAAE,SAAiB,EAAE,MAAc,EAAE,IAAY;QACvF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QACtE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACxD,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;YAAE,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAA;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QAClH,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC;gBAClE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,wBAAwB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE;aAC3G,CAAC,CAAC,CAAA;QACH,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAA;QAClC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC/B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACjC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;SACzB,CAAC,CAAC,CAAA;QACH,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAA;QACtB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACtD,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAA;YAClE,IAAI,MAAM;gBAAE,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC/C,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QAChD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,SAAoB,EAAE,SAAiB,EAAE,MAAc;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;QACpH,IAAI,QAAQ,KAAK,SAAS,IAAI,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,kBAAkB,CAAC;YAAE,OAAO,QAAQ,CAAA;QACrI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,OAAO,GAAmB;YAC9B,EAAE,EAAE,SAAS,UAAU,EAAE,EAAE;YAC3B,SAAS;YACT,MAAM;YACN,WAAW,EAAE,SAAS,CAAC,EAAE;YACzB,SAAS,EAAE,WAAW,UAAU,EAAE,EAAE;YACpC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;YAC9C,aAAa,EAAE,GAAG;SACnB,CAAA;QACD,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC9B,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAA;YACzG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;QACF,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,SAAoB,EAAE,KAAqB;QACnE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAA;QACxC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC9C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAC1C,OAAO,IAAI,CAAC,KAAK,CAAA;QACnB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,SAAsB,CAAC,CAAA;QAC9D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YAC1C,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAA;QAC1E,MAAM,KAAK,GAAG,KAAK,EAAE,QAAiB,EAAiB,EAAE;YACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAA6B,CAAA;YACxE,IAAI,OAAO,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;YACrE,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;YACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;YAC1H,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC;gBAC5B,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,CAAC,EAAE;gBACV,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC;aAC/B,CAAC,CAAA;YACF,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC;gBAC5B,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,CAAC,CAAC;gBACT,IAAI,EAAE,kBAAkB,EAAE;aAC3B,CAAC,CAAA;YACF,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC;oBAC7D,IAAI,EAAE,0BAA0B;oBAChC,KAAK,EAAE,CAAC,CAAC;oBACT,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC;iBAC3B,CAAC,CAAA;QACJ,CAAC,CAAA;QACD,IAAI,MAAmB,CAAA;QACvB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;gBACpC,eAAe,EAAE,KAAK,CAAC,SAAsB;gBAC7C,YAAY,EAAE,OAAO;gBACrB,KAAK;aACN,CAAC,CAAA;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;gBACpC,SAAS,EAAE,KAAK,CAAC,SAAsB;gBACvC,IAAI,EAAE;oBACJ,GAAG;oBACH,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACnE;gBACD,YAAY,EAAE,OAAO;gBACrB,KAAK;aACN,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QACzC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAC1C,OAAO,MAAM,CAAC,KAAK,CAAA;IACrB,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,SAAoB,EAAE,KAAqB;QACrE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAA;QACxC,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACxC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC,CAAA;YAC7G,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QACrC,CAAC;QACD,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,SAAsB,CAAC,CAAA;IACrE,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,MAA+B,EAAE,GAAgD;IACnH,IAAI,QAA4B,CAAA;IAChC,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;YAAE,SAAQ;QACrF,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACrC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAA;YACnB,MAAK;QACP,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IACrC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;AACzE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,MAAc,IAAY,OAAO,GAAG,SAAS,IAAI,MAAM,EAAE,CAAA,CAAC,CAAC;AAE1G,SAAS,YAAY,CAAC,OAAuE;IAC3F,OAAO;QACL,6CAA6C;QAC7C,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;KAClH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAqC,EAAE,SAAoB;IAC7F,OAAO;QACL,GAAG,YAAY,CAAC,gBAAgB,EAAE;QAClC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAqB,EAAE,WAAmB,EAAE,kBAAwC;IAClH,OAAO,KAAK,CAAC,WAAW,KAAK,WAAW,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAsB,CAAC,CAAA;AACxG,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,WAAmB;IAC1D,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAA;AAC5C,CAAC;AAED,SAAS,aAAa,CAAC,SAAoB;IACzC,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAA;IACtH,OAAO;QACL,cAAc,SAAS,CAAC,IAAI,SAAS;QACrC,MAAM,SAAS,CAAC,IAAI,EAAE;QACtB,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;QAC1D,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE;QAClE,iBAAiB,YAAY,sCAAsC;QACnE,gGAAgG;KACjG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,mDAAmD;QACnD,iMAAiM;QACjM,iEAAiE;QACjE,0GAA0G;QAC1G,uDAAuD;KACxD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAY,EAAE,OAAe;IACzD,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,GAAG,GAAG,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW;YAAE,SAAQ;QACjG,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;aACpC,MAAM,CAAC,CAAC,KAAK,EAA2C,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;aACjF,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7D,IAAI,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;AACrC,CAAC;AAED,SAAS,WAAW,CAAC,OAAmD;IACtE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAA2C,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;SAC/H,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC/D,CAAC"}
1
+ {"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"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"}
package/lib/api.d.ts CHANGED
@@ -8,6 +8,7 @@ import { WeixinLoginManager } from './channels/weixin/login.js';
8
8
  import { PartnerAgentRuntime } from './agent-runtime.js';
9
9
  import { PartnerMemoryStore } from './memory-store.js';
10
10
  import { HeartbeatScheduler } from './heartbeat.js';
11
+ import { DailyReviewScheduler } from './daily-review.js';
11
12
  export interface WebServerLike {
12
13
  register(route: {
13
14
  kind: 'prefix';
@@ -26,6 +27,7 @@ interface ApiRuntime {
26
27
  login: WeixinLoginManager;
27
28
  memory: PartnerMemoryStore;
28
29
  heartbeat: HeartbeatScheduler;
30
+ dailyReview: DailyReviewScheduler;
29
31
  }
30
32
  export declare function registerPartnerApi(webServer: WebServerLike, prefix: string, runtime: ApiRuntime): () => void;
31
33
  export {};
package/lib/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAqB,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAInD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,GAAG,MAAM,IAAI,CAAA;CACxI;AAED,UAAU,UAAU;IAClB,GAAG,EAAE,OAAO,GAAG;QAAE,YAAY,EAAE,YAAY,CAAA;KAAE,CAAA;IAC7C,KAAK,EAAE,YAAY,CAAA;IACnB,WAAW,EAAE,sBAAsB,CAAA;IACnC,QAAQ,EAAE,cAAc,CAAA;IACxB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,KAAK,EAAE,kBAAkB,CAAA;IACzB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,SAAS,EAAE,kBAAkB,CAAA;CAC9B;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,IAAI,CAU5G"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAqB,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAIxD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,GAAG,MAAM,IAAI,CAAA;CACxI;AAED,UAAU,UAAU;IAClB,GAAG,EAAE,OAAO,GAAG;QAAE,YAAY,EAAE,YAAY,CAAA;KAAE,CAAA;IAC7C,KAAK,EAAE,YAAY,CAAA;IACnB,WAAW,EAAE,sBAAsB,CAAA;IACnC,QAAQ,EAAE,cAAc,CAAA;IACxB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,KAAK,EAAE,kBAAkB,CAAA;IACzB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,SAAS,EAAE,kBAAkB,CAAA;IAC7B,WAAW,EAAE,oBAAoB,CAAA;CAClC;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,IAAI,CAU5G"}
package/lib/api.js CHANGED
@@ -22,7 +22,7 @@ async function dispatch(req, res, prefix, runtime) {
22
22
  const segments = relative ? relative.split('/').map(decodeURIComponent) : [];
23
23
  const method = req.method ?? 'GET';
24
24
  if (method === 'GET' && segments[0] === 'health')
25
- return sendJson(res, 200, { ok: true, service: 'dsh-partner', schemaVersion: 6 });
25
+ return sendJson(res, 200, { ok: true, service: 'dsh-partner', schemaVersion: 7 });
26
26
  if (method === 'GET' && segments[0] === 'models' && segments.length === 1) {
27
27
  const providers = await Promise.all(runtime.ctx.llm.listProviders().map(async (provider) => ({
28
28
  id: provider.id, name: provider.name,
@@ -107,6 +107,15 @@ async function dispatch(req, res, prefix, runtime) {
107
107
  requiredCompanion(runtime.store, id);
108
108
  return sendJson(res, 200, await runtime.heartbeat.trigger(id, true));
109
109
  }
110
+ if (id !== undefined && method === 'POST' && segments[2] === 'memory' && segments[3] === 'review' && segments.length === 4) {
111
+ mutation(req);
112
+ requiredCompanion(runtime.store, id);
113
+ return sendJson(res, 200, await runtime.dailyReview.trigger(id, true));
114
+ }
115
+ if (id !== undefined && method === 'GET' && segments[2] === 'memory' && segments[3] === 'graph' && segments.length === 4) {
116
+ requiredCompanion(runtime.store, id);
117
+ return sendJson(res, 200, await runtime.memory.relations(id));
118
+ }
110
119
  }
111
120
  if (segments[0] === 'weixin' && segments[1] === 'login') {
112
121
  if (method === 'POST' && segments.length === 2) {
@@ -181,6 +190,12 @@ async function dispatch(req, res, prefix, runtime) {
181
190
  const route = await runtime.agents.prepareSession(id);
182
191
  return sendJson(res, 200, { sessionId: route.sessionId });
183
192
  }
193
+ if (id !== undefined && method === 'POST' && segments[2] === 'renew' && segments.length === 3) {
194
+ mutation(req);
195
+ const route = await runtime.agents.renewSession(id);
196
+ await runtime.agents.prepareSession(route.id);
197
+ return sendJson(res, 201, { routeId: route.id, sessionId: route.sessionId });
198
+ }
184
199
  }
185
200
  throw httpError(404, 'Partner API route was not found');
186
201
  }
@@ -191,7 +206,8 @@ async function snapshot(runtime) {
191
206
  name: item.name ?? item.id,
192
207
  ...(item.broken ? { broken: item.broken } : {}),
193
208
  }))).catch(() => []);
194
- return { companions: state.companions, channels: await runtime.channels.views(), pairings: state.pairings, sessions: state.sessions, heartbeatStates: state.heartbeatStates, presets };
209
+ const sessions = state.sessions.map(item => ({ ...item, archived: runtime.agents.isArchived(item) }));
210
+ return { companions: state.companions, channels: await runtime.channels.views(), pairings: state.pairings, sessions, heartbeatStates: state.heartbeatStates, presets };
195
211
  }
196
212
  function createId(prefix) { return `${prefix}-${randomBytes(10).toString('hex')}`; }
197
213
  function localDay(now) { const date = new Date(now); return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`; }