@rezti/dsh-rez-suite 0.1.78 → 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 +5 -0
- package/README.md +3 -0
- package/README.zh.md +3 -0
- package/lib/client.d.ts +10 -10
- package/lib/client.js +69 -55
- package/lib/index.d.ts +12 -12
- package/lib/index.js +42 -15
- package/lib/style.css +67 -67
- package/package.json +5 -5
- package/src/boss/mount.ts +26 -7
- package/src/boss/seed.ts +9 -1
- package/src/changelog.ts +11 -0
- package/templates/staff/sales/AGENTS.md +22 -0
- package/templates/staff/sales/BOOTSTRAP.md +3 -0
- package/templates/staff/sales/IDENTITY.md +3 -0
- package/templates/staff/sales/MEMORY.md +3 -0
- package/templates/staff/sales/PRIORITIES.md +3 -0
- package/templates/staff/sales/SOUL.md +3 -0
- package/templates/staff/sales/USER.md +6 -0
- package/templates/staff/sales/skills/role_sales.md +77 -0
package/CHANGELOG.md
CHANGED
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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=".
|
|
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": "
|
|
20
|
-
"mark": "
|
|
21
|
-
"markOnly": "
|
|
22
|
-
"name": "
|
|
23
|
-
"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": "
|
|
603
|
-
"badgeFail": "
|
|
604
|
-
"badgeOk": "
|
|
605
|
-
"boardTitle": "
|
|
606
|
-
"body": "
|
|
607
|
-
"button": "
|
|
608
|
-
"card": "
|
|
609
|
-
"cardLabel": "
|
|
610
|
-
"cardOpen": "
|
|
611
|
-
"cards": "
|
|
612
|
-
"cardValue": "
|
|
613
|
-
"changelogBlock": "
|
|
614
|
-
"changelogCode": "
|
|
615
|
-
"changelogDate": "
|
|
616
|
-
"changelogHeading": "
|
|
617
|
-
"changelogList": "
|
|
618
|
-
"checkbox": "
|
|
619
|
-
"chevron": "
|
|
620
|
-
"chevronOpen": "
|
|
621
|
-
"dangerButton": "
|
|
622
|
-
"description": "
|
|
623
|
-
"error": "
|
|
624
|
-
"field": "
|
|
625
|
-
"header": "
|
|
626
|
-
"headText": "
|
|
627
|
-
"input": "
|
|
628
|
-
"label": "
|
|
629
|
-
"message": "
|
|
630
|
-
"name": "
|
|
631
|
-
"primaryButton": "
|
|
632
|
-
"qr": "
|
|
633
|
-
"section": "
|
|
634
|
-
"sectionTitle": "
|
|
635
|
-
"select": "
|
|
636
|
-
"shell": "
|
|
637
|
-
"stat": "
|
|
638
|
-
"tab": "
|
|
639
|
-
"tabBar": "
|
|
640
|
-
"tabBody": "
|
|
641
|
-
"table": "
|
|
642
|
-
"tableWrap": "
|
|
643
|
-
"toolbar": "
|
|
644
|
-
"upgradeButton": "
|
|
645
|
-
"upgradeDot": "
|
|
646
|
-
"upgradeLabel": "
|
|
647
|
-
"upgradeLayer": "
|
|
648
|
-
"upgradeLayerRail": "
|
|
649
|
-
"upgradeMeta": "
|
|
650
|
-
"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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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) {
|