dsh-bailinghub 0.4.0 → 0.6.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/PRIVACY.md +62 -12
  3. package/README.md +50 -20
  4. package/SECURITY.md +47 -6
  5. package/docs/AGENT_CLIENT_CONTRACT.md +201 -16
  6. package/docs/CAPABILITY_FEEDBACK.md +199 -0
  7. package/docs/COMPATIBILITY.md +63 -5
  8. package/docs/CROSS_SYSTEM_CONVERSATIONS.md +138 -0
  9. package/docs/GENERATED_ARTIFACTS.md +77 -0
  10. package/docs/GETTING_STARTED.md +37 -11
  11. package/docs/GETTING_STARTED.zh-CN.md +32 -12
  12. package/docs/INVOCATION_RECOVERY.md +182 -0
  13. package/docs/MIGRATION_VNEXT.md +78 -7
  14. package/docs/PROJECT_BOUNDARIES.md +4 -1
  15. package/docs/README.zh-CN.md +59 -18
  16. package/docs/RELEASE_NOTES_v0.5.0.md +79 -0
  17. package/docs/RELEASE_NOTES_v0.6.0.en.md +39 -0
  18. package/docs/RELEASE_NOTES_v0.6.0.md +39 -0
  19. package/docs/SESSION_TOOL_REUSE.md +213 -0
  20. package/docs/TASK_CONTROL.md +183 -0
  21. package/docs/UPGRADE_v0.6.0.en.md +71 -0
  22. package/docs/UPGRADE_v0.6.0.md +73 -0
  23. package/lib/artifact-store.js +56 -0
  24. package/lib/artifacts.js +132 -0
  25. package/lib/authorizations.js +23 -8
  26. package/lib/capability-feedback.js +138 -0
  27. package/lib/conversation-archive-store.js +2 -2
  28. package/lib/conversation-outbox.js +37 -7
  29. package/lib/index.js +7 -1
  30. package/lib/invocation-journal.js +223 -0
  31. package/lib/invocation-store.js +275 -0
  32. package/lib/runtime.js +1126 -174
  33. package/lib/session-scope-store.js +2 -2
  34. package/lib/session-scope.js +146 -30
  35. package/lib/session-task-store.js +275 -0
  36. package/lib/session-task.js +237 -0
  37. package/lib/session-tool-cache.js +168 -0
  38. package/lib/session-tools.js +240 -0
  39. package/lib/subject-display.js +39 -0
  40. package/lib/system-info.js +76 -0
  41. package/lib/tool-catalog.js +38 -0
  42. package/lib/transport.js +34 -0
  43. package/package.json +14 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,113 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.6.0 - 2026-09-16
