dsh-tender-workbench 0.2.1-beta.1 → 0.2.1-beta.3

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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  `dsh-tender-workbench` is an open-source DeepSeek Harness tender Agent workbench. The current S1-S5.3 MVP provides one Session-scoped Better Sidebar workbench, three official entry points, a four-phase progressive shell over seven internal Projection nodes, and a real query → optional analysis → human review → immutable Excel/PDF delivery chain.
4
4
 
5
- The three entries are `sidebar.footer.action` (“招投标”), `conversation.input.left` (“搜索招投标”), and `conversation.session.header.actions` (reopen). They all focus the same `dsh-better-sidebar 0.17.1` single-instance Tab for the addressed Session. The workbench reads only that Session's Host Projection through a narrow `TenderProjectionPort`; it does not infer business state from chat text or maintain cross-Session state.
5
+ The three entries are `sidebar.footer.action` (“招投标”), `conversation.input.left` (“搜索招投标”), and `conversation.session.header.actions` (reopen). They all focus the same Better Sidebar single-instance Tab for the addressed Session. The workbench reads only that Session's Host Projection through a narrow `TenderProjectionPort`; it does not infer business state from chat text or maintain cross-Session state.
6
6
 
7
7
  The single query workspace now captures the complete approved condition set: source scope, up to ten keywords, publication presets/prior year/custom dates, up to twenty province/city/district regions, the analysis goal, tender information type and conditional stages/amounts, procurement method/industry/type, and proposed-project stage/approval/investment. The visible execution plan, user message, Host validation, and exact qcc calls all come from the same `TenderQueryIntentV1`; hidden or inactive branches cannot leak stale values, and `smartSort` is not exposed as a user filter.
8
8
 
@@ -40,9 +40,11 @@ The MVP deliberately does not implement report preview/version centers, successf
40
40
 
41
41
  ## Compatibility
42
42
 
43
- This checkout targets DeepSeek Harness `0.1.1-rc.2` and requires `dsh-mcp-connector 0.2.31` plus `dsh-better-sidebar 0.17.1`. The MCP Connector hosts and authorizes the `qcc-tender` connection used by the Agent execution boundary; the Client never calls it directly or reads its credentials. The Better Sidebar version is exact because S1a relies on its validated `targetedOpen`, `stateSubscription`, public Tab store, and Session scope contracts.
43
+ The published plugin does not pin DeepSeek Harness, MCP Connector, or Better Sidebar to exact deployment versions. Its peer metadata declares minimums with no stable-version upper bound: DSH public packages from `0.1.1-rc.2`, MCP Connector from `0.2.31`, and Better Sidebar from `0.17.1`. The active Profile still supplies one coherent runtime. Runtime compatibility remains capability-based: Better Sidebar must expose the public `targetedOpen` and `stateSubscription` features, while the Host must provide the public Session Projection, JSONL Session Persistence, Tools, Skill, Sessions, and WebServer services used by the workflow. Development and release verification currently use DSH `0.1.1-rc.2` with Better Sidebar `0.17.1` as a reproducible reference combination, not as an exact installation restriction.
44
44
 
45
- S2-S5 additionally require the standard JSONL Session Persistence service and an installed, authorized `qcc-tender` MCP connection exposing the exact tools `mcp__qcc-tender__search_tenders` and `mcp__qcc-tender__search_proposed_projects`. Missing tools or non-JSONL persistence fail explicitly; there is no Web-search, Workspace-storage, or alternate-persistence fallback.
45
+ S2-S5 additionally require the standard JSONL Session Persistence service and an installed, authorized `qcc-tender` MCP connection exposing the exact tools `mcp__qcc-tender__search_tenders` and `mcp__qcc-tender__search_proposed_projects`. Missing capabilities, missing tools, or non-JSONL persistence fail explicitly; there is no Web-search, Workspace-storage, or alternate-persistence fallback.
46
+
47
+ `peerDependencies` let package managers diagnose versions below those minimums, but the current `dsh plugin` command delegates to pnpm, whose Profile defaults report peer conflicts as warnings instead of guaranteed installation failures. DSH currently has no Bundle-manifest prerequisite field. Consequently this package cannot promise a hard pre-install rejection on every DSH version; missing Host services still keep the Host plugin from activating, and missing Better Sidebar features fail Client activation before a business command is sent.
46
48
 
47
49
  ## Build and test
48
50
 
@@ -64,8 +66,8 @@ The build emits the Host loader entry at `lib/index.js`, the DSH Client factory
64
66
  The current release is an internal preview published under the `beta` dist-tag. Install it explicitly through `@beta` so the preview channel remains clear even when npm also resolves the first published version through `latest`:
65
67
 
66
68
  ```sh
67
- dsh plugin --profile web add dsh-mcp-connector@0.2.31
68
- dsh plugin --profile web add dsh-better-sidebar@0.17.1
69
+ dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
70
+ dsh plugin --profile web add 'dsh-better-sidebar@>=0.17.1'
69
71
  dsh plugin --profile web add dsh-tender-workbench@beta
70
72
  dsh web --no-open
71
73
  ```
@@ -73,16 +75,16 @@ dsh web --no-open
73
75
  To install an exact version:
74
76
 
