dsh-tender-workbench 0.2.1-beta.0 → 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/LICENSE +21 -21
- package/README.md +109 -71
- package/cordis.patch.yml +3 -3
- package/lib/client.js +23899 -13042
- package/lib/client.js.map +1 -1
- package/lib/index.js +7143 -3
- package/lib/types/client/TenderEntry.d.ts +14 -5
- package/lib/types/client/TenderEntry.d.ts.map +1 -1
- package/lib/types/client/area-data.d.ts +1 -1
- package/lib/types/client/area-data.d.ts.map +1 -1
- package/lib/types/client/artifact-api.d.ts +17 -0
- package/lib/types/client/artifact-api.d.ts.map +1 -0
- package/lib/types/client/better-sidebar-adapter.d.ts +35 -0
- package/lib/types/client/better-sidebar-adapter.d.ts.map +1 -0
- package/lib/types/client/client-context.d.ts +10 -0
- package/lib/types/client/client-context.d.ts.map +1 -0
- package/lib/types/client/index.d.ts +5 -5
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/intents/query-intent.d.ts +12 -0
- package/lib/types/client/intents/query-intent.d.ts.map +1 -0
- package/lib/types/client/intents/screening-intent.d.ts +178 -0
- package/lib/types/client/intents/screening-intent.d.ts.map +1 -0
- package/lib/types/client/intents/send-session-intent.d.ts +10 -0
- package/lib/types/client/intents/send-session-intent.d.ts.map +1 -0
- package/lib/types/client/locales.d.ts +1181 -1
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/qcc-request.d.ts +10 -36
- package/lib/types/client/qcc-request.d.ts.map +1 -1
- package/lib/types/client/tender-projection-port.d.ts +23 -0
- package/lib/types/client/tender-projection-port.d.ts.map +1 -0
- package/lib/types/client/workbench/SessionWriteProgress.d.ts +16 -0
- package/lib/types/client/workbench/SessionWriteProgress.d.ts.map +1 -0
- package/lib/types/client/workbench/TenderAnalysisReviewViews.d.ts +26 -0
- package/lib/types/client/workbench/TenderAnalysisReviewViews.d.ts.map +1 -0
- package/lib/types/client/workbench/TenderDataViews.d.ts +25 -0
- package/lib/types/client/workbench/TenderDataViews.d.ts.map +1 -0
- package/lib/types/client/workbench/TenderQueryWorkspace.d.ts +27 -0
- package/lib/types/client/workbench/TenderQueryWorkspace.d.ts.map +1 -0
- package/lib/types/client/workbench/TenderReportView.d.ts +15 -0
- package/lib/types/client/workbench/TenderReportView.d.ts.map +1 -0
- package/lib/types/client/workbench/TenderScreeningViews.d.ts +31 -0
- package/lib/types/client/workbench/TenderScreeningViews.d.ts.map +1 -0
- package/lib/types/client/workbench/TenderWorkbench.d.ts +38 -0
- package/lib/types/client/workbench/TenderWorkbench.d.ts.map +1 -0
- package/lib/types/client/workbench/WorkbenchPrimitives.d.ts +38 -0
- package/lib/types/client/workbench/WorkbenchPrimitives.d.ts.map +1 -0
- package/lib/types/client/workbench/navigation-controller.d.ts +46 -0
- package/lib/types/client/workbench/navigation-controller.d.ts.map +1 -0
- package/lib/types/client/workbench/session-write-flight.d.ts +30 -0
- package/lib/types/client/workbench/session-write-flight.d.ts.map +1 -0
- package/lib/types/client/workbench/workbench-status.d.ts +15 -0
- package/lib/types/client/workbench/workbench-status.d.ts.map +1 -0
- package/lib/types/client/write-session-draft.d.ts +3 -2
- package/lib/types/client/write-session-draft.d.ts.map +1 -1
- package/lib/types/contracts/analysis-review.d.ts +2355 -0
- package/lib/types/contracts/analysis-review.d.ts.map +1 -0
- package/lib/types/contracts/dataset.d.ts +1499 -0
- package/lib/types/contracts/dataset.d.ts.map +1 -0
- package/lib/types/contracts/query-schema.d.ts +80 -0
- package/lib/types/contracts/query-schema.d.ts.map +1 -0
- package/lib/types/contracts/query.d.ts +37 -0
- package/lib/types/contracts/query.d.ts.map +1 -0
- package/lib/types/contracts/reporting.d.ts +1451 -0
- package/lib/types/contracts/reporting.d.ts.map +1 -0
- package/lib/types/contracts/screening-intents.d.ts +265 -0
- package/lib/types/contracts/screening-intents.d.ts.map +1 -0
- package/lib/types/contracts/screening.d.ts +1702 -0
- package/lib/types/contracts/screening.d.ts.map +1 -0
- package/lib/types/contracts/workflow.d.ts +1267 -0
- package/lib/types/contracts/workflow.d.ts.map +1 -0
- package/lib/types/host/artifacts/artifact-route.d.ts +10 -0
- package/lib/types/host/artifacts/artifact-route.d.ts.map +1 -0
- package/lib/types/host/artifacts/command-receipts.d.ts +47 -0
- package/lib/types/host/artifacts/command-receipts.d.ts.map +1 -0
- package/lib/types/host/artifacts/register-route.d.ts +5 -0
- package/lib/types/host/artifacts/register-route.d.ts.map +1 -0
- package/lib/types/host/artifacts/store.d.ts +45 -0
- package/lib/types/host/artifacts/store.d.ts.map +1 -0
- package/lib/types/host/http-trust.d.ts +8 -0
- package/lib/types/host/http-trust.d.ts.map +1 -0
- package/lib/types/host/nested-tool.d.ts +6 -0
- package/lib/types/host/nested-tool.d.ts.map +1 -0
- package/lib/types/host/pipeline/analysis-review.d.ts +49 -0
- package/lib/types/host/pipeline/analysis-review.d.ts.map +1 -0
- package/lib/types/host/pipeline/classify.d.ts +29 -0
- package/lib/types/host/pipeline/classify.d.ts.map +1 -0
- package/lib/types/host/pipeline/normalize.d.ts +19 -0
- package/lib/types/host/pipeline/normalize.d.ts.map +1 -0
- package/lib/types/host/pipeline/qcc-adapters.d.ts +79 -0
- package/lib/types/host/pipeline/qcc-adapters.d.ts.map +1 -0
- package/lib/types/host/pipeline/screening-context.d.ts +11 -0
- package/lib/types/host/pipeline/screening-context.d.ts.map +1 -0
- package/lib/types/host/projection.d.ts +16 -0
- package/lib/types/host/projection.d.ts.map +1 -0
- package/lib/types/host/reporting/excel.d.ts +9 -0
- package/lib/types/host/reporting/excel.d.ts.map +1 -0
- package/lib/types/host/reporting/pdf.d.ts +5 -0
- package/lib/types/host/reporting/pdf.d.ts.map +1 -0
- package/lib/types/host/reporting/report-dataset.d.ts +47 -0
- package/lib/types/host/reporting/report-dataset.d.ts.map +1 -0
- package/lib/types/host/skill.d.ts +6 -0
- package/lib/types/host/skill.d.ts.map +1 -0
- package/lib/types/host/tools/analysis-review-tools.d.ts +1202 -0
- package/lib/types/host/tools/analysis-review-tools.d.ts.map +1 -0
- package/lib/types/host/tools/query-tool.d.ts +671 -0
- package/lib/types/host/tools/query-tool.d.ts.map +1 -0
- package/lib/types/host/tools/report-tools.d.ts +656 -0
- package/lib/types/host/tools/report-tools.d.ts.map +1 -0
- package/lib/types/host/tools/rule-tools.d.ts +581 -0
- package/lib/types/host/tools/rule-tools.d.ts.map +1 -0
- package/lib/types/host/tools/screening-context-tool.d.ts +95 -0
- package/lib/types/host/tools/screening-context-tool.d.ts.map +1 -0
- package/lib/types/index.d.ts +5 -2
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +36 -9
- package/lib/types/client/TenderFilterPanel.d.ts +0 -14
- package/lib/types/client/TenderFilterPanel.d.ts.map +0 -1
- package/lib/types/client/fields/AdvancedFields.d.ts +0 -4
- package/lib/types/client/fields/AdvancedFields.d.ts.map +0 -1
- package/lib/types/client/fields/KeywordField.d.ts +0 -4
- package/lib/types/client/fields/KeywordField.d.ts.map +0 -1
- package/lib/types/client/fields/PublishTimeField.d.ts +0 -4
- package/lib/types/client/fields/PublishTimeField.d.ts.map +0 -1
- package/lib/types/client/fields/RegionField.d.ts +0 -4
- package/lib/types/client/fields/RegionField.d.ts.map +0 -1
- package/lib/types/client/fields/SearchTypeField.d.ts +0 -9
- package/lib/types/client/fields/SearchTypeField.d.ts.map +0 -1
- package/lib/types/client/fields/StageField.d.ts +0 -4
- package/lib/types/client/fields/StageField.d.ts.map +0 -1
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Sunhh3221
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Sunhh3221
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,108 +1,146 @@
|
|
|
1
|
-
# dsh-tender-workbench
|
|
1
|
+
# dsh-tender-workbench
|
|
2
|
+
|
|
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.
|
|
2
4
|
|
|
3
|
-
|
|
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
|
+
|
|
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.
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
S5.1 and S5.2 implement the mandatory UI convergence before S6. “Find opportunities” uses the approved condition-editor/execution-plan layout plus aligned overview and list/detail data surfaces. “Screen candidates” uses criteria-list/editor, impact-first preview, five-category classification/trace, and evidence-bound Agent-analysis work surfaces. Wide layouts preserve the master/detail grids; medium and narrow containers fold in the same information order. No simplified/advanced query split, legacy compatibility page, or parallel UI state machine remains.
|
|
6
10
|
|
|
7
|
-
|
|
11
|
+
The S5.2 MVP intentionally omits “让 Agent 调整草案”, rule import, rule copy, nested condition groups, rule-version browsing/comparison, and follow-up questions for the focused project. These omissions are not rendered as disabled or simulated controls. Apart from that closed list, the two phases must match the approved design in structure, styling, layout, states, responsive behavior, and interaction.
|
|
12
|
+
|
|
13
|
+
The plugin does not modify DeepSeek Harness source, inspect or write the native composer DOM, fetch MCP from the Client, access connector storage, or hold credentials. Explicit workbench submission validates one `TenderQueryIntentV1`, serializes the same object into a user-visible message, and sends it through the public scoped `conversation.send()` service without touching the composer draft.
|
|
8
14
|
|
|
9
|
-
|
|
15
|
+
S2 implements `tender_workbench_query`, the exact `mcp__qcc-tender__search_tenders` and `mcp__qcc-tender__search_proposed_projects` nested calls, source-specific runtime validation, deterministic normalization, conservative announcement linking, Session-private Artifact storage, the Host Projection result, data overview, and paged/filterable data details. Empty, waiting-for-Agent, running, partial, failed, completed, and capability-missing states are projected without parsing model text.
|
|
10
16
|
|
|
11
|
-
|
|
17
|
+
S3 implements the read-only `tender_workbench_get_screening_context` tool plus `tender_workbench_preview_rules` and `tender_workbench_confirm_rules`. Screening starts only after an explicit user action. Agent suggestions, local drafts, previews, confirmed immutable rule versions, and classified data remain distinct. The one-layer rule contract supports explicit source scope, `title`/`purchaser`/`all` field scope, OR keywords, exception terms, enabled state, numeric priority, stable array-order tie breaking, and the five classifications `include`, `observe`, `manual-review`, `exclude`, and `unmatched`. No industry rules are built in.
|
|
12
18
|
|
|
13
|
-
|
|
19
|
+
The drafting-context tool reads the current query specification and normalized dataset through the Session-private manifest and returns only deterministic statistics plus at most eight representative samples; it never re-queries qcc or changes Projection state. Agent proposals omit `draftFingerprint`, which the Host computes from the validated complete draft. Each visible proposal, adjustment, or preview Intent permits exactly one preview call and ends after that result.
|
|
14
20
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
- [Plugin design](docs/dsh-tender-workbench-plugin-design.md)
|
|
18
|
-
- [Province, city, and district source snapshot](docs/area.ts)
|
|
21
|
+
Preview and confirmation both read the current `activeDatasetRef` from the Session-private manifest and use the same pure classifier. Preview binds the active Artifact, Projection revision, and Host-validated draft fingerprint without creating a formal version or changing active classification. Confirmation rejects stale inputs, creates an immutable rule-set Artifact, classifies the full active dataset, and projects only summary counts and Artifact references. Classified rows remain paged behind the same loopback/same-origin/header/token boundary and retain source → normalization → raw matches/exceptions → stable decision traceability.
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
S4 implements stable bounded `tender_workbench_analysis_next` batches, evidence-bound `tender_workbench_analysis_commit`, and independent `tender_workbench_apply_review` / `tender_workbench_revert_review` commands. Agent recommendations are optional and never become user decisions. Users can review analyzed or unanalyzed rows individually or in an explicit batch, restore rows to `pending`, keep notes, and replay the latest-operation undo from Session-private review Artifacts.
|
|
21
24
|
|
|
22
|
-
|
|
25
|
+
S5 implements read-only `tender_workbench_get_report_context` plus `tender_workbench_generate_report`. S5.3 makes the delivery result-first: the PDF is a content-driven business report with a conclusion-led first page, two deterministic charts, and bounded verification records; chapters continue in the available space and start a new page only when needed. Normal business volumes are expected to produce roughly 4-6 pages, while small result sets may be shorter. Excel separates management results, source-specific execution lists, traceability, and data-quality definitions across fixed-purpose Sheets. The Host fixes all numeric facts, distributions, record selection, workbook structure, PDF sections, fonts, pagination, and visual layout. Agent narrative is optional, bounded, reference-validated against one `ReportContextV2` fingerprint, and stored once in the immutable `ReportDatasetV2` snapshot for both files. Without narrative, both deterministic files still generate.
|
|
23
26
|
|
|
24
|
-
|
|
27
|
+
The project has not shipped a prior report snapshot format, so S5.3 deliberately accepts only the current `ReportDatasetV2` contract. Failed-format retry reads the same immutable V2 snapshot, reruns only the requested failed renderer, and never re-queries, adapts an older Schema, or asks Agent to rewrite content.
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
Every successful query replaces the Session's single active dataset snapshot atomically; it never appends or merges earlier batches. Historical Artifacts remain in the Session directory, while old rules, classification, analysis, review, and reports leave the active chain. The same `commandId` and canonical parameters replay the first result; a user-triggered rerun receives a new `commandId` even when its parameters are identical. A failed all-source rerun does not replace a previously active successful dataset.
|
|
27
30
|
|
|
28
|
-
|
|
29
|
-
pnpm install --ignore-workspace
|
|
30
|
-
pnpm run typecheck
|
|
31
|
-
pnpm run test
|
|
32
|
-
pnpm run build
|
|
33
|
-
```
|
|
31
|
+
The confirmed S2 data boundary is deliberately narrow: schema-valid `qcc-tender` MCP fields are treated as source facts without Web or multi-source accuracy verification. Missing or unparseable fields retain their source text and are shown as disclosure/parse status, not as source errors. Each Session has one active query dataset; a successful new query replaces that active snapshot instead of appending or merging batches, while historical artifacts remain available for traceability and prior downstream results leave the active workflow.
|
|
34
32
|
|
|
35
|
-
|
|
33
|
+
Internal data is located only through the public `sessionPersistence.locate(session.header)` seam and is stored beside the default JSONL Session transcript under `dsh-tender-workbench/v1/`; the transcript itself is never read or modified. The read-only rows/download API is loopback-only and requires same-origin browser provenance, the Session header, and an Artifact capability token. Tokens stay in request headers rather than URLs.
|
|
36
34
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
The current release is an internal preview published under the `beta` dist-tag. It does not use or create the `latest` dist-tag:
|
|
35
|
+
The MVP deliberately does not implement report preview/version centers, successful-file regeneration, subscriptions, CRM follow-up, enterprise profiles, Bid/No-Bid decisions, source-accuracy verification, or dark theme. Query, classification, analysis, and review may each be a valid stopping point; no later action runs without explicit user input.
|
|
36
|
+
|
|
37
|
+
## Documentation
|
|
42
38
|
|
|
39
|
+
- [Province, city, and district source snapshot](resources/area.ts)
|
|
40
|
+
|
|
41
|
+
## Compatibility
|
|
42
|
+
|
|
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
|
+
|
|
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.
|
|
48
|
+
|
|
49
|
+
## Build and test
|
|
50
|
+
|
|
51
|
+
From this directory:
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
pnpm install --ignore-workspace
|
|
55
|
+
pnpm run typecheck
|
|
56
|
+
pnpm run test
|
|
57
|
+
pnpm run build
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
The build emits the Host loader entry at `lib/index.js`, the DSH Client factory bundle at `lib/client.js`, and declarations under `lib/types/`.
|
|
61
|
+
|
|
62
|
+
## Install into the Web profile
|
|
63
|
+
|
|
64
|
+
### Install the internal preview from npm
|
|
65
|
+
|
|
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`:
|
|
67
|
+
|
|
43
68
|
```sh
|
|
69
|
+
dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
|
|
70
|
+
dsh plugin --profile web add 'dsh-better-sidebar@>=0.17.1'
|
|
44
71
|
dsh plugin --profile web add dsh-tender-workbench@beta
|
|
45
72
|
dsh web --no-open
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
To install an exact version:
|
|
49
|
-
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
To install an exact version:
|
|
76
|
+
|
|
50
77
|
```sh
|
|
51
|
-
dsh plugin --profile web add dsh-
|
|
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
|
|
52
81
|
```
|
|
53
|
-
|
|
54
|
-
After a stable version is published to `latest`, users will be able to install it without an explicit tag:
|
|
55
|
-
|
|
82
|
+
|
|
83
|
+
After a stable version is published to `latest`, users will be able to install it without an explicit tag:
|
|
84
|
+
|
|
56
85
|
```sh
|
|
86
|
+
dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
|
|
87
|
+
dsh plugin --profile web add 'dsh-better-sidebar@>=0.17.1'
|
|
57
88
|
dsh plugin --profile web add dsh-tender-workbench
|
|
58
89
|
```
|
|
59
|
-
|
|
60
|
-
### Install from an independent source checkout
|
|
61
|
-
|
|
62
|
-
|
|
90
|
+
|
|
91
|
+
### Install from an independent source checkout
|
|
92
|
+
|
|
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:
|
|
63
94
|
|
|
64
95
|
```sh
|
|
96
|
+
dsh plugin --profile web add 'dsh-mcp-connector@>=0.2.31'
|
|
97
|
+
dsh plugin --profile web add 'dsh-better-sidebar@>=0.17.1'
|
|
65
98
|
dsh plugin --profile web add .
|
|
66
99
|
dsh web --no-open
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
If `dsh` is only available through a separate DeepSeek Harness source checkout, pass this plugin's absolute path instead of assuming that it is nested inside the Harness repository:
|
|
70
|
-
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
If `dsh` is only available through a separate DeepSeek Harness source checkout, pass this plugin's absolute path instead of assuming that it is nested inside the Harness repository:
|
|
103
|
+
|
|
71
104
|
```sh
|
|
72
105
|
cd /path/to/deepseek-harness
|
|
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'
|
|
73
108
|
pnpm dsh plugin --profile web add /absolute/path/to/dsh-tender-workbench
|
|
74
109
|
pnpm dsh web --no-open
|
|
75
110
|
```
|
|
76
|
-
|
|
77
|
-
### Install from a tarball
|
|
78
|
-
|
|
111
|
+
|
|
112
|
+
### Install from a tarball
|
|
113
|
+
|
|
79
114
|
```sh
|
|
80
|
-
dsh plugin --profile web add
|
|
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
|
|
81
118
|
dsh web --no-open
|
|
82
119
|
```
|
|
83
|
-
|
|
84
|
-
Restart the Web profile after adding or removing the bundle. The plugin package's `dsh.bundle.patch` declaration activates `cordis.patch.yml`, whose only contribution is the `dsh-tender-workbench` Loader row.
|
|
85
|
-
|
|
86
|
-
To remove it:
|
|
87
|
-
|
|
88
|
-
```sh
|
|
89
|
-
dsh plugin --profile web remove dsh-tender-workbench
|
|
90
|
-
```
|
|
91
|
-
|
|
120
|
+
|
|
121
|
+
Restart the Web profile after adding or removing the bundle. The plugin package's `dsh.bundle.patch` declaration activates `cordis.patch.yml`, whose only contribution is the `dsh-tender-workbench` Loader row.
|
|
122
|
+
|
|
123
|
+
To remove it:
|
|
124
|
+
|
|
125
|
+
```sh
|
|
126
|
+
dsh plugin --profile web remove dsh-tender-workbench
|
|
127
|
+
```
|
|
128
|
+
|
|
92
129
|
## Runtime behavior
|
|
93
130
|
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
131
|
+
- The front-end phases are “Find opportunities / Screen candidates / Human confirmation / Deliver”. The internal `query`, `overview`, `rules`, `classification`, `analysis`, `review`, and `report` nodes remain independent Projection facts rather than a strict seven-step wizard.
|
|
132
|
+
- Navigation changes only the local view. It never advances `currentStage`, assumes a contiguous completion prefix, or disables later phases by ordinal position.
|
|
133
|
+
- A completed query is a normal lightweight outcome. The UI does not display “2/7 incomplete”; it offers progressive next steps without selecting a lightweight/full mode in advance.
|
|
134
|
+
- Query completion never creates a rule draft or starts classification. “Continue screening” sends a visible `rules.propose` Intent only after the user clicks it.
|
|
135
|
+
- Query, rules, analysis, review, report creation, and failed-format retry share one Session-scoped write flight. Rapid clicks, Enter repeats, and click/submit races create one command and remain locked through send, Agent wait, and matching tool execution; a transport retry reuses the same `commandId`.
|
|
136
|
+
- Initial Agent criteria open directly as the current Session's editable working draft; there is no suggestion-application gate, and loading the working copy never confirms rules or classifies data. Local add/edit/enable/delete operations never change persisted business state; changing the draft expires its Dry Run result, which must be refreshed before confirmation.
|
|
137
|
+
- The screening view always exposes the three approved tabs: criteria, classification results, and Agent analysis. It follows the approved primary path “confirm criteria and start classification → ask Agent to analyze candidates → enter human review”; locked tabs are visibly present but unavailable until their real dependencies exist.
|
|
138
|
+
- The criteria page uses the approved list/editor workspace. “Save draft and run Dry Run” refreshes the inline four-item impact strip and the representative-sample/global-conflict columns; there is no separate “deterministic impact preview” surface. The workbench footer owns “confirm criteria and start classification”.
|
|
139
|
+
- Confirmed classification exposes mutually exclusive totals, source/rule/conflict/disclosure filters, and per-record traceability. Analysis recommendations and user decisions remain separate row fields.
|
|
140
|
+
- S5.1 and S5.2 are implemented as the mandatory design-convergence gates before S6. Their regression contracts keep the checked-in HTML UX information architecture, responsive grids, focus behavior, exact query mapping, and closed MVP omission list from drifting back to legacy or placeholder UI.
|
|
141
|
+
- Batch review inputs and the focused-record editor keep separate local state. Selecting a record initializes its saved decision and note, so a batch choice or a previously focused record cannot leak into an individual review command.
|
|
142
|
+
- Report creation shows the current reviewed/pending scope and requires explicit confirmation for a partial report. Excel and PDF download independently through same-origin Session/token headers; temporary Blob URLs are revoked after use.
|
|
143
|
+
- The input shortcut always selects the “Find opportunities” phase. Sidebar and Header entries reopen the same Session Tab without duplicating the workbench.
|
|
144
|
+
- When no Session is selected, the sidebar entry invokes the native New Session flow.
|
|
145
|
+
- The Better Sidebar registration, Projection subscription, Reveal attachment, and all three Slot entries dispose with the Client Context.
|
|
146
|
+
- Narrow layouts use a container-responsive four-phase navigation and keep the main action reachable below a scrollable content area.
|
package/cordis.patch.yml
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
- insert:
|
|
2
|
-
- id: tender-workbench
|
|
3
|
-
name: dsh-tender-workbench
|
|
1
|
+
- insert:
|
|
2
|
+
- id: tender-workbench
|
|
3
|
+
name: dsh-tender-workbench
|