@rezti/dsh-rez-suite 0.1.79 → 0.1.80

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/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 0.1.80 — 2026-09-28
2
+
3
+ - 销售房间自动对老板、销售、运营显示;复用现有目录并保留用户记忆。
4
+ - 通讯插件 0.1.1:WhatsApp 发送预演与启用文档,演示数据,无实际发送。
5
+
1
6
  # 更新日志
2
7
 
3
8
  员工只装 `@rezti/dsh-rez-suite`。设置 → 插件 → **ReZ-TI** → **更新日志** 也能看到同一份说明。发版时把这一节发给同事即可。
package/README.md CHANGED
@@ -22,3 +22,6 @@ dsh plugin --profile web add @rezti/dsh-rez-suite@0.1.78
22
22
  说明书 / 规格书:输入栏回形针上传原 PDF(官方对话只收图)。入库后立刻用 Nextcloud MCP `parse_document` 抽字交回对话。看图:对话框直接贴图即可(先转文字再交给 DeepSeek),网页对话模型不要改。不要用微信发 PDF。先入 TAPD **测试中** 转凯文终审,批准后再进 `Marketing/Publish`。
23
23
 
24
24
  拆分包(`dsh-rez-odoo` 等)给开发改代码用。Web 面板(含微信扫码)暂时仍在本包。