75
77
  ```sh
76
- dsh plugin --profile web add dsh-mcp-connector@0.2.31
77
- dsh plugin --profile web add dsh-better-sidebar@0.17.1
78
- dsh plugin --profile web add dsh-tender-workbench@0.2.1-beta.1
78
+ dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
79
+ dsh plugin --profile web add 'dsh-better-sidebar@>=0.17.1'
80
+ dsh plugin --profile web add dsh-tender-workbench@0.2.1-beta.3
79
81
  ```
80
82
 
81
83
  After a stable version is published to `latest`, users will be able to install it without an explicit tag:
82
84
 
83
85
  ```sh
84
- dsh plugin --profile web add dsh-mcp-connector@0.2.31
85
- dsh plugin --profile web add dsh-better-sidebar@0.17.1
86
+ dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
87
+ dsh plugin --profile web add 'dsh-better-sidebar@>=0.17.1'
86
88
  dsh plugin --profile web add dsh-tender-workbench
87
89
  ```
88
90
 
@@ -91,8 +93,8 @@ dsh plugin --profile web add dsh-tender-workbench
91
93
  Install and mount MCP Connector and Better Sidebar first. Then build this repository and run the following command from the plugin root when the public `dsh` CLI is available:
92
94
 
93
95
  ```sh
94
- dsh plugin --profile web add dsh-mcp-connector@0.2.31
95
- dsh plugin --profile web add dsh-better-sidebar@0.17.1
96
+ dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
97
+ dsh plugin --profile web add 'dsh-better-sidebar@>=0.17.1'
96
98
  dsh plugin --profile web add .
97
99
  dsh web --no-open
98
100
  ```
@@ -101,8 +103,8 @@ If `dsh` is only available through a separate DeepSeek Harness source checkout,
101
103
 
102
104
  ```sh
103
105
  cd /path/to/deepseek-harness
104
- pnpm dsh plugin --profile web add dsh-mcp-connector@0.2.31
105
- pnpm dsh plugin --profile web add dsh-better-sidebar@0.17.1
106
+ pnpm dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
107
+ pnpm dsh plugin --profile web add 'dsh-better-sidebar@>=0.17.1'
106
108
  pnpm dsh plugin --profile web add /absolute/path/to/dsh-tender-workbench
107
109
  pnpm dsh web --no-open
108
110
  ```
@@ -110,9 +112,9 @@ pnpm dsh web --no-open
110
112
  ### Install from a tarball
111
113
 
112
114
  ```sh
113
- dsh plugin --profile web add dsh-mcp-connector@0.2.31
114
- dsh plugin --profile web add dsh-better-sidebar@0.17.1
115
- dsh plugin --profile web add ./dsh-tender-workbench-0.2.1-beta.1.tgz
115
+ dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
116
+ dsh plugin --profile web add 'dsh-better-sidebar@>=0.17.1'
117
+ dsh plugin --profile web add ./dsh-tender-workbench-0.2.1-beta.3.tgz
116
118
  dsh web --no-open
117
119
  ```
118
120
 
package/lib/client.js CHANGED
@@ -4507,7 +4507,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4507
4507
  //#endregion
4508
4508
  //#region src/client/better-sidebar-adapter.ts
4509
4509
  const TENDER_WORKBENCH_TAB_ID = "dsh-tender-workbench:agent";
4510
- const SUPPORTED_SIDEBAR_VERSION = /^0\.17\./u;
4511
4510
  function treeContainsTab(node, tabId) {
4512
4511
  if (node.kind === "leaf") return node.tabs.some((tab) => tab.id === tabId);
4513
4512
  return node.children.some((child) => treeContainsTab(child, tabId));
@@ -4566,11 +4565,17 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4566
4565
  tabId
4567
4566
  ]);
4568
4567
  }
4569
- /** Fail loudly when the mandatory provider does not expose the validated contract. */
4568
+ /** Fail loudly only when the mandatory provider lacks an exercised capability. */
4570
4569
  function assertBetterSidebarContract(service) {
4571
- if (!SUPPORTED_SIDEBAR_VERSION.test(service.version)) throw new Error(`dsh-tender-workbench requires dsh-better-sidebar 0.17.x, got ${service.version}`);
4572
- if (!service.features.includes("targetedOpen")) throw new Error("dsh-tender-workbench requires the Better Sidebar targetedOpen capability");
4573
- if (!service.features.includes("stateSubscription")) throw new Error("dsh-tender-workbench requires the Better Sidebar stateSubscription capability");
4570
+ for (const method of [
4571
+ "registerTab",
4572
+ "isTabEnabled",
4573
+ "openTab",
4574
+ "getSnapshot"
4575
+ ]) if (typeof service[method] !== "function") throw new Error(`dsh-tender-workbench requires the Better Sidebar ${method}() capability`);
4576
+ const features = Array.isArray(service.features) ? service.features : [];
4577
+ if (!features.includes("targetedOpen")) throw new Error("dsh-tender-workbench requires the Better Sidebar targetedOpen capability");
4578
+ if (!features.includes("stateSubscription")) throw new Error("dsh-tender-workbench requires the Better Sidebar stateSubscription capability");
4574
4579
  }
4575
4580
  /** Register the single Session-scoped workbench tab through Better Sidebar's public service. */
4576
4581
  function registerTenderWorkbenchTab(service, component, title = "招投标") {