4
+
5
+ See [scenarios and upgrade](docs/RELEASE_NOTES_v0.6.0.md) · [English](docs/RELEASE_NOTES_v0.6.0.en.md).
6
+
7
+ - Bind administrator-created tasks through persistent taskStore and public host APIs. Preserve original members, cumulative budgets, cancellation and read-only receipt inspection; models cannot create or switch tasks.
8
+
9
+ - Let a conversation panel inspect a pending shop listing or inventory change
10
+ after reopening, without starting a model turn or business run. Explicit continuation
11
+ first inspects the original receipt, preserves approval and task controls, and never
12
+ replaces an uncertain write. Panel and model actions serialize the same invocation.
13
+ Preserve local storage errors, cancellation and original retry deadlines. See the
14
+ [host integration contract](docs/TASK_CONTROL.md).
15
+
16
+ - Let a host read original conversation and selected shop/inventory authorization
17
+ coordinates through `getSessionTaskCoordinates(session)` when preparing a governed
18
+ task. Revalidate the complete original group without locking a draft, creating a
19
+ run or exposing unselected targets. Keep persistence failures distinct from
20
+ retryable network failures and unsupported versions. Existing task binding and
21
+ execution rules remain in force; see [the host contract](docs/TASK_CONTROL.md).
22
+
23
+ - Let an opted-in host retain complete shop, inventory or other business tool
24
+ declarations across user messages in the same living Session. Prepare current
25
+ target context once per user turn; valid exact-name lookups need no additional
26
+ capability-search request. Ordinary chat starts no business run.
27
+ - Bound the session cache to 64 target-tool pairs and 2 MiB, with a 12-schema
28
+ presentation window. Separate cached declarations from currently prepared tools;
29
+ return full schemas and current context through the existing search entry point.
30
+ - A direct unprepared cached call returns preparation only. It creates no business
31
+ invocation, and replaying its call ID cannot turn it into a write. Current identity,
32
+ declaration changes, cancellation and original-invocation recovery remain enforced.
33
+ - Keep legacy `active_turn` behavior by default. Hosts explicitly enable
34
+ `toolLifecycle: 'session'` after handling preparation results. Core and SDK need
35
+ no additional API for this candidate. See [the integration contract](docs/SESSION_TOOL_REUSE.md).
36
+
37
+ - Preserve an authoritative `invocation_not_found` response during polling and
38
+ direct recovery. Stop automatic retries and ask for inspection of the original
39
+ execution evidence, without declaring the business action unexecuted or creating
40
+ a replacement write. Generic network/HTTP failures retain conservative recovery.
41
+
42
+ - Reopen a conversation after pending approval or a lost business response and recover
43
+ the original invocation through a durable, metadata-only local journal. Persist the
44
+ original authorization, run, invocation and parameter digest before dispatch; never
45
+ rebuild a business write from transcript text or substitute another account.
46
+ - Custom hosts can supply an invocation store and inspect or restore its local status.
47
+ Storage failures remain explicit. Restoring metadata sends no business recovery
48
+ request; an explicit resume may continue the original approved operation.
49
+ See [reopening and original invocation recovery](docs/INVOCATION_RECOVERY.md).
50
+
51
+ - Keep long tasks moving between product creation, queries and inventory checks:
52
+ searches merge valid tools during the active turn instead of unloading the previous
53
+ batch. Retain up to 64 callable tools behind a 12-schema model window; unchanged
54
+ registrations survive concurrent discovery and calls.
55
+ - Invalidate only the changed authorization catalog, quarantine contradictory
56
+ declarations, and preserve original invocation recovery and cancellation boundaries.
57
+ See [long-task lifecycle and host upgrade guidance](docs/CAPABILITY_FEEDBACK.md).
58
+
59
+ - Honor Hub retry delays after pre-dispatch rate limiting. Long waits retain the original invocation for later recovery; early manual resumes avoid extra requests. Shared quota details stay visible to the model.
60
+
61
+ - Add an image-first Local Agent attachment space for adapted hosts: list approved conversation
62
+ outputs, upload 1–8 PNG/JPEG/WebP images to an explicitly selected authorization, and reuse
63
+ ready URLs with existing business tools. Persist original upload records for recovery.
64
+ - See [attachment integration](docs/GENERATED_ARTIFACTS.md) for campaign artwork, charts
65
+ and shop examples. Host file access is explicit; upload success and business action results
66
+ are independent. Business limits and original-call recovery remain independent from attachment delivery.
67
+
68
+ - Explain each search target’s returned candidates separately from the conversation’s
69
+ currently loaded tools. Keep unknown totals explicit and describe the shared loading limit.
70
+ - Return actionable, safe failure feedback through native DSH dispatch, including retired
71
+ tool names rejected before the business SDK. Valid loaded tools remain directly callable.
72
+ - Keep an unconfirmed write bound to its original invocation; discovery cannot create
73
+ a replacement operation. Add read-only feedback seams for custom hosts.
74
+ - See [capability discovery and recovery](docs/CAPABILITY_FEEDBACK.md) for shop/inventory
75
+ examples, compatibility and exact candidate installation requirements.
76
+
77
+ ## 0.5.0 - 2026-09-10
78
+
79
+ ### Shop and inventory in one conversation
80
+
81
+ See [release scenarios and upgrade steps](docs/RELEASE_NOTES_v0.5.0.md): check inventory, update a shop price and follow the listing result or approval. Business tools and confirmed product mappings are prerequisites.
82
+
83
+ - Show the business-supplied name of an authorized organization, account, project or other subject
84
+ separately from its product's purpose. Keep local connection selectors independent and explicitly
85
+ identify missing names, unsupported metadata and cached display data. Renames and duplicate names
86
+ preserve original scope, Session, invocation and archive identities and historical labels.
87
+ - Understand each selected system's purpose before searching its tools. Read administrator-managed
88
+ descriptions using the original authorization binding, consistently for one account, multiple
89
+ accounts in one system, or multiple systems. Descriptions grant no permissions and create no runs.
90
+ - Distinguish unknown or not-yet-loaded capabilities from unavailable services. Missing metadata
91
+ and older metadata APIs preserve existing business flows; identity failures still block the whole
92
+ scope. Cancelled description requests cannot replace a newer turn's directory.
93
+ - Select authorized targets from different applications or workspaces on one Hub in the same
94
+ conversation. The Agent discovers each target's capabilities only when needed; unrelated
95
+ targets do not automatically receive the full user turn or load their context.
96
+ - Keep same-named capabilities from different systems separate. Each call and recovery retains
97
+ its original connection, application, workspace, Session, run and invocation.
98
+ - Keep one visible conversation archive with independently verified target members. Persist
99
+ cross-system scope/outbox v2 while retaining same-system v1 snapshots and APIs.
100
+ - Require explicit SDK/Core capability support for cross-system scope. Older combinations
101
+ refuse the new mode while retaining existing same-system behavior.
102
+ - Pair with Core 0.7.0 and pin exact SDK 0.5.0. Preserve existing credentials, v1 scopes and original
103
+ archive events; open a new conversation when choosing targets from different systems.
104
+ - Keep the same-Hub, same-audit-domain boundary. This is not a durable task scheduler, automatic
105
+ product mapping, stock synchronization, cross-system transaction or business rollback engine.
106
+ - Retain the transitive Hono 4.13.7 update for upstream fixes.
107
+
108
+ See the [migration guide](docs/MIGRATION_VNEXT.md) for upgrading from 0.4.0 or an older native
109
+ version. Maintainer and synthetic compatibility checks are not independent production adoption.
110
+
3
111
  ## 0.4.0 - 2026-09-08