25
+
26
+
27
+ Sales room: shown automatically for boss, sales and operations roles. Includes demo-thread analysis, reply drafting and WhatsApp dry runs; live sending is not enabled.
package/README.zh.md CHANGED
@@ -115,3 +115,6 @@ MCP 工具按 \`mcp__<server>__<rawName>\` 注册,Preset 加载器用通配符
115
115
  ## Token / 审计
116
116
 
117
117
  插件监听 MCP 工具调用,写入 \`~/.dsh/dsh-rez-suite.sqlite\`。Token 按参数/输出文本长度估算(4 字符 ≈ 1 token),费用按面板单价计算,月预算超限仅在面板告警、不阻断调用。
118
+
119
+
120
+ 销售房间:身份选择老板、销售或运营后自动出现。支持演示会话分析、回复起草和 WhatsApp 发送预演;当前不能实际发送消息。
package/lib/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- //#region ../../node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.3/node_modules/@deepseek-ai/cosmokit/lib/types/misc.d.ts
1
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.3/node_modules/@deepseek-ai/cosmokit/lib/types/misc.d.ts
2
2
  /** String/symbol keyed dictionary type. */
3
3
  type Dict<T = any, K extends string | symbol = string> = { [key in K]: T };
4
4
  /** Wrap a value in `Promise`, preserving the resolved type of existing promises. */
@@ -6,7 +6,7 @@ type Promisify<T> = Promise<T extends Promise<infer S> ? S : T>;
6
6
  /** Accept a value or promise unless the value type is already promise-like. */
7
7
  type Awaitable<T> = [T] extends [Promise<unknown>] ? T : T | Promise<T>;
8
8
  //#endregion
9
- //#region ../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts
9
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts
10
10
  /** The Standard Typed interface. This is a base type extended by other specs. */
11
11
  interface StandardTypedV1<Input = unknown, Output = Input> {
12
12
  /** The Standard properties. */
@@ -84,7 +84,7 @@ declare namespace StandardSchemaV1 {
84
84
  }
85
85
  /** The Standard JSON Schema interface. */
86
86
  //#endregion
87
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/utils.d.ts
87
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/utils.d.ts
88
88
  /** Ordered collection of disposable values with O(1) deletion by value. */
89
89
  declare class DisposableList<T extends WeakKey> {
90
90
  private sn;
@@ -117,7 +117,7 @@ declare const symbols: {
117
117
  resolveConfig: typeof Service.resolveConfig;
118
118
  };
119
119
  //#endregion
120
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/registry.d.ts
120
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/registry.d.ts
121
121
  /**
122
122
  * Service dependency declaration accepted by plugins and the `@Inject`
123
123
  * decorator.
@@ -309,7 +309,7 @@ declare class RegistryService {
309
309
  plugin(plugin: Plugin, config?: any, getOuterStack?: () => string[]): Fiber & PromiseLike<Fiber>;
310
310
  }
311
311
  //#endregion
312
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/reflect.d.ts
312
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/reflect.d.ts
313
313
  declare module './context.ts' {
314
314
  interface Context {
315
315
  /**
@@ -493,7 +493,7 @@ declare class ReflectService {
493
493
  bind<T extends Function>(callback: T): T;
494
494
  }
495
495
  //#endregion
496
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/fiber.d.ts
496
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/fiber.d.ts
497
497
  declare module './context.ts' {
498
498
  interface Context extends Pick<Fiber, 'effect'> {
499
499
  /** The fiber (plugin runtime instance) that owns this context. */
@@ -655,7 +655,7 @@ declare class Fiber {
655
655
  update(config: any, noSave?: boolean): void | Promise<void>;
656
656
  }
657
657
  //#endregion
658
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/events.d.ts
658
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/events.d.ts
659
659
  /** Extract the parameter tuple from a function type. */
660
660
  type Parameters<F> = F extends ((...args: infer P) => any) ? P : never;
661
661
  /** Extract the return type from a function type. */
@@ -886,7 +886,7 @@ interface Events {
886
886
  'internal/dispatch'(mode: DispatchMode, name: string, args: any[], thisArg: any): void;
887
887
  }
888
888
  //#endregion
889
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/logger.d.ts
889
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/logger.d.ts
890
890
  declare module './context.ts' {
891
891
  interface Intercept {
892
892
  logger: LoggerService.Intercept;
@@ -974,7 +974,7 @@ declare class LoggerService {
974
974
  [symbols.invoke](name?: string): Logger;
975
975
  }
976
976
  //#endregion
977
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/context.d.ts
977
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/context.d.ts
978
978
  /**
979
979
  * Public shape of a Cordis context.
980
980
  *
@@ -1069,7 +1069,7 @@ declare class Context {
1069
1069
  intercept(name: string, config: any): this;
1070
1070
  }
1071
1071
  //#endregion
1072
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/service.d.ts
1072
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/service.d.ts
1073
1073
  /**
1074
1074
  * Base class for services that expose a named API on `ctx`.
1075
1075
  *
package/lib/client.js CHANGED
@@ -4,7 +4,7 @@ window.__ModuleLoader__.load({
4
4
  var module = { exports: {} };
5
5
  var exports = module.exports;
6
6
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
7
- (function(){var id="dsh-rez-suite-css";if(typeof document==="undefined"||document.getElementById(id))return;var s=document.createElement("style");s.id=id;s.textContent=".r9dlUa_wordmark {\n min-width: 0;\n color: inherit;\n align-items: center;\n gap: 8px;\n display: inline-flex;\n overflow: hidden;\n}\n\n.r9dlUa_mark {\n object-fit: contain;\n flex: none;\n width: 28px;\n height: 28px;\n display: block;\n}\n\n.r9dlUa_markOnly {\n object-fit: contain;\n width: 100%;\n max-width: 28px;\n height: 100%;\n max-height: 28px;\n display: block;\n}\n\n.r9dlUa_name {\n letter-spacing: .02em;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-size: 15px;\n font-weight: 650;\n overflow: hidden;\n}\n\n.r9dlUa_badge {\n letter-spacing: .06em;\n opacity: .72;\n white-space: nowrap;\n border: 1px solid;\n border-radius: 4px;\n flex: none;\n padding: 2px 6px;\n font-size: 10px;\n font-weight: 700;\n line-height: 1.2;\n}\n.LOjPTW_shell {\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n display: flex;\n}\n\n.LOjPTW_card {\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3);\n border-radius: 12px;\n list-style: none;\n transition: border-color .16s, background .16s;\n}\n\n.LOjPTW_card:hover {\n border-color: var(--dsw-alias-label-dimmed);\n}\n\n.LOjPTW_cardOpen {\n background: var(--dsw-alias-bg-layer-2);\n border-color: var(--dsw-alias-label-dimmed);\n}\n\n.LOjPTW_header {\n appearance: none;\n width: 100%;\n font: inherit;\n color: inherit;\n text-align: left;\n cursor: pointer;\n background: none;\n border: 0;\n border-radius: 12px;\n align-items: center;\n gap: 12px;\n padding: 14px 16px;\n display: flex;\n}\n\n.LOjPTW_header:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: -2px;\n}\n\n.LOjPTW_headText {\n flex-direction: column;\n flex: 1;\n gap: 4px;\n min-width: 0;\n display: flex;\n}\n\n.LOjPTW_name {\n color: var(--dsw-alias-label-primary);\n font-size: 15px;\n font-weight: 600;\n line-height: 1.4;\n}\n\n.LOjPTW_description {\n color: var(--dsw-alias-label-tertiary);\n font-size: 13px;\n line-height: 1.5;\n}\n\n.LOjPTW_chevron {\n color: var(--dsw-alias-label-tertiary);\n flex: none;\n transition: transform .16s;\n}\n\n.LOjPTW_chevronOpen {\n transform: rotate(180deg);\n}\n\n.LOjPTW_body {\n border-top: 1px solid var(--dsw-alias-border-l2);\n margin: 0 16px 12px;\n padding-top: 8px;\n}\n\n.LOjPTW_tabBar {\n border-bottom: 1px solid var(--dsw-alias-border-l1);\n flex: none;\n gap: 2px;\n display: flex;\n}\n\n.LOjPTW_tab {\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n background: none;\n border: none;\n border-bottom: 2px solid #0000;\n border-radius: 6px 6px 0 0;\n padding: 7px 14px;\n font-size: 13px;\n}\n\n.LOjPTW_tab:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.LOjPTW_tab[data-active] {\n color: var(--dsw-alias-label-primary);\n border-bottom-color: var(--dsw-alias-state-business-primary);\n font-weight: 600;\n}\n\n.LOjPTW_tabBody {\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n padding: 12px 0 4px;\n display: flex;\n}\n\n.LOjPTW_section {\n border: 1px solid var(--dsw-alias-border-l1);\n background: var(--dsw-alias-bg-layer-1, var(--dsw-alias-bg-base));\n border-radius: 10px;\n flex-direction: column;\n gap: 8px;\n padding: 12px;\n display: flex;\n}\n\n.LOjPTW_sectionTitle {\n color: var(--dsw-alias-label-primary);\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n}\n\n.LOjPTW_field {\n flex-direction: column;\n align-items: stretch;\n gap: 4px;\n display: flex;\n}\n\n.LOjPTW_label {\n color: var(--dsw-alias-label-secondary);\n font-size: 12.5px;\n}\n\n.LOjPTW_input, .LOjPTW_select {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-specific-input-major, var(--dsw-alias-bg-layer-3));\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 8px;\n outline: none;\n padding: 6px 8px;\n font-size: 13px;\n}\n\n.LOjPTW_checkbox {\n justify-self: start;\n width: 15px;\n height: 15px;\n}\n\n.LOjPTW_wecomRow {\n grid-template-columns: minmax(7rem, .8fr) minmax(8rem, 1fr) minmax(8rem, 1fr) auto;\n align-items: end;\n gap: 8px;\n display: grid;\n}\n\n.LOjPTW_wecomRow .LOjPTW_message {\n grid-column: 1 / -1;\n}\n\n.LOjPTW_toolbar {\n flex-wrap: wrap;\n flex: none;\n align-items: center;\n gap: 8px;\n display: flex;\n}\n\n.LOjPTW_button {\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-specific-input-major, var(--dsw-alias-bg-layer-3));\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n border-radius: 8px;\n padding: 7px 12px;\n font-size: 13px;\n}\n\n.LOjPTW_button:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.LOjPTW_button:disabled {\n opacity: .4;\n cursor: default;\n}\n\n.LOjPTW_primaryButton {\n background: var(--dsw-alias-label-primary);\n border-color: var(--dsw-alias-label-primary);\n color: var(--dsw-alias-bg-layer-3);\n}\n\n.LOjPTW_dangerButton {\n background: var(--dsw-alias-state-danger, #c62828);\n border-color: var(--dsw-alias-state-danger, #c62828);\n color: #fff;\n}\n\n.LOjPTW_qr {\n background: #fff;\n border-radius: 8px;\n width: 200px;\n height: 200px;\n margin: 8px 0;\n display: block;\n}\n\n.LOjPTW_message {\n color: var(--dsw-alias-label-secondary);\n margin: 0;\n font-size: 12.5px;\n line-height: 1.5;\n}\n\n.LOjPTW_error {\n color: var(--dsw-alias-state-danger, #c62828);\n}\n\n.LOjPTW_tableWrap {\n border: 1px solid var(--dsw-alias-border-l1);\n border-radius: 10px;\n overflow: auto;\n}\n\n.LOjPTW_table {\n border-collapse: collapse;\n width: 100%;\n font-size: 12.5px;\n}\n\n.LOjPTW_table th {\n z-index: 1;\n text-align: left;\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-layer-1));\n padding: 8px 10px;\n position: sticky;\n top: 0;\n}\n\n.LOjPTW_table td {\n border-top: 1px solid var(--dsw-alias-border-l1);\n vertical-align: top;\n padding: 8px 10px;\n}\n\n.LOjPTW_boardTitle {\n color: var(--dsw-alias-label-primary);\n margin: 16px 0 4px;\n font-size: 13px;\n font-weight: 600;\n}\n\n.LOjPTW_badge {\n border-radius: 999px;\n padding: 2px 8px;\n font-size: 11px;\n display: inline-block;\n}\n\n.LOjPTW_badgeOk {\n color: #229a55;\n background: #229a5524;\n}\n\n.LOjPTW_badgeFail {\n color: #c62828;\n background: #c6282824;\n}\n\n.LOjPTW_cards {\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 8px;\n display: grid;\n}\n\n.LOjPTW_stat {\n border: 1px solid var(--dsw-alias-border-l1);\n border-radius: 10px;\n padding: 10px;\n}\n\n.LOjPTW_cardLabel {\n color: var(--dsw-alias-label-tertiary);\n font-size: 11px;\n}\n\n.LOjPTW_cardValue {\n color: var(--dsw-alias-label-primary);\n font-size: 15px;\n font-weight: 600;\n}\n\n.LOjPTW_upgradeLayer {\n flex: none;\n align-items: center;\n width: 100%;\n height: 42px;\n margin: 8px 0 0;\n display: flex;\n position: relative;\n}\n\n.LOjPTW_upgradeLayerRail {\n width: 36px;\n height: 36px;\n margin: 0;\n}\n\n.LOjPTW_upgradeButton {\n width: calc(100% + 4px);\n height: 42px;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n background: none;\n border: none;\n border-radius: 12px;\n align-items: center;\n gap: 8px;\n margin: 0 -2px;\n padding: 0 10px 0 8px;\n font-family: inherit;\n font-size: 14px;\n display: inline-flex;\n overflow: hidden;\n}\n\n.LOjPTW_upgradeButton:hover, .LOjPTW_upgradeButton[data-outdated] {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.LOjPTW_upgradeButton:disabled {\n cursor: progress;\n opacity: .72;\n}\n\n.LOjPTW_upgradeButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: -2px;\n}\n\n.LOjPTW_upgradeLayerRail .LOjPTW_upgradeButton {\n border-radius: 50%;\n justify-content: center;\n gap: 0;\n width: 36px;\n height: 36px;\n padding: 0;\n}\n\n.LOjPTW_upgradeLabel {\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n overflow: hidden;\n}\n\n.LOjPTW_upgradeMeta {\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n flex: none;\n margin-left: auto;\n font-size: 12px;\n line-height: 16px;\n}\n\n.LOjPTW_upgradeDot {\n background: var(--dsw-alias-brand-primary);\n border-radius: 50%;\n flex: none;\n width: 7px;\n height: 7px;\n}\n\n.LOjPTW_changelogDate {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-tertiary);\n margin-left: 8px;\n font-weight: 500;\n}\n\n.LOjPTW_changelogBlock {\n flex-direction: column;\n gap: 6px;\n display: flex;\n}\n\n.LOjPTW_changelogHeading {\n color: var(--dsw-alias-label-secondary);\n font-size: 12.5px;\n font-weight: 600;\n}\n\n.LOjPTW_changelogList {\n color: var(--dsw-alias-label-primary);\n flex-direction: column;\n gap: 6px;\n margin: 0;\n padding-left: 18px;\n font-size: 13px;\n line-height: 1.55;\n display: flex;\n}\n\n.LOjPTW_changelogList li + li {\n margin: 0;\n}\n\n.LOjPTW_changelogCode {\n background: var(--dsw-alias-bg-layer-3);\n border: 1px solid var(--dsw-alias-border-l2);\n word-break: break-all;\n border-radius: 6px;\n padding: 1px 6px;\n font-size: 12px;\n}\n";document.head.appendChild(s);})();
7
+ (function(){var id="dsh-rez-suite-css";if(typeof document==="undefined"||document.getElementById(id))return;var s=document.createElement("style");s.id=id;s.textContent=".VSlLJG_wordmark {\n min-width: 0;\n color: inherit;\n align-items: center;\n gap: 8px;\n display: inline-flex;\n overflow: hidden;\n}\n\n.VSlLJG_mark {\n object-fit: contain;\n flex: none;\n width: 28px;\n height: 28px;\n display: block;\n}\n\n.VSlLJG_markOnly {\n object-fit: contain;\n width: 100%;\n max-width: 28px;\n height: 100%;\n max-height: 28px;\n display: block;\n}\n\n.VSlLJG_name {\n letter-spacing: .02em;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-size: 15px;\n font-weight: 650;\n overflow: hidden;\n}\n\n.VSlLJG_badge {\n letter-spacing: .06em;\n opacity: .72;\n white-space: nowrap;\n border: 1px solid;\n border-radius: 4px;\n flex: none;\n padding: 2px 6px;\n font-size: 10px;\n font-weight: 700;\n line-height: 1.2;\n}\n.AQjtka_shell {\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n display: flex;\n}\n\n.AQjtka_card {\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-3);\n border-radius: 12px;\n list-style: none;\n transition: border-color .16s, background .16s;\n}\n\n.AQjtka_card:hover {\n border-color: var(--dsw-alias-label-dimmed);\n}\n\n.AQjtka_cardOpen {\n background: var(--dsw-alias-bg-layer-2);\n border-color: var(--dsw-alias-label-dimmed);\n}\n\n.AQjtka_header {\n appearance: none;\n width: 100%;\n font: inherit;\n color: inherit;\n text-align: left;\n cursor: pointer;\n background: none;\n border: 0;\n border-radius: 12px;\n align-items: center;\n gap: 12px;\n padding: 14px 16px;\n display: flex;\n}\n\n.AQjtka_header:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: -2px;\n}\n\n.AQjtka_headText {\n flex-direction: column;\n flex: 1;\n gap: 4px;\n min-width: 0;\n display: flex;\n}\n\n.AQjtka_name {\n color: var(--dsw-alias-label-primary);\n font-size: 15px;\n font-weight: 600;\n line-height: 1.4;\n}\n\n.AQjtka_description {\n color: var(--dsw-alias-label-tertiary);\n font-size: 13px;\n line-height: 1.5;\n}\n\n.AQjtka_chevron {\n color: var(--dsw-alias-label-tertiary);\n flex: none;\n transition: transform .16s;\n}\n\n.AQjtka_chevronOpen {\n transform: rotate(180deg);\n}\n\n.AQjtka_body {\n border-top: 1px solid var(--dsw-alias-border-l2);\n margin: 0 16px 12px;\n padding-top: 8px;\n}\n\n.AQjtka_tabBar {\n border-bottom: 1px solid var(--dsw-alias-border-l1);\n flex: none;\n gap: 2px;\n display: flex;\n}\n\n.AQjtka_tab {\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n background: none;\n border: none;\n border-bottom: 2px solid #0000;\n border-radius: 6px 6px 0 0;\n padding: 7px 14px;\n font-size: 13px;\n}\n\n.AQjtka_tab:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.AQjtka_tab[data-active] {\n color: var(--dsw-alias-label-primary);\n border-bottom-color: var(--dsw-alias-state-business-primary);\n font-weight: 600;\n}\n\n.AQjtka_tabBody {\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n padding: 12px 0 4px;\n display: flex;\n}\n\n.AQjtka_section {\n border: 1px solid var(--dsw-alias-border-l1);\n background: var(--dsw-alias-bg-layer-1, var(--dsw-alias-bg-base));\n border-radius: 10px;\n flex-direction: column;\n gap: 8px;\n padding: 12px;\n display: flex;\n}\n\n.AQjtka_sectionTitle {\n color: var(--dsw-alias-label-primary);\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n}\n\n.AQjtka_field {\n flex-direction: column;\n align-items: stretch;\n gap: 4px;\n display: flex;\n}\n\n.AQjtka_label {\n color: var(--dsw-alias-label-secondary);\n font-size: 12.5px;\n}\n\n.AQjtka_input, .AQjtka_select {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-specific-input-major, var(--dsw-alias-bg-layer-3));\n border: 1px solid var(--dsw-alias-border-l2);\n border-radius: 8px;\n outline: none;\n padding: 6px 8px;\n font-size: 13px;\n}\n\n.AQjtka_checkbox {\n justify-self: start;\n width: 15px;\n height: 15px;\n}\n\n.AQjtka_wecomRow {\n grid-template-columns: minmax(7rem, .8fr) minmax(8rem, 1fr) minmax(8rem, 1fr) auto;\n align-items: end;\n gap: 8px;\n display: grid;\n}\n\n.AQjtka_wecomRow .AQjtka_message {\n grid-column: 1 / -1;\n}\n\n.AQjtka_toolbar {\n flex-wrap: wrap;\n flex: none;\n align-items: center;\n gap: 8px;\n display: flex;\n}\n\n.AQjtka_button {\n border: 1px solid var(--dsw-alias-border-l2);\n background: var(--dsw-specific-input-major, var(--dsw-alias-bg-layer-3));\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n border-radius: 8px;\n padding: 7px 12px;\n font-size: 13px;\n}\n\n.AQjtka_button:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.AQjtka_button:disabled {\n opacity: .4;\n cursor: default;\n}\n\n.AQjtka_primaryButton {\n background: var(--dsw-alias-label-primary);\n border-color: var(--dsw-alias-label-primary);\n color: var(--dsw-alias-bg-layer-3);\n}\n\n.AQjtka_dangerButton {\n background: var(--dsw-alias-state-danger, #c62828);\n border-color: var(--dsw-alias-state-danger, #c62828);\n color: #fff;\n}\n\n.AQjtka_qr {\n background: #fff;\n border-radius: 8px;\n width: 200px;\n height: 200px;\n margin: 8px 0;\n display: block;\n}\n\n.AQjtka_message {\n color: var(--dsw-alias-label-secondary);\n margin: 0;\n font-size: 12.5px;\n line-height: 1.5;\n}\n\n.AQjtka_error {\n color: var(--dsw-alias-state-danger, #c62828);\n}\n\n.AQjtka_tableWrap {\n border: 1px solid var(--dsw-alias-border-l1);\n border-radius: 10px;\n overflow: auto;\n}\n\n.AQjtka_table {\n border-collapse: collapse;\n width: 100%;\n font-size: 12.5px;\n}\n\n.AQjtka_table th {\n z-index: 1;\n text-align: left;\n background: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-layer-1));\n padding: 8px 10px;\n position: sticky;\n top: 0;\n}\n\n.AQjtka_table td {\n border-top: 1px solid var(--dsw-alias-border-l1);\n vertical-align: top;\n padding: 8px 10px;\n}\n\n.AQjtka_boardTitle {\n color: var(--dsw-alias-label-primary);\n margin: 16px 0 4px;\n font-size: 13px;\n font-weight: 600;\n}\n\n.AQjtka_badge {\n border-radius: 999px;\n padding: 2px 8px;\n font-size: 11px;\n display: inline-block;\n}\n\n.AQjtka_badgeOk {\n color: #229a55;\n background: #229a5524;\n}\n\n.AQjtka_badgeFail {\n color: #c62828;\n background: #c6282824;\n}\n\n.AQjtka_cards {\n grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n gap: 8px;\n display: grid;\n}\n\n.AQjtka_stat {\n border: 1px solid var(--dsw-alias-border-l1);\n border-radius: 10px;\n padding: 10px;\n}\n\n.AQjtka_cardLabel {\n color: var(--dsw-alias-label-tertiary);\n font-size: 11px;\n}\n\n.AQjtka_cardValue {\n color: var(--dsw-alias-label-primary);\n font-size: 15px;\n font-weight: 600;\n}\n\n.AQjtka_upgradeLayer {\n flex: none;\n align-items: center;\n width: 100%;\n height: 42px;\n margin: 8px 0 0;\n display: flex;\n position: relative;\n}\n\n.AQjtka_upgradeLayerRail {\n width: 36px;\n height: 36px;\n margin: 0;\n}\n\n.AQjtka_upgradeButton {\n width: calc(100% + 4px);\n height: 42px;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n background: none;\n border: none;\n border-radius: 12px;\n align-items: center;\n gap: 8px;\n margin: 0 -2px;\n padding: 0 10px 0 8px;\n font-family: inherit;\n font-size: 14px;\n display: inline-flex;\n overflow: hidden;\n}\n\n.AQjtka_upgradeButton:hover, .AQjtka_upgradeButton[data-outdated] {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.AQjtka_upgradeButton:disabled {\n cursor: progress;\n opacity: .72;\n}\n\n.AQjtka_upgradeButton:focus-visible {\n outline: 2px solid var(--dsw-alias-brand-primary);\n outline-offset: -2px;\n}\n\n.AQjtka_upgradeLayerRail .AQjtka_upgradeButton {\n border-radius: 50%;\n justify-content: center;\n gap: 0;\n width: 36px;\n height: 36px;\n padding: 0;\n}\n\n.AQjtka_upgradeLabel {\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n overflow: hidden;\n}\n\n.AQjtka_upgradeMeta {\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n flex: none;\n margin-left: auto;\n font-size: 12px;\n line-height: 16px;\n}\n\n.AQjtka_upgradeDot {\n background: var(--dsw-alias-brand-primary);\n border-radius: 50%;\n flex: none;\n width: 7px;\n height: 7px;\n}\n\n.AQjtka_changelogDate {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-tertiary);\n margin-left: 8px;\n font-weight: 500;\n}\n\n.AQjtka_changelogBlock {\n flex-direction: column;\n gap: 6px;\n display: flex;\n}\n\n.AQjtka_changelogHeading {\n color: var(--dsw-alias-label-secondary);\n font-size: 12.5px;\n font-weight: 600;\n}\n\n.AQjtka_changelogList {\n color: var(--dsw-alias-label-primary);\n flex-direction: column;\n gap: 6px;\n margin: 0;\n padding-left: 18px;\n font-size: 13px;\n line-height: 1.55;\n display: flex;\n}\n\n.AQjtka_changelogList li + li {\n margin: 0;\n}\n\n.AQjtka_changelogCode {\n background: var(--dsw-alias-bg-layer-3);\n border: 1px solid var(--dsw-alias-border-l2);\n word-break: break-all;\n border-radius: 6px;\n padding: 1px 6px;\n font-size: 12px;\n}\n";document.head.appendChild(s);})();
8
8
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
9
  let react = require("react");
10
10
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -16,11 +16,11 @@ const REZ_MARK_DATA_URL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAC
16
16
  //#endregion
17
17
  //#region src/client/brand.module.css
18
18
  var brand_module_default = {
19
- "badge": "r9dlUa_badge",
20
- "mark": "r9dlUa_mark",
21
- "markOnly": "r9dlUa_markOnly",
22
- "name": "r9dlUa_name",
23
- "wordmark": "r9dlUa_wordmark"
19
+ "badge": "VSlLJG_badge",
20
+ "mark": "VSlLJG_mark",
21
+ "markOnly": "VSlLJG_markOnly",
22
+ "name": "VSlLJG_name",
23
+ "wordmark": "VSlLJG_wordmark"
24
24
  };
25
25
  /** Official empty-hero headlines we replace. */
26
26
  const OFFICIAL_HEADLINES = ["探索未至之境", "Into the Unknown"];
@@ -599,55 +599,55 @@ function errorMessage(error) {
599
599
  //#endregion
600
600
  //#region src/client/panel/panel.module.css
601
601
  var panel_module_default = {
602
- "badge": "LOjPTW_badge",
603
- "badgeFail": "LOjPTW_badgeFail",
604
- "badgeOk": "LOjPTW_badgeOk",
605
- "boardTitle": "LOjPTW_boardTitle",
606
- "body": "LOjPTW_body",
607
- "button": "LOjPTW_button",
608
- "card": "LOjPTW_card",
609
- "cardLabel": "LOjPTW_cardLabel",
610
- "cardOpen": "LOjPTW_cardOpen",
611
- "cards": "LOjPTW_cards",
612
- "cardValue": "LOjPTW_cardValue",
613
- "changelogBlock": "LOjPTW_changelogBlock",
614
- "changelogCode": "LOjPTW_changelogCode",
615
- "changelogDate": "LOjPTW_changelogDate",
616
- "changelogHeading": "LOjPTW_changelogHeading",
617
- "changelogList": "LOjPTW_changelogList",
618
- "checkbox": "LOjPTW_checkbox",
619
- "chevron": "LOjPTW_chevron",
620
- "chevronOpen": "LOjPTW_chevronOpen",
621
- "dangerButton": "LOjPTW_dangerButton",
622
- "description": "LOjPTW_description",
623
- "error": "LOjPTW_error",
624
- "field": "LOjPTW_field",
625
- "header": "LOjPTW_header",
626
- "headText": "LOjPTW_headText",
627
- "input": "LOjPTW_input",
628
- "label": "LOjPTW_label",
629
- "message": "LOjPTW_message",
630
- "name": "LOjPTW_name",
631
- "primaryButton": "LOjPTW_primaryButton",
632
- "qr": "LOjPTW_qr",
633
- "section": "LOjPTW_section",
634
- "sectionTitle": "LOjPTW_sectionTitle",
635
- "select": "LOjPTW_select",
636
- "shell": "LOjPTW_shell",
637
- "stat": "LOjPTW_stat",
638
- "tab": "LOjPTW_tab",
639
- "tabBar": "LOjPTW_tabBar",
640
- "tabBody": "LOjPTW_tabBody",
641
- "table": "LOjPTW_table",
642
- "tableWrap": "LOjPTW_tableWrap",
643
- "toolbar": "LOjPTW_toolbar",
644
- "upgradeButton": "LOjPTW_upgradeButton",
645
- "upgradeDot": "LOjPTW_upgradeDot",
646
- "upgradeLabel": "LOjPTW_upgradeLabel",
647
- "upgradeLayer": "LOjPTW_upgradeLayer",
648
- "upgradeLayerRail": "LOjPTW_upgradeLayerRail",
649
- "upgradeMeta": "LOjPTW_upgradeMeta",
650
- "wecomRow": "LOjPTW_wecomRow"
602
+ "badge": "AQjtka_badge",
603
+ "badgeFail": "AQjtka_badgeFail",
604
+ "badgeOk": "AQjtka_badgeOk",
605
+ "boardTitle": "AQjtka_boardTitle",
606
+ "body": "AQjtka_body",
607
+ "button": "AQjtka_button",
608
+ "card": "AQjtka_card",
609
+ "cardLabel": "AQjtka_cardLabel",
610
+ "cardOpen": "AQjtka_cardOpen",
611
+ "cards": "AQjtka_cards",
612
+ "cardValue": "AQjtka_cardValue",
613
+ "changelogBlock": "AQjtka_changelogBlock",
614
+ "changelogCode": "AQjtka_changelogCode",
615
+ "changelogDate": "AQjtka_changelogDate",
616
+ "changelogHeading": "AQjtka_changelogHeading",
617
+ "changelogList": "AQjtka_changelogList",
618
+ "checkbox": "AQjtka_checkbox",
619
+ "chevron": "AQjtka_chevron",
620
+ "chevronOpen": "AQjtka_chevronOpen",
621
+ "dangerButton": "AQjtka_dangerButton",
622
+ "description": "AQjtka_description",
623
+ "error": "AQjtka_error",
624
+ "field": "AQjtka_field",
625
+ "header": "AQjtka_header",
626
+ "headText": "AQjtka_headText",
627
+ "input": "AQjtka_input",
628
+ "label": "AQjtka_label",
629
+ "message": "AQjtka_message",
630
+ "name": "AQjtka_name",
631
+ "primaryButton": "AQjtka_primaryButton",
632
+ "qr": "AQjtka_qr",
633
+ "section": "AQjtka_section",
634
+ "sectionTitle": "AQjtka_sectionTitle",
635
+ "select": "AQjtka_select",
636
+ "shell": "AQjtka_shell",
637
+ "stat": "AQjtka_stat",
638
+ "tab": "AQjtka_tab",
639
+ "tabBar": "AQjtka_tabBar",
640
+ "tabBody": "AQjtka_tabBody",
641
+ "table": "AQjtka_table",
642
+ "tableWrap": "AQjtka_tableWrap",
643
+ "toolbar": "AQjtka_toolbar",
644
+ "upgradeButton": "AQjtka_upgradeButton",
645
+ "upgradeDot": "AQjtka_upgradeDot",
646
+ "upgradeLabel": "AQjtka_upgradeLabel",
647
+ "upgradeLayer": "AQjtka_upgradeLayer",
648
+ "upgradeLayerRail": "AQjtka_upgradeLayerRail",
649
+ "upgradeMeta": "AQjtka_upgradeMeta",
650
+ "wecomRow": "AQjtka_wecomRow"
651
651
  };
652
652
  //#endregion
653
653
  //#region src/client/panel/AuditTab.tsx
@@ -1010,6 +1010,20 @@ function ChannelTable({ kind, lang }) {
1010
1010
  //#endregion
1011
1011
  //#region src/changelog.ts
1012
1012
  const SUITE_CHANGELOG = [
1013
+ {
1014
+ version: "0.1.80",
1015
+ date: "2026-09-28",
1016
+ sections: [{
1017
+ title: {
1018
+ zh: "销售房间与 WhatsApp 发送预演",
1019
+ en: "Sales room and WhatsApp dry run"
1020
+ },
1021
+ items: [{
1022
+ zh: "老板、销售、运营身份自动显示销售房间,保留已有个人资料与记忆。通讯插件升级至 0.1.1,可分析演示会话并预演 WhatsApp 回复;未接入真实客户收发。",
1023
+ en: "Automatically show Sales for boss, sales and operations roles, preserving personal files. Comms 0.1.1 analyses demo threads and plans WhatsApp replies; live customer messaging is not enabled."
1024
+ }]
1025
+ }]
1026
+ },
1013
1027
  {
1014
1028
  version: "0.1.78",
1015
1029
  date: "2026-09-18",
package/lib/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- //#region ../../node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.3/node_modules/@deepseek-ai/cosmokit/lib/types/types.d.ts
1
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.3/node_modules/@deepseek-ai/cosmokit/lib/types/types.d.ts
2
2
  declare function isArrayBufferLike(value: any): value is ArrayBufferLike;
3
3
  declare function isArrayBufferSource(value: any): value is Binary.Source;
4
4
  /** Binary source detection and base64/hex conversion helpers. */
@@ -13,7 +13,7 @@ declare namespace Binary {
13
13
  function fromHex(source: string): ArrayBuffer;
14
14
  }
15
15
  //#endregion
16
- //#region ../../node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.3/node_modules/@deepseek-ai/cosmokit/lib/types/misc.d.ts
16
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.3/node_modules/@deepseek-ai/cosmokit/lib/types/misc.d.ts
17
17
  /** String/symbol keyed dictionary type. */
18
18
  type Dict<T = any, K extends string | symbol = string> = { [key in K]: T };
19
19
  /** Wrap a value in `Promise`, preserving the resolved type of existing promises. */
@@ -21,7 +21,7 @@ type Promisify<T> = Promise<T extends Promise<infer S> ? S : T>;
21
21
  /** Accept a value or promise unless the value type is already promise-like. */
22
22
  type Awaitable<T> = [T] extends [Promise<unknown>] ? T : T | Promise<T>;
23
23
  //#endregion
24
- //#region ../../node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts
24
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@standard-schema+spec@1.1.0/node_modules/@standard-schema/spec/dist/index.d.ts
25
25
  /** The Standard Typed interface. This is a base type extended by other specs. */
26
26
  interface StandardTypedV1<Input = unknown, Output = Input> {
27
27
  /** The Standard properties. */
@@ -99,7 +99,7 @@ declare namespace StandardSchemaV1 {
99
99
  }
100
100
  /** The Standard JSON Schema interface. */
101
101
  //#endregion
102
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/utils.d.ts
102
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/utils.d.ts
103
103
  /** Ordered collection of disposable values with O(1) deletion by value. */
104
104
  declare class DisposableList<T extends WeakKey> {
105
105
  private sn;
@@ -132,7 +132,7 @@ declare const symbols: {
132
132
  resolveConfig: typeof Service.resolveConfig;
133
133
  };
134
134
  //#endregion
135
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/registry.d.ts
135
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/registry.d.ts
136
136
  /**
137
137
  * Service dependency declaration accepted by plugins and the `@Inject`
138
138
  * decorator.
@@ -324,7 +324,7 @@ declare class RegistryService {
324
324
  plugin(plugin: Plugin, config?: any, getOuterStack?: () => string[]): Fiber & PromiseLike<Fiber>;
325
325
  }
326
326
  //#endregion
327
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/reflect.d.ts
327
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/reflect.d.ts
328
328
  declare module './context.ts' {
329
329
  interface Context {
330
330
  /**
@@ -508,7 +508,7 @@ declare class ReflectService {
508
508
  bind<T extends Function>(callback: T): T;
509
509
  }
510
510
  //#endregion
511
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/fiber.d.ts
511
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/fiber.d.ts
512
512
  declare module './context.ts' {
513
513
  interface Context extends Pick<Fiber, 'effect'> {
514
514
  /** The fiber (plugin runtime instance) that owns this context. */
@@ -670,7 +670,7 @@ declare class Fiber {
670
670
  update(config: any, noSave?: boolean): void | Promise<void>;
671
671
  }
672
672
  //#endregion
673
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/events.d.ts
673
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/events.d.ts
674
674
  /** Extract the parameter tuple from a function type. */
675
675
  type Parameters<F> = F extends ((...args: infer P) => any) ? P : never;
676
676
  /** Extract the return type from a function type. */
@@ -901,7 +901,7 @@ interface Events {
901
901
  'internal/dispatch'(mode: DispatchMode, name: string, args: any[], thisArg: any): void;
902
902
  }
903
903
  //#endregion
904
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/logger.d.ts
904
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/logger.d.ts
905
905
  declare module './context.ts' {
906
906
  interface Intercept {
907
907
  logger: LoggerService.Intercept;
@@ -989,7 +989,7 @@ declare class LoggerService {
989
989
  [symbols.invoke](name?: string): Logger;
990
990
  }
991
991
  //#endregion
992
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/context.d.ts
992
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/context.d.ts
993
993
  /**
994
994
  * Public shape of a Cordis context.
995
995
  *
@@ -1084,7 +1084,7 @@ declare class Context {
1084
1084
  intercept(name: string, config: any): this;
1085
1085
  }
1086
1086
  //#endregion
1087
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/service.d.ts
1087
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/types/service.d.ts
1088
1088
  /**
1089
1089
  * Base class for services that expose a named API on `ctx`.
1090
1090
  *
@@ -1138,7 +1138,7 @@ declare abstract class Service<out T = never> {
1138
1138
  static [Symbol.hasInstance](instance: any): boolean;
1139
1139
  }
1140
1140
  //#endregion
1141
- //#region ../../node_modules/.pnpm/@deepseek-ai+schemastery@3.18.2/node_modules/@deepseek-ai/schemastery/lib/types/index.d.ts
1141
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+schemastery@3.18.2/node_modules/@deepseek-ai/schemastery/lib/types/index.d.ts
1142
1142
  declare const kSchema: unique symbol;
1143
1143
  declare global {
1144
1144
  namespace Schemastery {
package/lib/index.js CHANGED
@@ -6,7 +6,7 @@ import { REZ_CREDENTIAL_REFS, REZ_DEFAULT_CONNECTIONS, REZ_SYSTEMS, lastMcpStart
6
6
  import { spawn, spawnSync } from "node:child_process";
7
7
  import { fileURLToPath } from "node:url";
8
8
  import { DatabaseSync } from "node:sqlite";
9
- //#region ../../node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.3/node_modules/@deepseek-ai/cosmokit/lib/index.js
9
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.3/node_modules/@deepseek-ai/cosmokit/lib/index.js
10
10
  /** Return true when a value is `null` or `undefined`. */
11
11
  function isNullable(value) {
12
12
  return value === null || value === void 0;
@@ -241,7 +241,7 @@ var Time;
241
241
  Time.template = template;
242
242
  })(Time || (Time = {}));
243
243
  //#endregion
244
- //#region ../../node_modules/.pnpm/@deepseek-ai+schemastery@3.18.2/node_modules/@deepseek-ai/schemastery/lib/index.mjs
244
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+schemastery@3.18.2/node_modules/@deepseek-ai/schemastery/lib/index.mjs
245
245
  const kSchema = Symbol.for("schemastery");
246
246
  const kValidationError$1 = Symbol.for("ValidationError");
247
247
  globalThis.__schemastery_index__ ??= 0;
@@ -1890,7 +1890,7 @@ var TokenManager = class {
1890
1890
  }
1891
1891
  };
1892
1892
  //#endregion
1893
- //#region ../../node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/index.js
1893
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/cordis/lib/index.js
1894
1894
  /** Ordered collection of disposable values with O(1) deletion by value. */
1895
1895
  var DisposableList = class {
1896
1896
  sn = 0;
@@ -3702,7 +3702,7 @@ var Service = class Service {
3702
3702
  }
3703
3703
  };
3704
3704
  //#endregion
3705
- //#region ../../node_modules/.pnpm/@deepseek-ai+dsh-scope@0.1.5-rc.2_@deepseek-ai+cordis@4.0.2_@deepseek-ai+dsh-invariants_2fd32c0cf9230cfb915ff7d11cf8e792/node_modules/@deepseek-ai/dsh-scope/lib/index.js
3705
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+dsh-scope@0.1.5-rc.2_@deepseek-ai+cordis@4.0.2_@deepseek-ai+dsh-invariants_2fd32c0cf9230cfb915ff7d11cf8e792/node_modules/@deepseek-ai/dsh-scope/lib/index.js
3706
3706
  /**
3707
3707
  * Shared insertion-ordered storage and effect ownership for scope-aware registries.
3708
3708
  *
@@ -3981,7 +3981,7 @@ function scopeTarget(base, key) {
3981
3981
  return carrier;
3982
3982
  }
3983
3983
  //#endregion
3984
- //#region ../../node_modules/.pnpm/@deepseek-ai+dsh-typert-protocol@0.1.5-rc.2_@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/dsh-typert-protocol/lib/index.js
3984
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+dsh-typert-protocol@0.1.5-rc.2_@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/dsh-typert-protocol/lib/index.js
3985
3985
  /** The one Remote failure class shared by owners, the Gateway, and consumers. */
3986
3986
  /**
3987
3987
  * One Remote call failure: a real Error carrying its stable code and typed
@@ -4126,7 +4126,7 @@ function validateName(subject, value) {
4126
4126
  if (!isTypertRemoteSegment(value)) throw new TypeError(`typert-protocol: ${subject} must contain only RPC endpoint segment characters`);
4127
4127
  }
4128
4128
  //#endregion
4129
- //#region ../../node_modules/.pnpm/@deepseek-ai+dsh-util-values@0.1.5-rc.2_@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/dsh-util-values/lib/index.js
4129
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+dsh-util-values@0.1.5-rc.2_@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/dsh-util-values/lib/index.js
4130
4130
  /** Duplicate-install-safe JSON and immutable-value helpers. @module @deepseek-ai/dsh-util-values */
4131
4131
  /**
4132
4132
  * Mark an unreachable closed-union branch.
@@ -4338,7 +4338,7 @@ function deepFreeze(value) {
4338
4338
  return value;
4339
4339
  }
4340
4340
  //#endregion
4341
- //#region ../../node_modules/.pnpm/@deepseek-ai+dsh-util-crypto@0.1.5-rc.2_@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/dsh-util-crypto/lib/index.js
4341
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+dsh-util-crypto@0.1.5-rc.2_@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/dsh-util-crypto/lib/index.js
4342
4342
  /**
4343
4343
  * Random v4 UUID, minted from `crypto.getRandomValues`.
4344
4344
  * @returns the UUID string.
@@ -4351,7 +4351,7 @@ function randomUUID() {
4351
4351
  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
4352
4352
  }
4353
4353
  //#endregion
4354
- //#region ../../node_modules/.pnpm/@deepseek-ai+dsh-brand@0.1.5-rc.2_@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/dsh-brand/lib/index.js
4354
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+dsh-brand@0.1.5-rc.2_@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/dsh-brand/lib/index.js
4355
4355
  /**
4356
4356
  * Duplicate-install-safe nominal primitive helpers.
4357
4357
  *
@@ -4374,11 +4374,11 @@ function brandString(value) {
4374
4374
  return value;
4375
4375
  }
4376
4376
  //#endregion
4377
- //#region ../../node_modules/.pnpm/@deepseek-ai+dsh-timeout@0.1.5-rc.2_@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/dsh-timeout/lib/index.js
4377
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+dsh-timeout@0.1.5-rc.2_@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/dsh-timeout/lib/index.js
4378
4378
  /** Largest delay Node schedules without clamping it to one millisecond. */
4379
4379
  const MAX_TIMER_DELAY_MS = 2147483647;
4380
4380
  //#endregion
4381
- //#region ../../node_modules/.pnpm/@deepseek-ai+dsh-llm@0.1.5-rc.2_@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/dsh-llm/lib/index.js
4381
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+dsh-llm@0.1.5-rc.2_@deepseek-ai+cordis@4.0.2/node_modules/@deepseek-ai/dsh-llm/lib/index.js
4382
4382
  /**
4383
4383
  * Detach and deep-freeze a message whose identity already exists.
4384
4384
  * @param message - complete message, including its stable identity.
@@ -5495,7 +5495,7 @@ function adapterFailureChunk(error, signal) {
5495
5495
  };
5496
5496
  }
5497
5497
  //#endregion
5498
- //#region ../../node_modules/.pnpm/@deepseek-ai+dsh-tools@0.1.5-rc.2_7f9e302786cf21e030eafe960666842c/node_modules/@deepseek-ai/dsh-tools/lib/index.js
5498
+ //#region ../../../../../Users/kelvin/Documents/esp0519/teamwork/ReZ-TI-deepseek-harness/node_modules/.pnpm/@deepseek-ai+dsh-tools@0.1.5-rc.2_7f9e302786cf21e030eafe960666842c/node_modules/@deepseek-ai/dsh-tools/lib/index.js
5499
5499
  /**
5500
5500
  * Enforced JSON Schema subset shared by tool outputs, generated PTC mode
5501
5501
  * types, subagents, and workflows. The subset accepts any JSON root, an
@@ -9436,6 +9436,11 @@ const ENGINEER_ROOMS = [{
9436
9436
  id: "lab",
9437
9437
  folder: "实验室"
9438
9438
  }];
9439
+ /** 客户通讯房间:老板、销售、运营可见。 */
9440
+ const SALES_ROOMS = [{
9441
+ id: "sales",
9442
+ folder: "销售"
9443
+ }];
9439
9444
  /** User-owned files. Re-seeding never overwrites these. */
9440
9445
  const LIVING_BASENAMES = /* @__PURE__ */ new Set([
9441
9446
  "USER.md",
@@ -9478,6 +9483,9 @@ function seedOpsWorkspaces(options) {
9478
9483
  function seedEngineerWorkspaces(options) {
9479
9484
  return seedRooms(options.destRoot, ENGINEER_ROOMS, options.templatesRoot ?? defaultStaffTemplatesRoot());
9480
9485
  }
9486
+ function seedSalesWorkspaces(options) {
9487
+ return seedRooms(options.destRoot, SALES_ROOMS, options.templatesRoot ?? defaultStaffTemplatesRoot());
9488
+ }
9481
9489
  function seedRoom(templatesRoot, destRoot, room) {
9482
9490
  const src = join(templatesRoot, room.id);
9483
9491
  const dest = join(destRoot, room.folder);
@@ -9571,17 +9579,22 @@ const BOSS_GUIDANCE = [
9571
9579
  "微信文件夹仍是收件箱,不要在那边查账、报销或砍 SKU。",
9572
9580
  "用户用中文就中文、用英文就英文;不要因为工作区文件是中文就强制中文。"
9573
9581
  ].join("");
9574
- const BOSS_ROLE_HINT = "搞钱 / 产品 / 运营仅角色选「老板」时出现。人事 / 财务 / 法务助理所有角色都会登记。设计 / 发布 / 电商工作房间仅「运营」身份出现。实验室仅「工程师」身份出现。";
9582
+ const BOSS_ROLE_HINT = "搞钱 / 产品 / 运营仅角色选「老板」时出现。人事 / 财务 / 法务助理所有角色都会登记。设计 / 发布 / 电商工作房间仅「运营」身份出现。实验室仅「工程师」身份出现。销售房间对「老板」「销售」「运营」身份显示。";
9575
9583
  const ENGINEER_LAB_GUIDANCE = ["当前身份是工程师。侧栏第一间是实验室:对方说板型/功能就自己写 ESPHome YAML,或用回形针/粘贴。调 mcp__esphome__compile(或 rez_esphome_compile)。", "立刻把下载链接发给对方。编译要时间:先点开可能是 README.md,编完刷新就是 firmware.bin;失败也是 README(含日志)。不要把 bin 贴进对话。未开通就说未开通。不要自写编译器,不要自写 Device Builder WebSocket,不要默认 OTA 刷机。"].join("");
9576
9584
  const OPS_DESIGN_GUIDANCE = [
9577
9585
  "当前身份是运营。侧栏先是设计工作房间:产品拍摄图、品牌规范、公司 VI 都在这里交。拍原片或 VI 图用官方 Comfy MCP 只修一次;规范 PDF / 源文件用回形针、不修。员工声明类型、Inbox 待审并转凯文。终审只在老板产品室。",
9578
9586
  "接着是发布工作间(媒体连接):内容/社媒 PCP 与 MediaJob,preview 后确认才 submit。不要另建图库,不要做日历 UI;排期写企微一个共享发布日历。",
9579
9587
  "再接着是电商工作间(ec operation):一期只做阿里巴巴国际站 ListingJob。Amazon 现在没有号,看板标后续,有号再开。设置页「看板」看两室连接与 Odoo/企微权限。不要代批、不要直接写 RAW、不要做图生场景或白底。搞钱 / 产品 / 运营仅老板身份出现。"
9580
9588
  ].join("");
9589
+ const SALES_GUIDANCE = "侧栏已登记销售房间,负责客户会话分析、回复起草和 WhatsApp 发送预演。当前通讯工具使用演示数据,无真实发送能力;不得声称已读真实客户会话或已发送。";
9590
+ function hasSalesRoom(role) {
9591
+ return role === "boss" || role === "sales" || role === "operations";
9592
+ }
9581
9593
  function workspaceGuidanceFor(role) {
9582
- if (role === "boss") return BOSS_GUIDANCE;
9583
- if (role === "operations") return STAFF_GUIDANCE + OPS_DESIGN_GUIDANCE;
9594
+ if (role === "boss") return BOSS_GUIDANCE + SALES_GUIDANCE;
9595
+ if (role === "operations") return STAFF_GUIDANCE + OPS_DESIGN_GUIDANCE + SALES_GUIDANCE;
9584
9596
  if (role === "engineer") return STAFF_GUIDANCE + ENGINEER_LAB_GUIDANCE;
9597
+ if (role === "sales") return STAFF_GUIDANCE + SALES_GUIDANCE;
9585
9598
  return STAFF_GUIDANCE + BOSS_ROLE_HINT;
9586
9599
  }
9587
9600
  function destRoot(env = process.env) {
@@ -9607,6 +9620,9 @@ function expectedOpsRooms(env = process.env) {
9607
9620
  function expectedEngineerRooms(env = process.env) {
9608
9621
  return refsFor(ENGINEER_ROOMS, env);
9609
9622
  }
9623
+ function expectedSalesRooms(env = process.env) {
9624
+ return refsFor(SALES_ROOMS, env);
9625
+ }
9610
9626
  async function syncRezWorkspaces(registry, role, env = process.env) {
9611
9627
  await registerWorkspaces(registry, seedStaffWorkspaces({ destRoot: destRoot(env) }).rooms);
9612
9628
  if (role === "boss") await registerWorkspaces(registry, seedBossWorkspaces({ destRoot: destRoot(env) }).rooms);
@@ -9615,7 +9631,18 @@ async function syncRezWorkspaces(registry, role, env = process.env) {
9615
9631
  else await unregisterWorkspaces(registry, expectedOpsRooms(env));
9616
9632
  if (role === "engineer") await registerWorkspaces(registry, seedEngineerWorkspaces({ destRoot: destRoot(env) }).rooms);
9617
9633
  else await unregisterWorkspaces(registry, expectedEngineerRooms(env));
9618
- await orderWorkspaces(registry, role === "boss" ? [...expectedBossRooms(env), ...expectedStaffRooms(env)] : role === "operations" ? [...expectedOpsRooms(env), ...expectedStaffRooms(env)] : role === "engineer" ? [...expectedEngineerRooms(env), ...expectedStaffRooms(env)] : expectedStaffRooms(env));
9634
+ if (hasSalesRoom(role)) await registerWorkspaces(registry, seedSalesWorkspaces({ destRoot: destRoot(env) }).rooms);
9635
+ else await unregisterWorkspaces(registry, expectedSalesRooms(env));
9636
+ const sales = hasSalesRoom(role) ? expectedSalesRooms(env) : [];
9637
+ await orderWorkspaces(registry, role === "boss" ? [
9638
+ ...expectedBossRooms(env),
9639
+ ...sales,
9640
+ ...expectedStaffRooms(env)
9641
+ ] : role === "operations" ? [
9642
+ ...expectedOpsRooms(env),
9643
+ ...sales,
9644
+ ...expectedStaffRooms(env)
9645
+ ] : role === "engineer" ? [...expectedEngineerRooms(env), ...expectedStaffRooms(env)] : [...sales, ...expectedStaffRooms(env)]);
9619
9646
  }
9620
9647
  /** Seed/register staff for every role; boss rooms only when role=boss. */
9621
9648
  function mountRezWorkspaces(ctx, getRole) {