@rezti/dsh-rez-suite 0.1.62 → 0.1.64

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@rezti/dsh-rez-suite",
3
- "description": "ReZ-TI one-package install for DeepSeek Harness. Update with: dsh plugin --profile web add @rezti/dsh-rez-suite@0.1.62",
4
- "version": "0.1.62",
3
+ "description": "ReZ-TI one-package install for DeepSeek Harness. Update with: dsh plugin --profile web add @rezti/dsh-rez-suite@0.1.64",
4
+ "version": "0.1.64",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "node": "^22.19.0 || >=24.0.0"
@@ -26,7 +26,6 @@
26
26
  },
27
27
  "client": {
28
28
  "inject": [
29
- "@deepseek-ai/dsh-client-runtime",
30
29
  "@deepseek-ai/dsh-client-connection",
31
30
  "@deepseek-ai/dsh-client-locale",
32
31
  "@deepseek-ai/dsh-client-ui-settings",
@@ -41,14 +40,14 @@
41
40
  "@rezti/dsh-rez-comms": "^0.1.0",
42
41
  "@rezti/dsh-rez-gsc": "^0.1.1",
43
42
  "@rezti/dsh-rez-ha-bridge": "^0.1.9",
44
- "@rezti/dsh-rez-intent": "^0.1.5",
43
+ "@rezti/dsh-rez-intent": "^0.1.6",
45
44
  "@rezti/dsh-rez-nextcloud": "^0.1.13",
46
45
  "@rezti/dsh-rez-odoo": "^0.1.9",
47
46
  "@rezti/dsh-rez-publish": "^0.1.0",
48
- "@rezti/dsh-rez-sso": "^0.1.17",
47
+ "@rezti/dsh-rez-sso": "^0.1.18",
49
48
  "@rezti/dsh-rez-tapd": "^0.1.1",
50
- "@rezti/dsh-rez-token-manager": "^0.1.4",
51
- "@rezti/dsh-rez-vision": "^0.1.3",
49
+ "@rezti/dsh-rez-token-manager": "^0.1.5",
50
+ "@rezti/dsh-rez-vision": "^0.1.4",
52
51
  "@rezti/dsh-rez-wechat": "^0.1.17",
53
52
  "@rezti/dsh-web-file-uploader": "0.2.3",
54
53
  "@wecom/cli": "1.1.0",
@@ -59,19 +58,20 @@
59
58
  "react-dom": "^18.2.0"
60
59
  },
61
60
  "devDependencies": {
62
- "@deepseek-ai/cordis": "^4.0.1",
63
- "@deepseek-ai/dsh-client-connection": "0.1.0-rc.6",
64
- "@deepseek-ai/dsh-client-locale": "0.1.0-rc.6",
65
- "@deepseek-ai/dsh-client-runtime": "0.1.0-rc.6",
66
- "@deepseek-ai/dsh-client-ui-settings": "0.1.0-rc.6",
67
- "@deepseek-ai/dsh-client-ui-sidebar": "0.1.0-rc.6",
68
- "@deepseek-ai/dsh-client-ui-slots": "0.1.0-rc.6",
69
- "@deepseek-ai/dsh-host-webserver": "0.1.0-rc.6",
70
- "@deepseek-ai/dsh-llm": "0.1.0-rc.6",
71
- "@deepseek-ai/dsh-settings": "0.1.0-rc.6",
72
- "@deepseek-ai/dsh-system-prompt": "0.1.0-rc.6",
73
- "@deepseek-ai/dsh-tools": "0.1.0-rc.6",
74
- "@deepseek-ai/schemastery": "^3.18.1",
61
+ "@deepseek-ai/cordis": "^4.0.2",
62
+ "@deepseek-ai/dsh-client-connection": "0.1.5-rc.2",
63
+ "@deepseek-ai/dsh-client-locale": "0.1.5-rc.2",
64
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.5-rc.2",
65
+ "@deepseek-ai/dsh-client-ui-settings": "0.1.5-rc.2",
66
+ "@deepseek-ai/dsh-client-ui-settings-plugins": "0.1.5-rc.2",
67
+ "@deepseek-ai/dsh-client-ui-sidebar": "0.1.5-rc.2",
68
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.5-rc.2",
69
+ "@deepseek-ai/dsh-host-webserver": "0.1.5-rc.2",
70
+ "@deepseek-ai/dsh-llm": "0.1.5-rc.2",
71
+ "@deepseek-ai/dsh-settings": "0.1.5-rc.2",
72
+ "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.2",
73
+ "@deepseek-ai/dsh-tools": "0.1.5-rc.2",
74
+ "@deepseek-ai/schemastery": "^3.18.2",
75
75
  "@tsdown/css": "0.22.2",
76
76
  "@types/node": "^22.20.0",
77
77
  "@types/react": "~18.3.1",
package/src/boss/mount.ts CHANGED
@@ -125,7 +125,7 @@ export const syncBossWorkspaces = syncRezWorkspaces
125
125
  /** Seed/register staff for every role; boss rooms only when role=boss. */
126
126
  export function mountRezWorkspaces(ctx: Context, getRole: () => RezRoleId): () => void {
127
127
  const run = (): void => {
128
- ctx.inject(['workspaceRegistry'], (inner) => {
128
+ ctx.registry.inject(['workspaceRegistry'], (inner) => {
129
129
  const registry = inner.get('workspaceRegistry') as WorkspaceRegistrar
130
130
  void syncRezWorkspaces(registry, getRole()).catch((error: unknown) => {
131
131
  const why = error instanceof Error ? error.message : String(error)
package/src/changelog.ts CHANGED
@@ -20,6 +20,36 @@ export interface ChangelogRelease {
20
20
  }
21
21
 
22
22
  export const SUITE_CHANGELOG: readonly ChangelogRelease[] = [
23
+ {
24
+ version: '0.1.64',
25
+ date: '2026-09-13',
26
+ sections: [
27
+ {
28
+ title: { zh: '跟官方 dsh 0.1.5', en: 'Follow upstream dsh 0.1.5' },
29
+ items: [
30
+ {
31
+ zh: '@deepseek-ai/* 钉到 0.1.5-rc.2。设置改用 ctx.settings.installSection。凭证按 version:1 + refs: 读写。依赖 sso@0.1.18 / intent@0.1.6 / token-manager@0.1.5 / vision@0.1.4。员工机请重装钉版 dsh 后再装本版 suite。',
32
+ en: 'Pin @deepseek-ai/* to 0.1.5-rc.2. Settings use ctx.settings.installSection. Credentials read/write version:1 + refs:. Depends on sso@0.1.18 / intent@0.1.6 / token-manager@0.1.5 / vision@0.1.4. Reinstall pinned dsh on staff machines, then this suite.',
33
+ },
34
+ ],
35
+ },
36
+ ],
37
+ },
38
+ {
39
+ version: '0.1.63',
40
+ date: '2026-09-06',
41
+ sections: [
42
+ {
43
+ title: { zh: '多公司改读公司包', en: 'Multi-company from company pack' },
44
+ items: [
45
+ {
46
+ zh: '人财法与搞钱/运营模板不再内嵌四家公司表;抬头与 company_id 以 Nextcloud org/chart.yaml 的 companies[] 为准(INDEX company_ref)。加公司只改 chart。',
47
+ en: 'HR/finance/legal and boss money/ops templates no longer embed a four-company table. Names and company_id come from Nextcloud org/chart.yaml companies[] (INDEX company_ref). Add companies only in chart.',
48
+ },
49
+ ],
50
+ },
51
+ ],
52
+ },
23
53
  {
24
54
  version: '0.1.62',
25
55
  date: '2026-09-05',
@@ -5,8 +5,9 @@
5
5
  * takeover over the conversation column.
6
6
  */
7
7
 
8
- import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client'
8
+ import type { Context as ClientContext } from '@deepseek-ai/cordis'
9
9
  import type {} from '@deepseek-ai/dsh-client-locale/client'
10
+ import type {} from '@deepseek-ai/dsh-client-ui-renderer/client'
10
11
  import type {} from '@deepseek-ai/dsh-client-ui-settings/client'
11
12
  import type {} from '@deepseek-ai/dsh-client-ui-slots'
12
13
  import { mountRezBrand, paintBrand } from './brand.ts'
package/src/index.ts CHANGED
@@ -10,7 +10,7 @@
10
10
  import type { Context } from '@deepseek-ai/cordis'
11
11
  import { homedir } from 'node:os'
12
12
  import { join } from 'node:path'
13
- import { installSettingsSection, settingsNamespace } from '@deepseek-ai/dsh-settings'
13
+ import type {} from '@deepseek-ai/dsh-settings'
14
14
  import z from '@deepseek-ai/schemastery'
15
15
  import type {} from '@deepseek-ai/dsh-host-webserver'
16
16
  import type {} from '@deepseek-ai/dsh-system-prompt'
@@ -39,7 +39,8 @@ export const name = 'rez-suite'
39
39
 
40
40
  export const inject = ['webServer', 'tools', 'systemPrompt']
41
41
 
42
- export const REZ_SETTINGS_NAMESPACE = settingsNamespace('dsh-rez-suite')
42
+ /** Host settings namespace (plain id; dsh 0.1.5+ no longer exports settingsNamespace()). */
43
+ export const REZ_SETTINGS_NAMESPACE = 'dsh-rez-suite'
43
44
 
44
45
  const serverSchema = z.object({
45
46
  enabled: z.boolean().default(false),
@@ -237,22 +238,24 @@ export function apply(ctx: Context, config?: RezConfig): void {
237
238
  }, 'dsh-rez-suite: tools')
238
239
  }
239
240
 
240
- installSettingsSection(ctx, REZ_SETTINGS_NAMESPACE, Config, normalize(config), {
241
- setSource: (source) => {
242
- current = source
243
- sync()
244
- syncWorkspaces()
245
- syncQcc()
246
- syncTianyancha()
247
- syncEsphome()
248
- },
249
- onChange: () => {
250
- sync()
251
- syncWorkspaces()
252
- syncQcc()
253
- syncTianyancha()
254
- syncEsphome()
255
- },
241
+ ctx.registry.inject(['settings'], (settingsCtx) => {
242
+ settingsCtx.settings.installSection(ctx, REZ_SETTINGS_NAMESPACE, Config, normalize(config), {
243
+ setSource: (source) => {
244
+ current = source
245
+ sync()
246
+ syncWorkspaces()
247
+ syncQcc()
248
+ syncTianyancha()
249
+ syncEsphome()
250
+ },
251
+ onChange: () => {
252
+ sync()
253
+ syncWorkspaces()
254
+ syncQcc()
255
+ syncTianyancha()
256
+ syncEsphome()
257
+ },
258
+ })
256
259
  })
257
260
 
258
261
  sync()
@@ -9,7 +9,7 @@
9
9
  严格四段,不要写成待办清单:
10
10
 
11
11
  1. **结论**(一句话)
12
- 2. **数字**(必须写清哪家公司、哪段时间;四家公司禁止混成一笔)
12
+ 2. **数字**(必须写清哪家公司、哪段时间;各公司禁止混成一笔,名单见 chart `companies[]`)
13
13
  3. **要拍板的 1~3 件事**
14
14
  4. **写操作**:未执行任何过账 / 付款 / 对外发送。若更新了记忆文件,只列文件名。
15
15
 
@@ -53,9 +53,8 @@
53
53
 
54
54
  ## 公司(问数字时点名)
55
55
 
56
- | 公司 | company_id |
57
- |------|------------|
58
- | 浙江雷泽智能设备有限公司 | 1 |
59
- | 上海雷小影信息技术有限公司 | 2 |
60
- | 温州雷泽智能家居有限公司 | 3 |
61
- | 温州雷泽电子有限公司 | 4 |
56
+ 公司抬头与 `company_id` **以 Nextcloud `org/chart.yaml` 的 `companies[]` 为准**(INDEX:`company_ref` / `HR-ORG-001`)。点名公司时用 chart 里的 `name` + `id`,不要背模板里的旧名单。
57
+
58
+ - 每笔数字必须带 `company_id`;跨公司禁止混成一笔。
59
+ - Odoo 当前帐号能看见的公司为边界。
60
+ - **禁止**在本文件或 MEMORY 维护公司长名单;加公司只改 chart。
@@ -20,7 +20,7 @@
20
20
 
21
21
  ## 3. 先看哪家公司
22
22
 
23
- 四家公司必须拆开看:浙江雷泽设备 / 上海雷小影 / 温州雷泽家居 / 温州雷泽电子。
23
+ 各公司必须拆开看:名单与 `company_id` Nextcloud `org/chart.yaml` `companies[]` 为准(INDEX `company_ref`)。
24
24
 
25
25
  问:日常默认先看哪一家?其余是「点名才看」还是轮询?
26
26
 
@@ -45,11 +45,9 @@
45
45
  - 媒体分发预览不在本室:运营岗去「发布」房间。
46
46
  - 工商查询请切到法务助理,避免串房间。
47
47
 
48
- ## 公司
49
-
50
- | 公司 | company_id |
51
- |------|------------|
52
- | 浙江雷泽智能设备有限公司 | 1 |
53
- | 上海雷小影信息技术有限公司 | 2 |
54
- | 温州雷泽智能家居有限公司 | 3 |
55
- | 温州雷泽电子有限公司 | 4 |
48
+ ## 公司(多公司)
49
+
50
+ 公司抬头与 `company_id` **以 Nextcloud `org/chart.yaml` 的 `companies[]` 为准**(INDEX:`company_ref` / `HR-ORG-001`)。红灯按公司拆开报,不要混成一笔。
51
+
52
+ - Odoo 当前帐号能看见的公司为边界。
53
+ - **禁止**在本文件或 MEMORY 维护公司长名单;加公司只改 chart。
@@ -7,12 +7,13 @@ description: 人财法三房间每次开场必用。用 Odoo login 对 Nextcloud
7
7
 
8
8
  ## 开场(先于请假/报销/合同)
9
9
 
10
- 1. `mcp__odoo__get_current_context`,记下 login、当前公司。
10
+ 1. `mcp__odoo__get_current_context`,记下 login、当前公司、可切换公司。
11
11
  2. 用 login / 工作邮箱搜 `hr.employee`。搜不到就说「这个 Odoo 帐号下没有员工档案」,按员工档做自己能做的,不要猜是老板。
12
- 3. 打开 `Documents/Standards/INDEX.yaml`,按相对 uri 读 `org/chart.yaml`。用 login 或 work_email 对 `people[]`。
12
+ 3. 打开 `Documents/Standards/INDEX.yaml`(注意 `company_ref`),按相对 uri 读 `org/chart.yaml`。用 login 或 work_email 对 `people[]`;公司抬头与 `company_id` 用 chart 的 `companies[]`(`id` = Odoo `res.company`),**不要背插件里的公司名单**。
13
13
  4. 对上:`identity` 是 **老板** 或 **员工**。`function` 含 `人事`/`财务`/`法务` 才开专员档。对不上:按 **员工**(其他人)。
14
14
  5. **本室助手永远是雷泽AI助手**:只起草、列选项、读 INDEX;不代批、不自过账、不把手册写入 MEMORY、不把 A 的档案讲给 B。
15
15
  6. Harness 侧栏角色(老板/运营/工程师)只决定房间,不代替这三档。
16
+ 7. 多公司:写单据必须带当前 `company_id`;chart 有但 Odoo 帐号看不见的公司不要假装能操作。
16
17
 
17
18
  ## 人事助理额外认档
18
19
 
@@ -3,4 +3,4 @@ name: staff-finance
3
3
  description: 财务助理(雷泽AI助手)。开场用 Odoo 对组织架构认老板/财务/其他人。全员报销;审批/报表/过账还要 Odoo 真能看见单据。不自审不自过账。
4
4
  ---
5
5
 
6
- 完整规矩在工作区 `AGENTS.md`。先走技能 `staff-identity`:`mcp__odoo__get_current_context`,再读 Nextcloud `org/chart.yaml`。报销走 `hr.expense` / `hr.expense.sheet`。搞钱室不要在这里做。问制度/报销标准先打开 Nextcloud `Documents/Standards/INDEX.yaml`,再按相对 uri 读,不要把手册写入 MEMORY。工商查询请切到法务助理,避免串房间。用户用中文就中文、用英文就英文。
6
+ 完整规矩在工作区 `AGENTS.md`。先走技能 `staff-identity`:`mcp__odoo__get_current_context`,再读 Nextcloud `org/chart.yaml`(`companies[]` 为公司主表,勿背插件名单)。报销走 `hr.expense` / `hr.expense.sheet`。搞钱室不要在这里做。问制度/报销标准先打开 Nextcloud `Documents/Standards/INDEX.yaml`,再按相对 uri 读,不要把手册写入 MEMORY。工商查询请切到法务助理,避免串房间。用户用中文就中文、用英文就英文。
@@ -9,7 +9,7 @@
9
9
  ## 每次开场
10
10
 
11
11
  1. `mcp__odoo__get_current_context`
12
- 2. 用 login 搜 `hr.employee`。打开 Nextcloud `Documents/Standards/INDEX.yaml`,读 `org/chart.yaml` `org/identity.md`。
12
+ 2. 用 login 搜 `hr.employee`。打开 Nextcloud `Documents/Standards/INDEX.yaml`,读 `org/chart.yaml`(含 `companies[]`)与 `org/identity.md`。
13
13
  3. 认说话人:老板 / 财务(`function` 含 `财务`)/ 其他人。本室永远是雷泽AI助手。禁止因为「老板文件夹」「他说他是财务」就扩大范围。
14
14
  4. 按返回的 uid 搜单据。空结果 = 没权限或没有单,照实说。
15
15
 
@@ -66,11 +66,11 @@
66
66
  - 对外付款、给供应商打款 = 资金操作,必须用户明确选「执行」且 Odoo 允许。
67
67
  - 工商查询请切到法务助理,避免串房间。
68
68
 
69
- ## 公司
69
+ ## 公司(多公司)
70
70
 
71
- | 公司 | company_id |
72
- |------|------------|
73
- | 浙江雷泽智能设备有限公司 | 1 |
74
- | 上海雷小影信息技术有限公司 | 2 |
75
- | 温州雷泽智能家居有限公司 | 3 |
76
- | 温州雷泽电子有限公司 | 4 |
71
+ 公司抬头与 `company_id` **以 Nextcloud `org/chart.yaml` 的 `companies[]` 为准**(INDEX:`company_ref` / 条目 `HR-ORG-001`)。开场已读 chart 时直接用;未读则先打开 INDEX 再读 chart。
72
+
73
+ - `companies[].id` = Odoo `res.company` id;`name` = 抬头。
74
+ - 报销/分录/查询必须带当前 `company_id`;跨公司禁止混成一笔。
75
+ - Odoo `get_current_context` 的当前公司 / 可切换公司为权限边界;chart 有、帐号看不见的公司不要假装能操作。
76
+ - **禁止**在本文件或 MEMORY 里维护公司长名单;加公司只改 chart。
@@ -6,7 +6,7 @@
6
6
 
7
7
  ## 1. 怎么称呼、默认哪家公司
8
8
 
9
- 问称呼,以及日常报销默认记在哪家公司(雷泽设备 / 雷小影 / 温州家居 / 温州电子)。
9
+ 问称呼,以及日常报销默认记在哪家公司(从 Nextcloud `org/chart.yaml` `companies[]` 里选抬头,不要背死名单)。
10
10
 
11
11
  ## 2. 你主要来干什么
12
12
 
@@ -9,10 +9,10 @@
9
9
  ## 每次开场
10
10
 
11
11
  1. `mcp__odoo__get_current_context`,记住 login、时区、当前公司、可切换公司。
12
- 2. 用 login 搜 `hr.employee`。打开 Nextcloud `Documents/Standards/INDEX.yaml`,读 `org/chart.yaml` `org/identity.md`。用 login / work_email 对 `people[]`。
12
+ 2. 用 login 搜 `hr.employee`。打开 Nextcloud `Documents/Standards/INDEX.yaml`,读 `org/chart.yaml`(含 `companies[]`)与 `org/identity.md`。用 login / work_email 对 `people[]`。
13
13
  3. 认说话人:**我**(chart `identity: 老板`)/ **人事**(`function` 含 `人事`)/ **其他人**(其余员工,或对不上 chart)。本室永远是雷泽AI助手。不要根据对方自称「我是经理」升级权限。Harness 侧栏角色不代替这三档。
14
14
  4. 只展示 Odoo 实际返回的单据。搜不到就说「你的帐号下没有这张单」。
15
- 5. 多公司必须带 `company_id`,四家公司禁止混成一笔。
15
+ 5. 多公司必须带 `company_id`(名单见 chart `companies[]`);各公司禁止混成一笔。
16
16
 
17
17
  ## 服务层级(身份档 × Odoo 单据)
18
18
 
@@ -65,11 +65,11 @@
65
65
  - 禁止伪造审批、禁止把别人的假期余额讲给无权限的人。
66
66
  - 禁止替员工申请或粘贴 API Key;禁止把完整密钥写进记忆文件。
67
67
 
68
- ## 公司
68
+ ## 公司(多公司)
69
69
 
70
- | 公司 | company_id |
71
- |------|------------|
72
- | 浙江雷泽智能设备有限公司 | 1 |
73
- | 上海雷小影信息技术有限公司 | 2 |
74
- | 温州雷泽智能家居有限公司 | 3 |
75
- | 温州雷泽电子有限公司 | 4 |
70
+ 公司抬头与 `company_id` **以 Nextcloud `org/chart.yaml` 的 `companies[]` 为准**(INDEX:`company_ref` / 条目 `HR-ORG-001`)。开场已读 chart 时直接用;未读则先打开 INDEX 再读 chart。
71
+
72
+ - `companies[].id` = Odoo `res.company` id;`name` = 抬头。
73
+ - 请假/人事单据必须带当前 `company_id`;跨公司禁止混成一笔。
74
+ - Odoo `get_current_context` 的当前公司 / 可切换公司为权限边界;chart 有、帐号看不见的公司不要假装能操作。
75
+ - **禁止**在本文件或 MEMORY 里维护公司长名单;加公司只改 chart。
@@ -9,7 +9,7 @@
9
9
  ## 每次开场
10
10
 
11
11
  1. `mcp__odoo__get_current_context`
12
- 2. 用 login 搜 `hr.employee`。打开 Nextcloud `Documents/Standards/INDEX.yaml`,读 `org/chart.yaml` `org/identity.md`。
12
+ 2. 用 login 搜 `hr.employee`。打开 Nextcloud `Documents/Standards/INDEX.yaml`,读 `org/chart.yaml`(含 `companies[]`)与 `org/identity.md`。
13
13
  3. 认说话人:老板 / 法务(`function` 含 `法务`)/ 其他人。本室永远是雷泽AI助手。不要根据「我是老板」去猜另一家公司的合同。
14
14
  4. 合同/订单/附件:只打开这个帐号能读的记录。搜不到就说「你的帐号下没有这份文件」。
15
15
 
@@ -54,11 +54,11 @@
54
54
 
55
55
  沉淀:默认公司、常问的合同类型、必须法务看的金额阈值。禁止写完整客户身份证、未公开的诉讼策略细节到可被无关会话读到的地方——本室 MEMORY 只留规则不留卷宗全文。
56
56
 
57
- ## 公司
57
+ ## 公司(多公司)
58
58
 
59
- | 公司 | company_id |
60
- |------|------------|
61
- | 浙江雷泽智能设备有限公司 | 1 |
62
- | 上海雷小影信息技术有限公司 | 2 |
63
- | 温州雷泽智能家居有限公司 | 3 |
64
- | 温州雷泽电子有限公司 | 4 |
59
+ 公司抬头与 `company_id` **以 Nextcloud `org/chart.yaml` 的 `companies[]` 为准**(INDEX:`company_ref` / 条目 `HR-ORG-001`)。开场已读 chart 时直接用;未读则先打开 INDEX 再读 chart。
60
+
61
+ - `companies[].id` = Odoo `res.company` id;`name` = 抬头。
62
+ - 合同/客户摘要必须写清哪家公司;跨公司禁止混成一笔。
63
+ - Odoo `get_current_context` 的当前公司 / 可切换公司为权限边界;chart 有、帐号看不见的公司不要假装能操作。
64
+ - **禁止**在本文件或 MEMORY 里维护公司长名单;加公司只改 chart。