dsh-tender-workbench 0.4.5 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.en.md +7 -7
- package/README.md +6 -6
- package/docs/RELEASE-0.5.0.md +25 -0
- package/lib/client.js +4022 -3610
- package/lib/client.js.map +1 -1
- package/lib/types/client/TenderEntry.d.ts +9 -9
- package/lib/types/client/TenderEntry.d.ts.map +1 -1
- package/lib/types/client/TenderPrompt.d.ts +18 -0
- package/lib/types/client/TenderPrompt.d.ts.map +1 -0
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/tender-hero-bridge.d.ts +9 -0
- package/lib/types/client/tender-hero-bridge.d.ts.map +1 -0
- package/lib/types/client/tender-prompt.d.ts +20 -0
- package/lib/types/client/tender-prompt.d.ts.map +1 -0
- package/lib/types/client/workbench/TenderWorkbench.d.ts +5 -1
- package/lib/types/client/workbench/TenderWorkbench.d.ts.map +1 -1
- package/package.json +3 -2
- package/docs/RELEASE-0.4.5.md +0 -21
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import type { InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export type TenderHeroTitleBridgeProps = PropsRuntime<'conversation.input.dock'> & PropsLocale<'tenderFilter'>;
|
|
7
|
-
/**
|
|
8
|
-
export declare function TenderHeroTitleBridge({ sessionId,
|
|
2
|
+
import type { WorkbenchPhase } from './workbench/navigation-controller.ts';
|
|
3
|
+
export interface TenderHeroInjected {
|
|
4
|
+
openPhase(phase: WorkbenchPhase): boolean;
|
|
5
|
+
}
|
|
6
|
+
export type TenderHeroTitleBridgeProps = PropsRuntime<'conversation.input.dock'> & PropsLocale<'tenderFilter'> & InjectFace<TenderHeroInjected>;
|
|
7
|
+
/** Only this session's own DOM is branded; no root/single brand slot. */
|
|
8
|
+
export declare function TenderHeroTitleBridge({ sessionId, useSession, openPhase }: TenderHeroTitleBridgeProps): import("react").JSX.Element;
|
|
9
9
|
export interface TenderSidebarEntryInjected {
|
|
10
10
|
startTenderSession(): Promise<void>;
|
|
11
11
|
}
|
|
12
12
|
export type TenderSidebarEntryProps = PropsRuntime<'sidebar.footer.action'> & InjectFace<TenderSidebarEntryInjected> & PropsLocale<'tenderFilter'>;
|
|
13
13
|
/** Global launcher portalled at the start of the sidebar's primary action region. */
|
|
14
|
-
export declare function TenderSidebarEntry({ wide, startTenderSession, t }: TenderSidebarEntryProps): import("react").ReactPortal | null;
|
|
14
|
+
export declare function TenderSidebarEntry({ wide, startTenderSession, t, useSessions }: TenderSidebarEntryProps): import("react").ReactPortal | null;
|
|
15
15
|
export interface TenderHeaderEntryInjected {
|
|
16
16
|
openWorkbench(): boolean;
|
|
17
17
|
}
|
|
18
18
|
export type TenderHeaderEntryProps = PropsRuntime<'conversation.session.header.actions'> & InjectFace<TenderHeaderEntryInjected> & PropsLocale<'tenderFilter'>;
|
|
19
|
-
export declare function TenderSessionHeaderEntry({ openWorkbench, t, useProjection }: TenderHeaderEntryProps): import("react").JSX.Element;
|
|
19
|
+
export declare function TenderSessionHeaderEntry({ sessionId, openWorkbench, t, useProjection }: TenderHeaderEntryProps): import("react").JSX.Element | null;
|
|
20
20
|
//# sourceMappingURL=TenderEntry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TenderEntry.d.ts","sourceRoot":"","sources":["../../../src/client/TenderEntry.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TenderEntry.d.ts","sourceRoot":"","sources":["../../../src/client/TenderEntry.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAS7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAA;AAK1E,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAA;CAC1C;AACD,MAAM,MAAM,0BAA0B,GAAG,YAAY,CAAC,yBAAyB,CAAC,GAC5E,WAAW,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAA;AAEhE,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,0BAA0B,+BA4BrG;AAED,MAAM,WAAW,0BAA0B;IACzC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACpC;AAED,MAAM,MAAM,uBAAuB,GAAG,YAAY,CAAC,uBAAuB,CAAC,GACvE,UAAU,CAAC,0BAA0B,CAAC,GACtC,WAAW,CAAC,cAAc,CAAC,CAAA;AAiB/B,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,uBAAuB,sCAsEvG;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,IAAI,OAAO,CAAA;CACzB;AAED,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAAC,qCAAqC,CAAC,GACpF,UAAU,CAAC,yBAAyB,CAAC,GACrC,WAAW,CAAC,cAAc,CAAC,CAAA;AAE/B,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,sBAAsB,sCAc9G"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PropsRuntime, InjectFace } from '@deepseek-ai/dsh-client-ui-slots';
|
|
2
|
+
import { type TenderDraftPort, type TenderPromptMemory } from './tender-prompt.ts';
|
|
3
|
+
declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
4
|
+
interface SlotMap {
|
|
5
|
+
'conversation.input.overlay': {
|
|
6
|
+
kind: 'list';
|
|
7
|
+
scope: 'session';
|
|
8
|
+
owner: object;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export interface TenderPromptInjected {
|
|
13
|
+
draftPort: TenderDraftPort;
|
|
14
|
+
memory: TenderPromptMemory;
|
|
15
|
+
}
|
|
16
|
+
export type TenderPromptProps = PropsRuntime<'conversation.input.overlay'> & InjectFace<TenderPromptInjected>;
|
|
17
|
+
export declare function TenderPromptEntry(props: TenderPromptProps): import("react").JSX.Element | null;
|
|
18
|
+
//# sourceMappingURL=TenderPrompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TenderPrompt.d.ts","sourceRoot":"","sources":["../../../src/client/TenderPrompt.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAEhF,OAAO,EAAgD,KAAK,eAAe,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAMhI,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,OAAO;QACf,4BAA4B,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,SAAS,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAA;KAChF;CACF;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,eAAe,CAAA;IAC1B,MAAM,EAAE,kBAAkB,CAAA;CAC3B;AACD,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC,4BAA4B,CAAC,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAA;AAE7G,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,sCAGzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAmB9D,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AAiBrD,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,2DAA2D;QAC3D,YAAY,EAAE,SAAS,CAAA;KACxB;CACF;AAID,iFAAiF;AACjF,eAAO,MAAM,MAAM,UAElB,CAAA;AAmCD,mGAAmG;AACnG,wBAAgB,KAAK,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,CAiHpD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility bridge for DSH 0.1.1-rc.2 (no session headline slot).
|
|
3
|
+
* Hide only the verified native brand row, insert an owned row, and restore it
|
|
4
|
+
* on exit. Never claim the root/single hero.brand.mark slot or rewrite siblings.
|
|
5
|
+
*/
|
|
6
|
+
export declare function mountTenderHero(anchor: HTMLElement, onMount: (node: HTMLElement) => void): () => void;
|
|
7
|
+
/** input.dock is BEFORE the native composer: portal only our navigation below it. */
|
|
8
|
+
export declare function mountTenderShortcuts(anchor: HTMLElement, onMount: (node: HTMLElement | null) => void): () => void;
|
|
9
|
+
//# sourceMappingURL=tender-hero-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tender-hero-bridge.d.ts","sourceRoot":"","sources":["../../../src/client/tender-hero-bridge.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,CAkBrG;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI,CAwBjH"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface TenderPromptDraft {
|
|
2
|
+
scope: 'combined' | 'tender' | 'proposed';
|
|
3
|
+
keywords: string;
|
|
4
|
+
period: '近3个月' | '近1个月' | '近7天' | '不限时间';
|
|
5
|
+
region: string;
|
|
6
|
+
target: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const initialTenderPrompt: () => TenderPromptDraft;
|
|
9
|
+
export interface TenderDraftPort {
|
|
10
|
+
read(): string;
|
|
11
|
+
write(value: string): void;
|
|
12
|
+
}
|
|
13
|
+
export interface TenderPromptMemory {
|
|
14
|
+
draft: TenderPromptDraft;
|
|
15
|
+
lastGenerated?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function formatTenderPromptDraft(draft: TenderPromptDraft): string;
|
|
18
|
+
/** Replace only an intact previous generated block; edited/manual text needs a choice. */
|
|
19
|
+
export declare function planTenderDraftFill(current: string, generated: string, previous?: string): string | undefined;
|
|
20
|
+
//# sourceMappingURL=tender-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tender-prompt.d.ts","sourceRoot":"","sources":["../../../src/client/tender-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAA;IACzC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AACD,eAAO,MAAM,mBAAmB,QAAO,iBAErC,CAAA;AACF,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,MAAM,CAAA;IACd,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AACD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,iBAAiB,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AACD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAWxE;AAED,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI7G"}
|
|
@@ -4,7 +4,7 @@ import type { TenderWorkbenchIntentV2 } from '../../contracts/intents.ts';
|
|
|
4
4
|
import type { TenderTranslate } from '../fields/field-props.ts';
|
|
5
5
|
import type { TenderWorkbenchRevealController } from '../better-sidebar-adapter.ts';
|
|
6
6
|
import { type TenderProjectionPort, type TenderProjectionRead } from '../tender-projection-port.ts';
|
|
7
|
-
import { type TenderWorkbenchNavigationController } from './navigation-controller.ts';
|
|
7
|
+
import { type WorkbenchPhaseIcon, type TenderWorkbenchNavigationController } from './navigation-controller.ts';
|
|
8
8
|
import { tenderWorkbenchDisplayStatus, type TenderWorkbenchDisplayStatus } from './workbench-status.ts';
|
|
9
9
|
import { type TenderRowsLoader } from './TenderDataViews.tsx';
|
|
10
10
|
import { type ClassifiedRowsLoader, type RuleContentLoader } from './TenderScreeningViews.tsx';
|
|
@@ -26,6 +26,10 @@ export interface TenderWorkbenchViewProps {
|
|
|
26
26
|
readonly downloadReport?: ReportArtifactDownloader;
|
|
27
27
|
readonly t: TenderTranslate;
|
|
28
28
|
}
|
|
29
|
+
type WorkbenchIconName = WorkbenchPhaseIcon | 'briefcase' | 'check' | 'clock' | 'warning';
|
|
30
|
+
export declare function WorkbenchIcon({ name }: {
|
|
31
|
+
readonly name: WorkbenchIconName;
|
|
32
|
+
}): import("react").JSX.Element;
|
|
29
33
|
/** S1-S5 workbench: persistent business facts with local, disposable view state. */
|
|
30
34
|
export declare function TenderWorkbenchView({ sessionId, projection, navigation, sendIntent, createIntentId, loadRows, loadRuleContent, loadClassifiedRows, loadReviewRows, loadReportView, downloadReport, t, }: TenderWorkbenchViewProps): import("react").JSX.Element;
|
|
31
35
|
export interface TenderWorkbenchTabProps extends TabComponentProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TenderWorkbench.d.ts","sourceRoot":"","sources":["../../../../src/client/workbench/TenderWorkbench.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TenderWorkbench.d.ts","sourceRoot":"","sources":["../../../../src/client/workbench/TenderWorkbench.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-tender-workbench",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "DeepSeek Harness 招投标工作台智能体:支持招投标查询、规则初筛、智能分析、人工复核及 Excel/PDF 报告交付。",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek-harness",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"README.en.md",
|
|
36
36
|
"CHANGELOG.md",
|
|
37
37
|
"cordis.patch.yml",
|
|
38
|
-
"docs/RELEASE-0.
|
|
38
|
+
"docs/RELEASE-0.5.0.md",
|
|
39
39
|
"lib/index.js",
|
|
40
40
|
"lib/client.js",
|
|
41
41
|
"lib/client.js.map",
|
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
"release:check": "node scripts/check-release-state.mjs",
|
|
66
66
|
"test": "vitest run",
|
|
67
67
|
"typecheck": "tsc --project tsconfig.json",
|
|
68
|
+
"test:ui": "node scripts/ui-blue-regression.mjs",
|
|
68
69
|
"verify-pack": "node scripts/verify-pack.mjs"
|
|
69
70
|
},
|
|
70
71
|
"publishConfig": {
|
package/docs/RELEASE-0.4.5.md
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# dsh-tender-workbench 0.4.5 发布清单
|
|
2
|
-
|
|
3
|
-
- Version: **0.4.5**
|
|
4
|
-
- Status: **release candidate**
|
|
5
|
-
- 日期:2026-09-06
|
|
6
|
-
- 标签:`v0.4.5`
|
|
7
|
-
- npm:`dsh-tender-workbench@0.4.5`,目标 dist-tag 为 `latest`
|
|
8
|
-
|
|
9
|
-
## 范围与验证
|
|
10
|
-
|
|
11
|
-
补齐旧业务空白会话复用保护,普通新会话恢复原生首页及收起的业务侧栏。保留旧会话、历史和草稿;兼容包装可撤销,支持并发合并。公共导出和 Artifact Schema 不变。
|
|
12
|
-
|
|
13
|
-
本地修复测试 213 项通过、1 项跳过;三个插件的四组页面切换场景通过,用户已复测 OK。发布前重新执行完整 check 和 tag 一致性检查。
|
|
14
|
-
|
|
15
|
-
## 发布流程
|
|
16
|
-
|
|
17
|
-
提交并推送 main,确认 CI,再创建不可变的 annotated tag v0.4.5。由 release.yml 的 GitHub OIDC Trusted Publishing 发布并生成 provenance,随后核对 npm latest、GitHub Release 和运行结果。不使用长期 npm Token。
|
|
18
|
-
|
|
19
|
-
## 回退
|
|
20
|
-
|
|
21
|
-
必要时安装 dsh-tender-workbench@0.4.4 并重启 Profile;旧会话复用问题会恢复。不得覆盖已发布 npm 版本或移动公开标签。
|