4
112
 
5
113
  ### For users
package/PRIVACY.md CHANGED
@@ -1,6 +1,33 @@
1
1
  # Privacy
2
2
 
3
- This bundle adds no telemetry and stores no BailingHub credentials. Version 0.4.0
3
+ ## Cross-system conversations in 0.5.0
4
+
5
+ The 0.5.0 cross-system mode is opt-in through an explicit selected target set on one Hub.
6
+ Before business execution, the original members and the Hub's capability support are verified.
7
+ The Agent initially receives only a directory of authorization references, business subject display
8
+ names, controlled system descriptions, opaque system references and workspace names. Descriptions
9
+ and names are read under the original selection without sending user text or creating a run. A target starts its run only after an explicit capability
10
+ search or recovery selecting that target. The search query becomes that target's task input;
11
+ the full original user message is retained in the independent conversation archive instead of
12
+ automatically being sent to every target's run. Other selected targets may receive authorization
13
+ checks and archive membership confirmation, but no automatic business context request.
14
+
15
+ Query text is model-authored. Minimal disclosure is instructed, not an automatic redaction or
16
+ field-level data-flow policy: the local model can see all activated target context and the visible
17
+ conversation. Only use a shared conversation where that sharing is allowed. Cross-system object
18
+ relationships must come from verified mappings or explicit user confirmation, not matching names.
19
+ Original system/workspace bindings stay attached to tools, results and execution records.
20
+
21
+ Cross-system scope and outbox v2 persist each member's public Hub/app/workspace and original
22
+ Session with the same storage protections and plaintext archive boundary below. Same-system v1
23
+ records remain unchanged. The full transcript belongs to the independent Hub management audit;
24
+ holding one target's authorization does not grant full-transcript reading. This release does
25
+ not upload hidden reasoning or provide cross-process business-task recovery.
26
+
27
+ The following sections describe the retained same-system flow introduced in 0.4.0, and common
28
+ storage/archiving behavior. The cross-system target-query rules above take precedence for v2 scopes.
29
+
30
+ This bundle adds no telemetry and stores no BailingHub credentials. The native plugin
4
31
  persists session-scope metadata and, when the SDK supports conversation archives, a separate
5
32
  private outbox containing visible task text as described below.
6
33
 
@@ -12,9 +39,9 @@ using personal, confidential, or regulated data.
12
39
  Do not include tokens, private URLs, personal information, or production payloads in public
13
40
  issues, screenshots, or compatibility reports.
14
41
 
15
- ## Native Agent Client 0.4.0
42
+ ## Native Agent Client: retained same-system data flow
16
43
 
17
- After explicit nonempty scope selection, the native 0.4.0 plugin sends each direct human user turn
44
+ After explicit nonempty same-system scope selection, the plugin sends each direct human user turn
18
45
  to BailingHub Core and receives model-visible instructions, memory, reference-only knowledge, governance, and active tool schemas.
19
46
  Business tool arguments and governed results cross the same boundary. At completion it sends a
20
47
  hash-aliased message id, legal status, optional model/runtime labels, and numeric public usage. A single-authorization run receives the visible final answer;
@@ -30,9 +57,19 @@ The multi-connection registry contains public connection name, Hub URL, client a
30
57
  timestamps, and current-selection state. It does not contain access tokens, refresh tokens, model
31
58
  keys, business cookies, prompts, tool arguments, or business results.
32
59
 
60
+ ## Authorization display metadata
61
+
62
+ The SDK may cache the business-supplied subject name in a separate private display-only record
63
+ bound to the original connection and Session. A connection list can read that cache without a
64
+ network request; `cache` does not claim the name or authorization was freshly verified. Credential
65
+ storage and the registry are independent. The plugin retains current metadata in memory for
66
+ presentation; a refresh does not rewrite scope, archive events or frozen historical labels.
67
+ Controlled system descriptions are fetched for each selected member and are not persisted by
68
+ this adapter. See the [host contract](docs/AGENT_CLIENT_CONTRACT.md#authorization-subject-display-050).
69
+
33
70
  ## Same-system authorization selection
34
71
 
35
- Version 0.4.0 includes only the authorization keys explicitly selected for a DSH
72
+ The same-system scope introduced in 0.4.0 includes only the authorization keys explicitly selected for a DSH
36
73
  conversation, restricted to the same Hub/client/workspace binding. Unset or empty scope means
37
74
  ordinary chat: no BailingHub run starts, no BailingHub business tool is registered, and the plugin
38
75
  does not send that conversation's user input to a business system. Logging in or selecting a
@@ -42,7 +79,9 @@ DSH, the configured model provider, or unrelated host tools.
42
79
  The host snapshots the selected connection bindings and exposes only session-local authorization
43
80
  references, local display names, and availability as the selection directory. It does not expose
44
81
  the raw registry, credentials, connection keys, or Session inspection responses to the model.
45
- Local display names are user-controlled labels, not verified business identity claims.
82
+ In 0.5.0, current business-supplied subject names are display metadata, separate from system
83
+ descriptions, frozen historical labels and fixed authorization references. Neither a name nor a
84
+ cached display record proves current identity. Names do not grant permission or rewrite history.
46
85
 
47
86
  After the full selection is validated, each user turn is sent to a separate Core run under each
48
87
  selected authorization to obtain its instructions, governance, memory, and reference-only
@@ -58,15 +97,19 @@ default or silently retaining a subset.
58
97
  Each business call uses only its selected authorization. Recovery retains the original
59
98
  authorization and invocation. At completion, multi-authorization runs receive separate
60
99
  deterministic summaries of their own governed calls, not the combined visible final answer or
61
- another authorization's results. SDK 0.4.0 with Core 0.6.1 also receives the combined visible
100
+ another authorization's results. SDK 0.5.0 with Core 0.7.0 also sends the combined visible
62
101
  conversation through the independent archive boundary below. Single-authorization conversations
63
102
  retain the existing visible-answer completion flow.
64
103
  Hidden reasoning is never uploaded by the adapter.
65
104
 
66
105
  The host checks the captured connection key, workspace, and original Agent Session id before
67
106
  transport operations without projecting those inspection fields into the model's directory.
68
- Invocation bindings are local to the running conversation; a new conversation or process restart
69
- does not recover unknown invocation ids from that map.
107
+ Invocation bindings stay host-side. The [durable recovery journal](docs/INVOCATION_RECOVERY.md)
108
+ adds a separate `invocation-records` store in the plugin data directory for original binding
109
+ metadata, parameter/receipt digests, last-known state and retry deadline. It stores no raw
110
+ arguments, receipt bodies, credentials or conversation text. Records remain until the host/operator
111
+ removes them; there is no automatic cleanup or upload of this journal. The same original Session
112
+ can recover known calls after reopening; new conversations and unknown IDs cannot use that binding.
70
113
 
71
114
  The default file adapter saves scope schema/version, DSH session id, revision, lock/state, public
72
115
  Hub/client/workspace binding, and the selected connection keys, sanitized labels, workspace, and
@@ -84,12 +127,13 @@ loading it does not query its old authorizations or send them user input. A fail
84
127
  write can leave that draft on disk, but it still cannot reactivate automatically in a new runtime.
85
128
  Configuration or metadata history alone does not lock a never-started draft. Missing or invalid
86
129
  scope snapshots on started conversations do not adopt current registry connections.
87
- Restoring that scope does not recover pending business invocations, approvals, completions, or
88
- tasks across a process restart.
130
+ Restoring the scope alone does not recover pending business invocations, approvals, completions,
131
+ or tasks across a process restart. Original invocation recovery requires the separate durable
132
+ journal and an explicit recovery request; it does not automatically resume the whole task.
89
133
 
90
134
  ## Visible conversation archive
91
135
 
92
- For a nonempty frozen scope, SDK 0.4.0 with Core 0.6.1 receives the claimed user messages,
136
+ For a nonempty frozen scope, SDK 0.5.0 with Core 0.7.0 sends the claimed user messages,
93
137
  visible assistant text, turn boundaries, and original run links as one conversation audit owned
94
138
  by the complete selected authorization set. Visible text may itself contain personal or business
95
139
  data; the adapter does not claim to redact arbitrary secrets pasted into that text. It never adds
@@ -112,7 +156,8 @@ Network failures preserve successfully written events for later upload. Local wr
112
156
  not prove durable capture. Reopened DSH history is checked for detectable missing visible events,
113
157
  reported as `recovery_gap`; unavailable host history is marked unverified. Previously unarchived
114
158
  messages, attachments, and hidden content are not claimed as a complete transcript. The archive
115
- does not restore business invocation or approval execution after restart. An older SDK reports
159
+ does not itself restore business invocation or approval execution after restart; the separate
160
+ invocation journal does not make an incomplete visible archive complete. An older SDK reports
116
161
  unsupported without creating an outbox, and business calls remain available.
117
162
 
118
163
  An offline reopen keeps the original frozen scope closed until every member can be revalidated.
@@ -120,3 +165,8 @@ A later retry on the same runtime may recover a temporary network failure, but c
120
165
  confirmed revocation, replacement identity, or a storage conflict. Archive status retains known
121
166
  unsaved events and history gaps while upload is blocked. Revocation confirmed during asynchronous
122
167
  archive capability discovery or opening is rechecked before reporting availability or uploading.
168
+
169
+
170
+ ## Task records in 0.6.0
171
+
172
+ A private persistent task store binds the original Session, fixed members and administrator-created task. It does not store administrative credentials or grant model task-management authority. Retain original scope, task, invocation and archive records; storage errors never downgrade to an unrestricted flow. Task enrollment persists on the original Agent Session even after cancellation. Do not downgrade an enrolled authorization to a host/Core that ignores that requirement. See [task control](docs/TASK_CONTROL.md) and [upgrade](docs/UPGRADE_v0.6.0.en.md).
package/README.md CHANGED
@@ -1,19 +1,33 @@
1
1
  # BailingHub for DeepSeek Harness
2
2
 
3
+ ## 0.6.0: longer tasks, attachments and original-call recovery
4
+
5
+ Retain the correct target while moving between edits and queries, reuse uploaded image URLs and inspect original calls after reopening. Task budgets survive turn changes. Pair Core 0.8.0 / SDK 0.6.0 / DSH 0.6.0; host integration is required for task binding and opt-in cross-turn reuse.
6
+
7
+ [Changes](docs/RELEASE_NOTES_v0.6.0.en.md) · [Upgrade](docs/UPGRADE_v0.6.0.en.md)
8
+
9
+
3
10
  [简体中文](docs/README.zh-CN.md) | English
4
11
 
5
12
  Ask your local DeepSeek Harness Agent to work with a business system connected to BailingHub:
6
13
  find records, update allowed fields, and follow the system's existing approval rules.
7
14
  BailingHub records which authorization was used and what each business action returned.
8
15
 
9
- **Version 0.4.0 lets one conversation use several authorizations for the same system.** For example,
10
- after independently authorizing Store A and Store B, select both for a new conversation and ask:
16
+ **Version 0.5.0 lets one conversation use authorizations from different systems on the same Hub.**
17
+ Authorize a shop and inventory system separately, select both for a new conversation and ask:
18
+
19
+ > Check tumbler stock. If any are available, change the corresponding shop product's price to 59
20
+ > and list it; otherwise leave it unlisted.
11
21
 
12
- > Compare today's sales at Store A and Store B. Show each store separately.
22
+ The Agent reads stock with the inventory authorization, then uses the shop authorization for the
23
+ permitted price and listing actions. Those capabilities must already exist, and the product mapping
24
+ must be confirmed. A stock read does not reserve or synchronize stock. Price changes, listing
25
+ results and approvals are tracked separately.
13
26
 
14
- The Agent can choose the right authorization for each call without asking you to switch the active
15
- connection. Available actions still depend on the capabilities and permissions your system exposes.
16
- This release does not provide orchestration across different systems or routes.
27
+ The 0.4.0 same-system flow remains available: select Store A and Store B to compare sales without
28
+ switching a global connection. New system descriptions explain each selected system's purpose
29
+ before tool search, and business-supplied names identify the approved organization, account or
30
+ other subject. See [what changed and how to upgrade](docs/RELEASE_NOTES_v0.5.0.md).
17
31
 
18
32
  It also keeps the visible conversation together with links to its business actions. If uploading
19
33
  that record fails, it can retry after reconnecting or restarting without repeating those actions.
@@ -21,19 +35,20 @@ that record fails, it can retry after reconnecting or restarting without repeati
21
35
  This is an independent community integration, not a plugin developed, certified, endorsed, or
22
36
  recommended by DeepSeek.
23
37
 
38
+
24
39
  ## Install and start
25
40
 
26
41
  You need Node.js `22.19.0+` or `24+`, pnpm, and a compatible DeepSeek Harness release. Your
27
42
  administrator must first connect the business system to BailingHub. The matched release set is
28
- **BailingHub Core 0.6.1 → BailingHub MCP/SDK 0.4.0 → this plugin 0.4.0**.
43
+ **BailingHub Core 0.8.0 → BailingHub MCP/SDK 0.6.0 → this plugin 0.6.0**.
29
44
 
30
45
  ```bash
31
46
  npm install --global pnpm @deepseek-ai/dsh@0.1.1-rc.2
32
- dsh plugin --profile web add dsh-bailinghub@0.4.0
47
+ dsh plugin --profile web add dsh-bailinghub@0.6.0
33
48
  ```
34
49
 
35
- The plugin installs its exact `bailinghub-mcp-server@0.4.0` dependency automatically.
36
- For an existing installation, read the [0.3 to 0.4 migration steps](docs/MIGRATION_VNEXT.md).
50
+ The plugin installs its exact `bailinghub-mcp-server@0.6.0` dependency automatically.
51
+ For an existing installation, read the [migration steps from 0.4.0 and earlier](docs/MIGRATION_VNEXT.md).
37
52
 
38
53
  Follow the [getting started guide](docs/GETTING_STARTED.md) to enter your administrator's four
39
54
  public connection values and authorize in the browser. Do not put a business password, Client
@@ -41,21 +56,26 @@ Token, signing secret, or model-provider key into this plugin's settings or chat
41
56
 
42
57
  ## Choose the accounts for each conversation
43
58
 
44
- Authorize each account separately through the original business authorization page. Give each
45
- connection a clear local name, such as `Store A` and `Store B`, and verify the actual identity on
46
- that page. The name is a label you provide; it does not prove identity or grant permission.
47
- Names like `default` and `default-2` do not tell the Agent which store you mean.
59
+ Authorize each account separately through its original business authorization page and verify the
60
+ approved subject. A compatible business backend supplies its display name automatically, such as
61
+ “Brand flagship store” or “Main warehouse”. A missing name is shown as “Authorization name pending
62
+ sync”; the plugin does not guess it from a local alias.
63
+
64
+ Names are for display only. Duplicate names and renames do not merge or recreate credentials,
65
+ change an original Session, or rewrite history. Keep the local connection selector and fixed key
66
+ independent from both the current business name and the system description.
48
67
 
49
68
  In a **new conversation, before the first message**, run:
50
69
 
51
70
  ```text
52
71
  /bailinghub connections list
53
- /bailinghub scope set <store-a-connection-key> <store-b-connection-key>
72
+ /bailinghub scope set <shop-connection-key> <inventory-connection-key>
54
73
  /bailinghub scope
55
74
  ```
56
75
 
57
76
  Replace the placeholders with the fixed keys from the list, not connection names. You can select
58
- just one account. Multiple selections must share the same Hub, Client App, and workspace.
77
+ just one account, several accounts in one system, or several systems on the same Hub and audit
78
+ domain. Each selected target must have its own original Agent Session.
59
79
  Wait for the command to confirm the selection, then send your request.
60
80
 
61
81
  **New conversations start as ordinary chat until you select their business scope.** Logging in or
@@ -63,8 +83,8 @@ changing the default connection does not enable business tools. `/bailinghub sco
63
83
  chooses ordinary chat. The first user message freezes the selection; start a new conversation to
64
84
  change accounts or move from ordinary chat to business access.
65
85
 
66
- For the selected accounts, matching tools are shared. The Agent chooses the authorization for each
67
- call; it does not receive credentials. Every action still uses that account's own permissions and
86
+ Matching tools within one system are shared; same-named tools from different systems remain
87
+ separate. The Agent chooses the authorization for each call; it does not receive credentials. Every action still uses that account's own permissions and
68
88
  approval rules. An approval-required action continues the original call after approval while that
69
89
  conversation is still running.
70
90
 
@@ -75,7 +95,7 @@ A confirmed revocation or identity change requires a new conversation with a val
75
95
 
76
96
  ## Follow the conversation and its actions
77
97
 
78
- With Core 0.6.1 and SDK 0.4.0, BailingHub can show the visible user and assistant messages, turn
98
+ With Core 0.7.0 and SDK 0.5.0, BailingHub can show the visible user and assistant messages, turn
79
99
  boundaries, and links to the original business runs as one conversation record. Each authorization
80
100
  also keeps its own business-call record; the combined reply is not copied into every account's
81
101
  memory.
@@ -156,6 +176,7 @@ identity separately. Custom DSH hosts must implement the [scope selection and re
156
176
  and display confirmation before the first message. The native slash commands already use those
157
177
  APIs. Tool envelopes, persistence, event schemas, and recovery limits are documented in the
158
178
  [Agent Client contract](docs/AGENT_CLIENT_CONTRACT.md).
179
+ For the Local Agent attachment space (image-first), see [host artifact integration](docs/GENERATED_ARTIFACTS.md). Register approved conversation outputs, upload them once, and use ready URLs with existing business tools.
159
180
 
160
181
  Use Native Tool Mode. DSH Code Mode is deliberately degraded because it cannot safely present the
161
182
  current-turn dynamic schemas. See the [compatibility matrix](docs/COMPATIBILITY.md).
@@ -164,9 +185,18 @@ current-turn dynamic schemas. See the [compatibility matrix](docs/COMPATIBILITY.
164
185
 
165
186
  Public `dsh-bailinghub@0.1.1` remains the separate static MCP compatibility path. It starts
166
187
  `bailinghub-mcp-server@0.1.1`, uses one operator-provided route-scoped Client Token, and leaves
167
- orchestration in BailingHub. Version 0.4.0 does not read or convert that credential. Keep the exact
188
+ orchestration in BailingHub. The native plugin does not read or convert that credential. Keep the exact
168
189
  legacy version when using that path and follow the [migration guide](docs/MIGRATION_VNEXT.md).
169
190
 
170
191
  Report issues at [GitHub Issues](https://github.com/bailinghub/bailinghub-dsh-plugin/issues) with
171
192
  versions and redacted errors. Do not include tokens, private URLs, personal data, or production
172
193
  payloads. Compatibility tests and package downloads are not evidence of production adoption.
194
+
195
+
196
+ ## Recover an original action after reopening
197
+
198
+ Version 0.6.0 adds a local invocation journal for actions such as a product listing
199
+ awaiting approval or an inventory update whose response was lost. Reopen the same conversation
200
+ and explicitly recover the original call without creating a second business request. Custom
201
+ hosts must retain the new store alongside their existing Session scope. See the
202
+ [recovery contract, limits and host integration](docs/INVOCATION_RECOVERY.md).
package/SECURITY.md CHANGED
@@ -4,6 +4,39 @@ Report vulnerabilities through a private GitHub Security Advisory in this reposi
4
4
  Do not put tokens, private deployment URLs, personal information, or raw business payloads
5
5
  in a public issue.
6
6
 
7
+ ## Cross-system scope in 0.5.0
8
+
9
+ Different applications/workspaces may participate only through a frozen same-Hub target set,
10
+ with a distinct original Session per target. Capability support must be explicitly negotiated;
11
+ unsupported Core/SDK combinations cannot start cross-system business runs. Each member keeps
12
+ its own app/workspace binding, credential checks, approval rules and original invocations.
13
+ The SDK verifies the full expected binding before target HTTP dispatch, including refresh.
14
+
15
+ Capability search requires an explicit target and sends a model-authored, task-specific query;
16
+ it cannot fan out to all systems by omitting a selector. Identical tool names or schemas in
17
+ different systems do not establish shared semantics. Scoped aliases map back to an immutable
18
+ original capability and an allowed authorization set. The host enforces target membership;
19
+ it does not automatically prove the business meaning of model-generated queries or arguments.
20
+
21
+ All original members must remain valid. Temporary validation failure closes a retryable gate;
22
+ confirmed identity replacement or revocation blocks the complete selection. Cancellation and
23
+ late responses cannot reactivate ended-turn tools. Scope/outbox v2 retains original membership,
24
+ event IDs and CAS; a downgrade cannot reinterpret that state as v1. Full transcript reading
25
+ remains in the Hub's management audit boundary, not an individual member's Agent bearer.
26
+
27
+ ## System descriptions and authorization names
28
+
29
+ System purpose comes from controlled Client/route metadata and is read only for selected original
30
+ bindings before capability search. It is descriptive data, not executable instructions or a grant
31
+ of tools. Business backends supply subject display names for the actual approved identity; names
32
+ remain separate from internal keys, original Sessions and the system description. Only the name
33
+ field is projected, with bounded length, valid Unicode and no control or line-separator characters.
34
+
35
+ A duplicate or changed name cannot merge authorizations, replace scope members or rewrite archived
36
+ labels. SDK display-cache data is auxiliary and cannot validate credentials or mask a scope/archive
37
+ storage error. Missing or unsupported display metadata leaves existing tools unchanged; a confirmed
38
+ identity failure still blocks the complete selection.
39
+
7
40
  ## Public legacy 0.1.x boundary
8
41
 
9
42
  This bundle contributes configuration only. It has no custom runtime JavaScript, production
@@ -19,9 +52,9 @@ configuration and are never model tool arguments.
19
52
 
20
53
  Non-loopback HTTP is denied by default. Do not enable insecure HTTP on an untrusted network.
21
54
 
22
- ## Native 0.4.0 boundary
55
+ ## Native 0.5.0 boundary
23
56
 
24
- The native 0.4.0 plugin accepts only `hubUrl`, `clientAppId`, `workspace`, and
57
+ The native 0.5.0 plugin accepts only `hubUrl`, `clientAppId`, `workspace`, and
25
58
  `connectionName`. The generic SDK owns browser authorization, refresh, and secure credential
26
59
  storage; business endpoints and final authorization remain Core/business-system concerns. The
27
60
  Hub Client App owns one business authorization entry. That business page, not the plugin or model,
@@ -41,7 +74,7 @@ falsely report a complete logout.
41
74
  Tools are Agent/run scoped. Message ids are replaced by Core-safe hash aliases, invocation ids are
42
75
  stable 64-character digests, and an `accepted_unknown` outcome must resume that exact invocation
43
76
  instead of creating a replacement. Completion retries are bounded and reuse one frozen,
44
- visible-only payload. Version 0.4.0 installs `bailinghub-mcp-server@0.4.0` as an exact ordinary
77
+ visible-only payload. Version 0.5.0 installs `bailinghub-mcp-server@0.5.0` as an exact ordinary
45
78
  dependency and resolves its `./sdk` export. It does not depend on ambient modules, an optional
46
79
  peer, a range, a dist-tag, or a local path. Public `0.1.1` does not provide that facade.
47
80
 
@@ -52,7 +85,7 @@ plugin never receives the credential value and never writes one into Cordis conf
52
85
 
53
86
  ## Same-system authorization selection
54
87
 
55
- Version 0.4.0 lets the model select a session-local `authorization_ref` from the current
88
+ The same-system path introduced in 0.4.0 lets the model select a session-local `authorization_ref` from the current
56
89
  conversation's directory. This is a constrained per-call selector, not a connection-management
57
90
  tool or authority to supply a Hub, route, raw connection key, credential, or business identity.
58
91
  The host must first explicitly select fixed connection keys for this conversation through
@@ -85,8 +118,11 @@ Each invocation binds its chosen authorization, Core run, and capability revisio
85
118
  accepts only an invocation known to this conversation and resolves its original binding; the
86
119
  model cannot provide a replacement authorization. Changing a default connection cannot retarget
87
120
  an existing call.
88
- This invocation map lasts only for the live conversation: later turns can recover its original
89
- calls, while new conversations and process restarts must reject unknown invocation ids.
121
+ The live invocation map supports later turns of the same conversation. The unreleased
122
+ [durable recovery journal](docs/INVOCATION_RECOVERY.md) additionally persists original
123
+ metadata before dispatch and validates it after reopening. New conversations, missing records,
124
+ and conflicting original identities still reject recovery. Raw parameters and credentials do
125
+ not belong in the invocation journal; model text never reconstructs its authority.
90
126
 
91
127
  Only non-secret scope metadata belongs in the scope store. Its default file store uses SHA-256 session filenames,
92
128
  mode-0600 files and mode-0700 directories on POSIX, bounded reads, rejection of symlinks/non-regular files,
@@ -141,3 +177,8 @@ that validation. Confirmed revocation/replacement and storage/CAS conflicts rema
141
177
  blocked, with no default or subset fallback. The gate is rechecked after asynchronous archive
142
178
  capability discovery and outbox opening; a late result cannot erase a confirmed revocation.
143
179
  Known local storage errors and capture gaps remain visible even while network or scope checks block upload.
180
+
181
+
182
+ ## Task records in 0.6.0
183
+
184
+ A private persistent task store binds the original Session, fixed members and administrator-created task. It does not store administrative credentials or grant model task-management authority. Retain original scope, task, invocation and archive records; storage errors never downgrade to an unrestricted flow. Task enrollment persists on the original Agent Session even after cancellation. Do not downgrade an enrolled authorization to a host/Core that ignores that requirement. See [task control](docs/TASK_CONTROL.md) and [upgrade](docs/UPGRADE_v0.6.0.en.md).