@ljwei-stak/dsh-model-route-bot 0.66.3 → 0.67.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/.dsh-plugin/bot-product.mjs +81 -5
- package/.dsh-plugin/client.js +17490 -1791
- package/README.i18n.yaml +4 -4
- package/README.md +409 -364
- package/README.zh.md +409 -364
- package/apps/integration-client/README.md +31 -7
- package/apps/integration-client/api.mjs +14 -3
- package/apps/integration-client/binding-editor.jsx +308 -109
- package/apps/integration-client/binding-model.mjs +262 -0
- package/apps/integration-client/binding.css +144 -0
- package/apps/integration-client/bot-model-status.mjs +18 -0
- package/apps/integration-client/bot-profile-identity.jsx +197 -0
- package/apps/integration-client/bot-profile.css +57 -0
- package/apps/integration-client/bot-profile.mjs +97 -0
- package/apps/integration-client/bot-settings-dialog.css +18 -0
- package/apps/integration-client/bot-settings-dialog.jsx +111 -0
- package/apps/integration-client/bot-thread-header-bridge.css +20 -0
- package/apps/integration-client/bot-thread-header.jsx +278 -0
- package/apps/integration-client/bot-threads-panel.jsx +378 -0
- package/apps/integration-client/bot-threads.css +169 -0
- package/apps/integration-client/chat-design.mjs +250 -0
- package/apps/integration-client/chat-ui.jsx +175 -0
- package/apps/integration-client/chat.css +477 -0
- package/apps/integration-client/composer-draft-binding.mjs +50 -0
- package/apps/integration-client/composer-draft-bound.jsx +14 -0
- package/apps/integration-client/composer-draft-host.jsx +142 -0
- package/apps/integration-client/composer-draft-session.jsx +287 -0
- package/apps/integration-client/composer-draft-witness.mjs +115 -0
- package/apps/integration-client/composer-draft.css +4 -0
- package/apps/integration-client/composer-draft.mjs +322 -0
- package/apps/integration-client/contact-attention.jsx +54 -0
- package/apps/integration-client/data-panel.jsx +439 -0
- package/apps/integration-client/data.css +69 -0
- package/apps/integration-client/desktop-bridge.mjs +1 -0
- package/apps/integration-client/desktop-http-socket.mjs +49 -0
- package/apps/integration-client/desktop-keyboard.mjs +32 -0
- package/apps/integration-client/desktop-pane.jsx +99 -30
- package/apps/integration-client/desktop-stream.mjs +13 -3
- package/apps/integration-client/desktop-tools.jsx +19 -0
- package/apps/integration-client/desktop-touch.mjs +27 -0
- package/apps/integration-client/desktop.css +41 -0
- package/apps/integration-client/independent-chat-controller.mjs +224 -0
- package/apps/integration-client/independent-chat-entry.jsx +61 -0
- package/apps/integration-client/independent-chat-navigation.mjs +21 -0
- package/apps/integration-client/independent-chat-page.jsx +148 -0
- package/apps/integration-client/independent-chat-rich.jsx +64 -0
- package/apps/integration-client/independent-chat-rich.mjs +30 -0
- package/apps/integration-client/independent-chat.css +73 -0
- package/apps/integration-client/index.jsx +24 -16
- package/apps/integration-client/library-panel.jsx +4 -1
- package/apps/integration-client/licenses/jsqr-1.4.0-LICENSE.txt +202 -0
- package/apps/integration-client/main-route-editor.jsx +94 -0
- package/apps/integration-client/main-route-model.mjs +100 -0
- package/apps/integration-client/model-picker.css +37 -0
- package/apps/integration-client/model-picker.jsx +83 -0
- package/apps/integration-client/native-activity.css +141 -0
- package/apps/integration-client/native-activity.jsx +276 -0
- package/apps/integration-client/native-activity.mjs +384 -0
- package/apps/integration-client/notifications-panel.jsx +186 -0
- package/apps/integration-client/notifications.css +126 -0
- package/apps/integration-client/pairing-qr.jsx +79 -0
- package/apps/integration-client/panels.jsx +126 -115
- package/apps/integration-client/product-slots.jsx +46 -0
- package/apps/integration-client/routine-recorder.mjs +23 -2
- package/apps/integration-client/secure-pairing.jsx +84 -0
- package/apps/integration-client/tasks-panel.jsx +32 -10
- package/apps/integration-client/ui-icons.jsx +17 -0
- package/apps/integration-client/usage-explorer.jsx +43 -0
- package/apps/integration-client/usage-report.mjs +71 -0
- package/apps/integration-client/usage.css +34 -0
- package/apps/integration-client/web-panel-model.mjs +140 -0
- package/apps/integration-client/web-panel-page.jsx +221 -0
- package/apps/integration-client/web-panel-pins-live.jsx +28 -0
- package/apps/integration-client/web-panel.css +139 -0
- package/apps/integration-client/workspace-model.mjs +67 -0
- package/apps/integration-client/workspace-navigation.mjs +56 -0
- package/apps/integration-client/workspace-ui.jsx +173 -0
- package/apps/integration-client/workspace.css +332 -0
- package/modules/bot-runtime/SOURCE.json +176 -50
- package/modules/bot-runtime/index.mjs +169 -13
- package/modules/bot-runtime/product-overlay/OVERLAY.json +128 -2
- package/modules/bot-runtime/product-overlay/base/src/client/header.js +244 -0
- package/modules/bot-runtime/product-overlay/base/src/client/learning-card.js +202 -0
- package/modules/bot-runtime/product-overlay/base/src/client/model-menu.js +371 -0
- package/modules/bot-runtime/product-overlay/base/src/client/secret-card.js +363 -0
- package/modules/bot-runtime/product-overlay/base/src/client/sources.js +68 -0
- package/modules/bot-runtime/product-overlay/base/src/client/turn-error.js +260 -0
- package/modules/bot-runtime/product-overlay/base/src/host/channel.js +647 -0
- package/modules/bot-runtime/product-overlay/base/src/host/memory.js +2050 -0
- package/modules/bot-runtime/product-overlay/base/src/host/models.js +314 -0
- package/modules/bot-runtime/product-overlay/base/src/host/parts.js +1473 -0
- package/modules/bot-runtime/product-overlay/base/src/host/privacy.js +368 -0
- package/modules/bot-runtime/product-overlay/base/src/host/roster.js +776 -0
- package/modules/bot-runtime/product-overlay/base/src/host/store.js +512 -0
- package/modules/bot-runtime/product-overlay/base/src/host/usage.js +653 -0
- package/modules/bot-runtime/product-overlay/patches/src/client/details-drawer.js.patch +48 -2
- package/modules/bot-runtime/product-overlay/patches/src/client/header.js.patch +41 -0
- package/modules/bot-runtime/product-overlay/patches/src/client/index.js.patch +33 -1
- package/modules/bot-runtime/product-overlay/patches/src/client/learning-card.js.patch +20 -0
- package/modules/bot-runtime/product-overlay/patches/src/client/model-menu.js.patch +24 -0
- package/modules/bot-runtime/product-overlay/patches/src/client/secret-card.js.patch +25 -0
- package/modules/bot-runtime/product-overlay/patches/src/client/sources.js.patch +52 -0
- package/modules/bot-runtime/product-overlay/patches/src/client/turn-error.js.patch +23 -0
- package/modules/bot-runtime/product-overlay/patches/src/host/channel.js.patch +46 -0
- package/modules/bot-runtime/product-overlay/patches/src/host/memory.js.patch +11 -0
- package/modules/bot-runtime/product-overlay/patches/src/host/models.js.patch +16 -0
- package/modules/bot-runtime/product-overlay/patches/src/host/parts.js.patch +95 -0
- package/modules/bot-runtime/product-overlay/patches/src/host/privacy.js.patch +11 -0
- package/modules/bot-runtime/product-overlay/patches/src/host/roster.js.patch +145 -0
- package/modules/bot-runtime/product-overlay/patches/src/host/store.js.patch +68 -0
- package/modules/bot-runtime/product-overlay/patches/src/host/usage.js.patch +11 -0
- package/modules/bot-runtime/read-model.mjs +19 -4
- package/modules/bot-runtime/vendor/ds-bot/src/client/details-drawer.js +15 -5
- package/modules/bot-runtime/vendor/ds-bot/src/client/header.js +9 -2
- package/modules/bot-runtime/vendor/ds-bot/src/client/index.js +9 -2
- package/modules/bot-runtime/vendor/ds-bot/src/client/learning-card.js +2 -2
- package/modules/bot-runtime/vendor/ds-bot/src/client/model-menu.js +5 -3
- package/modules/bot-runtime/vendor/ds-bot/src/client/secret-card.js +3 -3
- package/modules/bot-runtime/vendor/ds-bot/src/client/sources.js +25 -2
- package/modules/bot-runtime/vendor/ds-bot/src/client/turn-error.js +3 -2
- package/modules/bot-runtime/vendor/ds-bot/src/host/channel.js +14 -2
- package/modules/bot-runtime/vendor/ds-bot/src/host/memory.js +1 -1
- package/modules/bot-runtime/vendor/ds-bot/src/host/models.js +7 -0
- package/modules/bot-runtime/vendor/ds-bot/src/host/parts.js +26 -9
- package/modules/bot-runtime/vendor/ds-bot/src/host/privacy.js +1 -1
- package/modules/bot-runtime/vendor/ds-bot/src/host/roster.js +112 -3
- package/modules/bot-runtime/vendor/ds-bot/src/host/store.js +34 -1
- package/modules/bot-runtime/vendor/ds-bot/src/host/usage.js +1 -1
- package/modules/independent-runtime/index.mjs +152 -62
- package/modules/independent-runtime/remote-tools.mjs +8 -5
- package/modules/openmaus-protocol/NOTICE +10 -0
- package/modules/openmaus-protocol/README.md +15 -0
- package/modules/openmaus-protocol/SOURCE.json +68 -0
- package/modules/openmaus-protocol/dist/protocol.mjs +1203 -0
- package/modules/openmaus-protocol/index.mjs +1 -0
- package/modules/openmaus-protocol/transport.mjs +77 -0
- package/modules/openmaus-protocol/vendor/LICENSE +202 -0
- package/modules/openmaus-protocol/vendor/companion/src/e2e/README.md +405 -0
- package/modules/openmaus-protocol/vendor/companion/src/e2e/credentials.ts +128 -0
- package/modules/openmaus-protocol/vendor/companion/src/e2e/descriptor.ts +84 -0
- package/modules/openmaus-protocol/vendor/companion/src/e2e/noise.ts +456 -0
- package/modules/openmaus-protocol/vendor/companion/src/e2e/phone.ts +104 -0
- package/modules/openmaus-protocol/vendor/companion/src/e2e/session.ts +417 -0
- package/modules/openmaus-protocol/vendor/companion/src/e2e/vectors/v1.json +2565 -0
- package/modules/openmaus-protocol/vendor/companion/src/e2e/vectors/v1.sha256 +1 -0
- package/modules/openmaus-protocol/vendor/companion/src/e2e/yamux.ts +335 -0
- package/package.json +20 -6
- package/packages/bot-acp/README.md +156 -0
- package/packages/bot-acp/licenses/LICENSE-OpenMausBot +202 -0
- package/packages/bot-acp/licenses/NOTICE.md +27 -0
- package/packages/bot-acp/src/acp-adapter.mjs +795 -0
- package/packages/bot-acp/src/acp-host.mjs +148 -0
- package/packages/bot-acp/src/native-launch.mjs +121 -0
- package/packages/bot-acp/src/permission-policy.mjs +283 -0
- package/packages/bot-acp/src/rpc-codec.mjs +265 -0
- package/packages/bot-acp/src/session-core.mjs +581 -0
- package/packages/bot-acp/src/stdio-rpc.mjs +329 -0
- package/packages/bot-engines/README.md +281 -0
- package/packages/bot-engines/licenses/LICENSE-OpenMausBot +202 -0
- package/packages/bot-engines/licenses/NOTICE.md +32 -0
- package/packages/bot-engines/src/claude-engine.mjs +772 -0
- package/packages/bot-engines/src/claude-llm-adapter.mjs +797 -0
- package/packages/bot-engines/src/claude-llm-turn.mjs +292 -0
- package/packages/bot-engines/src/claude-permission-broker.mjs +130 -0
- package/packages/bot-engines/src/claude-permission-proxy.mjs +87 -0
- package/packages/bot-engines/src/claude-protocol.mjs +177 -0
- package/packages/bot-engines/src/driver-catalog.mjs +334 -0
- package/packages/bot-engines/src/host-loop-request.mjs +95 -0
- package/packages/bot-engines/src/host-registrations.mjs +105 -0
- package/packages/capability-broker/src/cli-bootstrap.mjs +86 -16
- package/packages/capability-broker/src/cli-bridge-response.mjs +80 -0
- package/packages/capability-broker/src/cli-stdio-bridge.mjs +21 -8
- package/packages/cli-runtime/src/codex-session-core.mjs +4 -0
- package/packages/cli-runtime/src/native-cli-output.mjs +57 -0
- package/packages/cli-runtime/src/native-peer.ps1 +51 -3
- package/packages/cli-runtime/src/native-process.mjs +77 -14
- package/packages/model-router-plugin/README.md +3 -3
- package/packages/model-router-plugin/package.json +1 -1
- package/packages/orchestration/src/binding-product.mjs +19 -0
- package/packages/orchestration/src/bot-data-actions.mjs +45 -0
- package/packages/orchestration/src/bot-data-chart.mjs +109 -0
- package/packages/orchestration/src/bot-data-context.mjs +44 -0
- package/packages/orchestration/src/bot-data-engine.mjs +809 -0
- package/packages/orchestration/src/bot-data-io.mjs +186 -0
- package/packages/orchestration/src/bot-data-sql.mjs +195 -0
- package/packages/orchestration/src/bot-data-surface.mjs +144 -0
- package/packages/orchestration/src/bot-data-tools.mjs +68 -0
- package/packages/orchestration/src/bot-data-worker.mjs +228 -0
- package/packages/orchestration/src/bot-independent-execution.mjs +195 -0
- package/packages/orchestration/src/bot-independent-stream.mjs +74 -0
- package/packages/orchestration/src/bot-loop.mjs +152 -19
- package/packages/orchestration/src/bot-notifications.mjs +159 -0
- package/packages/orchestration/src/bot-policy.mjs +43 -4
- package/packages/orchestration/src/bot-profile.mjs +171 -0
- package/packages/orchestration/src/bot-routine.mjs +4 -4
- package/packages/orchestration/src/bot-runtime-assembly.mjs +255 -8
- package/packages/orchestration/src/bot-runtime-switch.mjs +13 -2
- package/packages/orchestration/src/bot-serving.mjs +164 -0
- package/packages/orchestration/src/bot-session-store.mjs +105 -9
- package/packages/orchestration/src/bot-settings.mjs +50 -11
- package/packages/orchestration/src/bot-thread-admission.mjs +84 -0
- package/packages/orchestration/src/bot-thread-host.mjs +187 -0
- package/packages/orchestration/src/bot-threads.mjs +790 -0
- package/packages/orchestration/src/data-product-access.mjs +37 -0
- package/packages/orchestration/src/data-tool-contract.mjs +291 -0
- package/packages/orchestration/src/desktop-http-carrier.mjs +120 -0
- package/packages/orchestration/src/desktop-proxy.mjs +311 -0
- package/packages/orchestration/src/desktop-sessions.mjs +43 -9
- package/packages/orchestration/src/ds-lifecycle.mjs +31 -4
- package/packages/orchestration/src/grant-refresh-queue.mjs +17 -0
- package/packages/orchestration/src/independent-chat-page.mjs +39 -0
- package/packages/orchestration/src/independent-chat-service.mjs +308 -0
- package/packages/orchestration/src/independent-context-state.mjs +44 -0
- package/packages/orchestration/src/independent-message-wire.mjs +84 -0
- package/packages/orchestration/src/independent-tool-catalog.mjs +175 -0
- package/packages/orchestration/src/independent-tool-families.mjs +73 -0
- package/packages/orchestration/src/independent-tool-host.mjs +344 -0
- package/packages/orchestration/src/main-bot-grant.mjs +15 -0
- package/packages/orchestration/src/main-model-routes.mjs +208 -0
- package/packages/orchestration/src/model-accounting.mjs +99 -35
- package/packages/orchestration/src/model-auxiliary-dispatch.mjs +187 -0
- package/packages/orchestration/src/model-loop-frame.mjs +179 -0
- package/packages/orchestration/src/model-prepared-generation.mjs +175 -0
- package/packages/orchestration/src/model-request-bounds.mjs +111 -0
- package/packages/orchestration/src/native-activity-contract.mjs +491 -0
- package/packages/orchestration/src/native-activity-service.mjs +102 -0
- package/packages/orchestration/src/native-activity-store.mjs +249 -0
- package/packages/orchestration/src/native-conversation-tools.mjs +78 -0
- package/packages/orchestration/src/native-data-tools.mjs +100 -0
- package/packages/orchestration/src/native-remote-actions.mjs +742 -0
- package/packages/orchestration/src/native-team-tools.mjs +73 -0
- package/packages/orchestration/src/pairing-invite.mjs +37 -0
- package/packages/orchestration/src/product-composition.mjs +1559 -1001
- package/packages/orchestration/src/remote-machines.mjs +82 -14
- package/packages/orchestration/src/routine-execution.mjs +5 -3
- package/packages/orchestration/src/routine-session.mjs +19 -13
- package/packages/orchestration/src/secure-pairing-host.mjs +112 -0
- package/packages/orchestration/src/task-journal.mjs +29 -0
- package/packages/orchestration/src/task-product.mjs +17 -0
- package/packages/orchestration/src/team-assignment-store.mjs +120 -0
- package/packages/orchestration/src/team-bridge.mjs +282 -0
- package/packages/orchestration/src/team-scheduler.mjs +83 -0
- package/packages/orchestration/src/team-sdk-tools.mjs +84 -0
- package/packages/orchestration/src/team-tool-contract.mjs +284 -0
- package/packages/orchestration/src/ui-host-namespace.mjs +23 -0
- package/packages/orchestration/src/web-panel-actions.mjs +103 -0
- package/packages/orchestration/src/web-panel-framing.mjs +227 -0
- package/packages/orchestration/src/web-panel-store.mjs +206 -0
- package/remote-computer-agent/README.md +39 -29
- package/remote-computer-agent/build.mjs +3 -0
- package/remote-computer-agent/dist/OPENMAUSBOT_LICENSE +202 -0
- package/remote-computer-agent/dist/OPENMAUSBOT_NOTICE +10 -0
- package/remote-computer-agent/dist/OPENMAUSBOT_SOURCE.json +68 -0
- package/remote-computer-agent/dist/cli-stdio-bridge.mjs +215 -25
- package/remote-computer-agent/dist/cli-stdio-bridge.mjs.map +4 -4
- package/remote-computer-agent/dist/cli.mjs +1688 -168
- package/remote-computer-agent/dist/cli.mjs.map +4 -4
- package/remote-computer-agent/dist/index.mjs +1579 -122
- package/remote-computer-agent/dist/index.mjs.map +4 -4
- package/remote-computer-agent/dist/native-peer.ps1 +51 -3
- package/remote-computer-agent/package-lock.json +308 -2
- package/remote-computer-agent/package.json +2 -1
- package/remote-computer-agent/pair-device.ps1 +20 -0
- package/remote-computer-agent/setup.ps1 +38 -16
- package/remote-computer-agent/src/cli.ts +24 -3
- package/remote-computer-agent/src/desktop-session.ts +11 -3
- package/remote-computer-agent/src/e2e-server.ts +81 -0
- package/remote-computer-agent/src/pairing-page.ts +35 -0
- package/remote-computer-agent/src/protocol.ts +25 -25
- package/remote-computer-agent/src/secure-pairing.ts +105 -0
- package/remote-computer-agent/src/store.ts +20 -5
- package/remote-computer-agent/src/transport.ts +39 -15
package/README.md
CHANGED
|
@@ -1,364 +1,409 @@
|
|
|
1
|
-
# DSH Bot · Model Router
|
|
2
|
-
|
|
3
|
-
[English](README.md) · [简体中文](README.zh.md)
|
|
4
|
-
|
|
5
|
-
[](https://www.npmjs.com/package/@ljwei-stak/dsh-model-route-bot) [](https://www.npmjs.com/package/@ljwei-stak/dsh-model-router) [](https://dshfind.com/en/plugins/Alice-Marx/dsh-model-router?ref=badge) [](https://dshfind.com/en/plugins/Alice-Marx/dsh-model-router?ref=badge) [](https://dsh-plugin.org/plugins/alice-marx/dsh-model-router) [](https://awesome-dsh-plugin.com)
|
|
6
|
-
|
|
7
|
-
[](https://dshfind.com/en/plugins/Alice-Marx/dsh-model-router?ref=badge)
|
|
8
|
-
|
|
9
|
-

|
|
10
|
-
|
|
11
|
-
**Model routing and a persistent Bot workspace for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness).**
|
|
12
|
-
|
|
13
|
-
Turn a task into a reviewable execution plan, select suitable configured models or native CLI tools, and follow the results in one workspace. Add the full Bot edition for long-running conversations, multi-Bot delegation, private files, and your own Windows computers.
|
|
14
|
-
|
|
15
|
-
This is a community plugin. It reuses Harness model configuration and Host services; each provider or CLI uses its own account and access rights.
|
|
16
|
-
|
|
17
|
-
**Current stable version: 0.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
|
132
|
-
|
|
|
133
|
-
|
|
|
134
|
-
|
|
|
135
|
-
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
<a id="
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
**
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
**
|
|
191
|
-
|
|
192
|
-
**
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
1
|
+
# DSH Bot · Model Router
|
|
2
|
+
|
|
3
|
+
[English](README.md) · [简体中文](README.zh.md)
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@ljwei-stak/dsh-model-route-bot) [](https://www.npmjs.com/package/@ljwei-stak/dsh-model-router) [](https://dshfind.com/en/plugins/Alice-Marx/dsh-model-router?ref=badge) [](https://dshfind.com/en/plugins/Alice-Marx/dsh-model-router?ref=badge) [](https://dsh-plugin.org/plugins/alice-marx/dsh-model-router) [](https://awesome-dsh-plugin.com)
|
|
6
|
+
|
|
7
|
+
[](https://dshfind.com/en/plugins/Alice-Marx/dsh-model-router?ref=badge)
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
**Model routing and a persistent Bot workspace for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness).**
|
|
12
|
+
|
|
13
|
+
Turn a task into a reviewable execution plan, select suitable configured models or native CLI tools, and follow the results in one workspace. Add the full Bot edition for long-running conversations, multi-Bot delegation, private files, and your own Windows computers.
|
|
14
|
+
|
|
15
|
+
This is a community plugin. It reuses Harness model configuration and Host services; each provider or CLI uses its own account and access rights.
|
|
16
|
+
|
|
17
|
+
**Current stable version: 0.67.0 · Windows Remote Agent: 0.1.2**
|
|
18
|
+
|
|
19
|
+
**Release 0.67.0.** This release brings the Bot-centred workspace, secure device pairing, persistent team delegation and native-tool activity records. Local validation uses isolated data and offline providers; full OpenMausBot parity and live user Host/device acceptance remain incomplete.
|
|
20
|
+
|
|
21
|
+
**Workspace interface:** the full Bot edition now includes a redesigned workspace overview, task inbox, searchable team directory, task boards, and workspace search (**Ctrl/Cmd K** on product pages). Goals move into the existing review-and-confirm flow; display preferences offer Host-following, light, dark, and compact layouts. [Implementation and verification](https://gitlab.com/Alice_marx/dsh-model-router/-/blob/main/docs/implementation/20261107-workspace-upgrade.md).
|
|
22
|
+
|
|
23
|
+
The ongoing [OpenMausBot migration](https://gitlab.com/Alice_marx/dsh-model-router/-/blob/main/docs/implementation/20261107-openmaus-full-migration.md) makes Bot contacts and chat the main interface, with contextual model, computer, memory, voice, task and library controls. The plugin adds two-minute QR device invitations, six-digit confirmation, pinned Noise encryption and Host-mediated desktop streams for web and native clients. Desktop tools include reviewed text entry, keyboard shortcuts, two-finger scrolling, fit/original scaling and fullscreen; recorded routines retain acknowledged input releases. Use the matching Agent 0.1.2 package linked below. Protocol, installed-runtime and isolated desktop tests are recorded in the [pairing implementation notes](https://gitlab.com/Alice_marx/dsh-model-router/-/blob/main/docs/implementation/20261107-secure-pairing.md); a real remote desktop and the complete upstream feature set have not yet been accepted. Paid cloud-desktop subscriptions are excluded. Invitation imports require a code typed from the target device; interrupted credential saves are reconciled before completing registration.
|
|
24
|
+
|
|
25
|
+
The workspace also shows live task attention below contacts and adds receipt filters by date, Bot, source and status, grouping, and CSV export. Partial task lists and unknown amounts are labeled; receipt dates follow the Host timezone. [Receipt exploration and verification](https://gitlab.com/Alice_marx/dsh-model-router/-/blob/main/docs/implementation/20261108-receipt-explorer.md).
|
|
26
|
+
|
|
27
|
+
The product redesign now follows OpenMausBot's Bot setup flow, with a separate official-tool module. The notification centre opens the original Bot, task and execution attempt and stores read status on the Host. Bot-isolated CSV/TSV/JSON import, SQLite queries, bar/line/area charts and CSV export are available; additional upstream formats remain in progress. [Current implementation and validation boundaries](https://gitlab.com/Alice_marx/dsh-model-router/-/blob/main/docs/implementation/20261108-openmaus-product-direction.md).
|
|
28
|
+
|
|
29
|
+
Bot conversation engines are being ported separately from task CLI tools. The source catalog records all 26 upstream drivers. The plugin can register an explicitly configured Claude text/subscription session in the Host model catalog and bind it through the existing Bot settings. Whole-product offline child-process tests cover retained turns, committed personality, private credentials and one receipt per request. Independent chat now previews generated text and offers an explicit new conversation: old messages and unsent drafts remain, the next turn uses only the new context, and unknown retirement results require reconciliation. Live CLI/account acceptance and the remaining engine ports are still in progress. [Engine configuration and implementation status](packages/bot-engines/README.md).
|
|
30
|
+
|
|
31
|
+
The chat-side Bot settings drawer separates **Models & tools** from **Identity & personality**. Edit the Bot's name, short role and standing instructions without leaving the conversation; changing tabs keeps unsaved text. Profile edits save only after an explicit click, reject conflicting updates and never send a message or start a model reply. Independent mode reads the committed identity and instructions on each model request. This release supports these three text fields; the remaining OpenMausBot identity features are still part of the migration.
|
|
32
|
+
|
|
33
|
+
Team delegation stores assignments and returns results to the originating conversation. Each target uses its own saved model, permissions and funding; Main can use multiple saved model routes and all committed Host capabilities. Both chat surfaces show bounded native-tool activity, cancellation requests and confirmed process stops without treating an uncertain outcome as success.
|
|
34
|
+
|
|
35
|
+
Model controls distinguish the Host's saved choice from its last applied model and indicate when they differ. An unsaved choice remains a draft; the applied record does not certify the model used by a particular response.
|
|
36
|
+
|
|
37
|
+
The appearance menu also offers standard, wide and full chat widths plus coloured or neutral user-message bubbles. Display preferences survive reloads and do not change execution settings.
|
|
38
|
+
|
|
39
|
+
Conversation drafts are kept separately for each Host, Bot, group and thread. A confirmed send clears only its own draft; an unanswered send keeps the text with explicit restore and clear controls. Draft recovery restores text only. Pinned web pages appear in the contacts sidebar and update after a confirmed edit. Live Host acceptance remains pending.
|
|
40
|
+
|
|
41
|
+
Independent conversations retain each reply's producing model route and correlate tool requests with their results. Changing a Bot's model does not relabel earlier replies. Old records without model provenance and interrupted tool batches appear as labeled historical context, preserving the saved text without replaying the tools.
|
|
42
|
+
|
|
43
|
+
Independent mode gives independent Bots a contacts-and-chat page with saved text drafts, full paged history, and a request-stop control. Each send is recorded on the Host before acknowledgement; reloading or retrying the same request checks its existing result without sending it again. Tool schemas follow the Bot's live grants, and file writes use the existing durable task journal. The installed SDK, authenticated owner channel, isolated SQLite and a loopback remote Agent have been exercised together; live Host acceptance and full upstream message, attachment and tool coverage remain pending.
|
|
44
|
+
|
|
45
|
+
Independent chat renders Markdown, highlighted code, tables and mathematics through the Host's renderer. Copy a code block or the original message with explicit success or failure feedback, and inspect recorded tool calls and results without executing them again.
|
|
46
|
+
|
|
47
|
+
While a reply is running, independent chat polls a live text preview marked as unfinished. It follows the conversation when the window resizes; scrolling back keeps your reading position. The preview is not a saved answer or a browser draft, and disappears on failure, cancellation or Host restart. Reloading inspects the existing request without sending it again. Each call also uses the Bot's committed thinking level; clearing it restores the model default. An unsupported saved level is refused before dispatch, and call arguments cannot override the owner's saved choice.
|
|
48
|
+
|
|
49
|
+
API-funded calls require model capacity metadata from the Host. The saved input allowance must cover the model's full declared context window, and admission reserves against that allowance. A request above the output allowance must be reduced before sending or granted a larger allowance; a request that cannot be changed is refused. Missing model metadata is reported explicitly. Committed adapter identities are rechecked around preparation and dispatch; an incompatible configuration change is refused.
|
|
50
|
+
|
|
51
|
+
The chat header switches between a Bot's threads and its original conversation while keeping the Bot's model, memory, computer, voice and attachment controls. Archived or revoked threads refuse new model calls. Thread-directory saves retry a transient local sharing violation and roll back failed writes; an unreadable catalog stops sending and explains how to recover, without repeating Session creation.
|
|
52
|
+
|
|
53
|
+
[Choose an edition](#editions) · [Install](#install) · [First task](#quick-evaluation) · [Bot delegation](#bot-routing) · [Remote computers](#computers) · [Support](#troubleshooting)
|
|
54
|
+
|
|
55
|
+
<a id="editions"></a>
|
|
56
|
+
|
|
57
|
+
## Choose the workspace you need
|
|
58
|
+
|
|
59
|
+
| Edition | Package to enter in **Plugins → Add plugin** | What it adds |
|
|
60
|
+
| --- | --- | --- |
|
|
61
|
+
| **DSH Bot + Model Router** | `@ljwei-stak/dsh-model-route-bot` | The full Bot workspace, model-routing workbench, Bot delegation, remote computers, private libraries, and routines. |
|
|
62
|
+
| **Model Router** | `@ljwei-stak/dsh-model-router` | A **Model Router** entry in the standard Harness interface, with route planning, tools, execution, and accounting. DS Bot is not installed. |
|
|
63
|
+
|
|
64
|
+
Use **one edition per Harness profile**. Both editions share the routing configuration. To switch, remove the existing package entry in plugin management, add the other edition in the same profile, and retain your data directories and configured Bot home. [Routing-only guide](packages/model-router-plugin/README.md).
|
|
65
|
+
|
|
66
|
+
<a id="capabilities"></a>
|
|
67
|
+
|
|
68
|
+
## Capabilities at a glance
|
|
69
|
+
|
|
70
|
+
| Workflow | What you can do | Edition |
|
|
71
|
+
| --- | --- | --- |
|
|
72
|
+
| Task-oriented model routing | Start from a task template; compare economy, balanced, or quality-first plans; use one route, a dependency-based team, or an exact model. | Both |
|
|
73
|
+
| Reviewable execution | Inspect models, tools, workspace, permissions, and estimates before confirming; track progress, results, cancellation, and supported retries. | Both |
|
|
74
|
+
| Native CLI tools | Detect and install registered tools, check login and mode readiness, and open an interactive terminal. | Both |
|
|
75
|
+
| Budgets and feedback | Set API limits, track reservations and receipts, inspect subscription calls/tokens separately, and use optional reviews and explicit ratings. | Both |
|
|
76
|
+
| Persistent Bot conversations | Give each Bot its own model, role, work directory, private chat, and permissions; handle side chats, questions, and approval cards. | Full Bot |
|
|
77
|
+
| Groups and shared context | Use mentions, staged group goals, handoffs, conversation search/checkpoints, and Bot/group/team memory with revision history. | Full Bot |
|
|
78
|
+
| Browser and document work | Use per-Bot browser partitions, supported Office reading/previews, connectors, credential cards, avatars, and team appearance settings. | Full Bot |
|
|
79
|
+
| Scheduled work | Schedule a target Bot or group through the Host's Automation tasks service. | Full Bot |
|
|
80
|
+
| Bot-to-Bot routing | Let a Main Bot select an eligible execution Bot from committed model, tool, computer, and funding settings, then dispatch real tasks. | Full Bot |
|
|
81
|
+
| Windows computers and routines | Pair your own computer, watch or control its desktop, record confirmed input, and replay saved routines. | Full Bot |
|
|
82
|
+
| Private file libraries | Organize files per Bot, upload/download binary files, edit text, and search private text with line-level results. | Full Bot |
|
|
83
|
+
| Conversation threads | Give one Bot several independent conversations: name them, switch between them, archive and restore them, and open one in the chat. | Full Bot |
|
|
84
|
+
| Pinned web pages | Pin the dashboards and boards you use, keep the list in the Host across restarts, and open a page in a framed view or in your browser. | Full Bot |
|
|
85
|
+
| Display preferences | Pick the chat measure and bubble style, and keep them across reloads, without touching any conversation. | Full Bot |
|
|
86
|
+
|
|
87
|
+
<a id="install"></a>
|
|
88
|
+
|
|
89
|
+
## Installation
|
|
90
|
+
|
|
91
|
+
1. Open **Plugins → Add plugin** in Harness Desktop and enter **one** package:
|
|
92
|
+
- Full workspace: `@ljwei-stak/dsh-model-route-bot@0.67.0`
|
|
93
|
+
- Routing only: `@ljwei-stak/dsh-model-router@0.67.0`
|
|
94
|
+
2. Enable it, fully quit Harness **including its tray process**, then restart so the Host loads the installed version.
|
|
95
|
+
3. Configure provider credentials and models in the official Harness **Models** settings. Open the Bot workspace for the full edition, or **Model Router** in the sidebar for the routing-only edition.
|
|
96
|
+
|
|
97
|
+
CLI installation is also supported. Choose the command for your edition:
|
|
98
|
+
|
|
99
|
+
```powershell
|
|
100
|
+
# Full Bot workspace
|
|
101
|
+
dsh plugin --profile desktop add @ljwei-stak/dsh-model-route-bot@0.67.0
|
|
102
|
+
|
|
103
|
+
# Routing-only workspace
|
|
104
|
+
dsh plugin --profile desktop add @ljwei-stak/dsh-model-router@0.67.0
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Alternatively, import the matching `.tgz` from [GitHub Releases](https://github.com/Alice-Marx/dsh-model-router/releases/latest). For an extracted local package, select the inner `package` directory containing `package.json` and `.dsh-plugin`. A global npm installation alone does not register a Harness plugin.
|
|
108
|
+
|
|
109
|
+
<a id="quick-evaluation"></a>
|
|
110
|
+
|
|
111
|
+
## Complete your first task
|
|
112
|
+
|
|
113
|
+
The model-routing workbench is available in both editions. In the full Bot workspace, open **Advanced workbench**.
|
|
114
|
+
|
|
115
|
+
1. **Prepare a model.** Add a working provider/model in Harness. In **Model configuration**, refresh routes and enter known prices and capabilities. Leave unknown information blank.
|
|
116
|
+
2. **Describe the result.** In **Task & execution**, choose **Project check**, **Organize documentation**, or **Compare approaches**, then edit the task and acceptance criteria. **Undo template** restores your previous text.
|
|
117
|
+
3. **Go to the preview.** Click **Next: preview execution**, then **Preview execution plan**. Check the selected models/tools, workspace, permissions, and estimated API cost or subscription usage.
|
|
118
|
+
4. **Confirm the run.** Read the confirmation items and choose **Confirm all and execute**. Creating or previewing a plan does not invoke a model; confirmation starts execution.
|
|
119
|
+
5. **Inspect the result.** Open **Execution history** for output, receipts, status, cancellation, and supported retry actions. Verify the requested artifact before treating the task as complete.
|
|
120
|
+
|
|
121
|
+
The application currently uses Chinese interface labels; English descriptions here explain the corresponding controls.
|
|
122
|
+
|
|
123
|
+

|
|
124
|
+
|
|
125
|
+
*Actual workbench component with offline demonstration data. Models, prices, usage, and paths shown in these screenshots are examples.*
|
|
126
|
+
|
|
127
|
+
<a id="workbench"></a>
|
|
128
|
+
|
|
129
|
+
## Model-routing workbench
|
|
130
|
+
|
|
131
|
+
| Tab | Main use |
|
|
132
|
+
| --- | --- |
|
|
133
|
+
| **Task & execution / 任务与执行** | Write a task, choose a planning mode, optionally compare or assign packages, preview, and confirm execution. |
|
|
134
|
+
| **Model configuration / 模型配置** | Manage exact configured routes, prices, quality evidence, billing preferences, and CLI model mappings. |
|
|
135
|
+
| **Native tools / 官方工具** | Inspect tool installation, login, and execution-mode readiness; manage installations and terminals. |
|
|
136
|
+
| **Budget & safety / 预算与安全** | Set API limits and execution policy; inspect actual spend, reservations, and subscription usage. |
|
|
137
|
+
| **Execution history / 执行记录** | Review task output, receipts, interrupted/unknown states, cancellation, and supported recovery actions. |
|
|
138
|
+
|
|
139
|
+
Choose **Single task** for one route, **Team** for packages with dependencies, or **Exact model** to use a specific configured route. **Compare routes** is optional; after comparison, you can keep the recommendations or manually select an API model/tool for each package.
|
|
140
|
+
|
|
141
|
+
Route/budget and execution options are collapsed until needed. Draft task text, mode, selected model, and explicit per-task estimate stay in the **current window's memory** when pages remount; closing the app or reloading the client clears this draft. The **Needs your attention** panel can be closed with **×** and restored from the header; this visibility preference is remembered on the device. Failed-task reminders open the relevant execution record.
|
|
142
|
+
|
|
143
|
+

|
|
144
|
+
|
|
145
|
+
*Offline preview example; no model was called. In a live workspace, confirmation starts the selected model or supported CLI.*
|
|
146
|
+
|
|
147
|
+
Model routing executes read-only analysis. To modify files, choose **Team → Native-tool collaboration → Edit files**, then review the execution preview. A separate worktree collects changes; it does not restrict system access outside that tree.
|
|
148
|
+
|
|
149
|
+
<a id="official-tools"></a>
|
|
150
|
+
<a id="session-tools"></a>
|
|
151
|
+
<a id="team-lifecycle"></a>
|
|
152
|
+
|
|
153
|
+
### Use native tools with their own accounts
|
|
154
|
+
|
|
155
|
+
The tool registry includes **Kimi Code, Claude Code, Codex, MiniMax Code, MiMo Code, Grok Build, Gemini, OpenCode, StepCode, Pi, Hermes, ZCode, and DSH TUI**. In **Native tools**, detect the tool, choose an available install method, complete the vendor's login, then check readiness for the execution mode you want.
|
|
156
|
+
|
|
157
|
+
An interactive terminal exposes the installed tool's own workflow and capabilities. Managed single-tool and team execution use supported adapters; installation or login alone does not establish readiness for every mode or model. Vendor-native processes run with the current system user's permissions. Provider credentials and coding-plan endpoints remain in Harness settings.
|
|
158
|
+
|
|
159
|
+
<a id="daily-work"></a>
|
|
160
|
+
|
|
161
|
+
## Build a persistent Bot workspace
|
|
162
|
+
|
|
163
|
+
**Full Bot edition.** Create a Bot, select an exact configured model, and set its role and work directory. In **Bot bindings**, commit tools, computer/workspace access, and funding settings for execution Bots. In this release, **Main** has full Host authority across all connected model routes and tools and inherits the verified access ceiling of paired computers. Its binding configures the default model, workspace, funding and official-tool execution; worker capability checkboxes do not narrow Main. Actual model support, funding configuration, installed tools and pairing revocation still determine what can run.
|
|
164
|
+
|
|
165
|
+
In **Main → Model and tools → Configure multiple model routes**, add the exact provider and model for each route. Enable its funding scope, then set shared API budgets and subscription call limits. Each API route has its own prices and request bounds. Choose an enabled route as the default and save the settings together. A Host chat session can select another enabled route while keeping the saved default. For the integrated Claude subscription route, a switch can carry completed text history into a private process context. The native process receives only the new user turn. Histories with attachments, tool calls, or unconfirmed turns require a fresh conversation on that route.
|
|
166
|
+
|
|
167
|
+
A Host Claude conversation profile can enable `hostTools: true` to offer paired-computer file, approved container command, browser, desktop, operation, artifact and Task tools through its private MCP connection. This works in integrated and independent chat. Main inherits the paired computer's verified scope. Workers use their committed grants. File writes and commands create durable Tasks. Browser and desktop calls retain a conversation-owned operation record; an unknown effect blocks later mutations until the original Agent operation is reconciled. Screenshots arrive as bounded MCP PNG images. Calls require an active turn, and repeated bridge requests are refused. Bots with data-analysis permission also receive `data_load`, `data_describe`, `data_sql`, `data_show` and `data_export`, using their existing private database and library. These data tools are also available in API independent chat. Current data support is CSV/TSV/JSON, SQLite, bar/line/area charts and CSV export; saved results can be opened in the Data panel. Cancellation interrupts the data worker and prevents a cancelled library read from starting a later write. Already committed changes may remain, so inspect the existing data before repeating a cancelled or timed-out write. Other data formats remain in scope. [Claude profile configuration](packages/bot-engines/README.md).
|
|
168
|
+
|
|
169
|
+
The workspace shows native tool activity in both chat modes, scoped to the selected Bot and conversation. Open the activity indicator to inspect earlier entries. “Returned” records a CLI response; the task or remote-operation receipt determines whether the operation succeeded. Cancellation and confirmed process shutdown are separate facts. Unconfirmed turns remain marked for review, and recording failures are shown explicitly.
|
|
170
|
+
|
|
171
|
+
The plugin adds team coordination. Main can delegate using `coordinate_bots`; workers require the committed team-work permission. Assignments retain their original conversation, work thread and request identity, and targets use their own model, permissions and funding. Consult assignments cannot execute tools. Status checks and thread lists stay within the caller's scope; uncertain execution or reply delivery requires reconciliation. Restored work retains its original delegation ancestry for cycle and depth checks. Local validation uses real SDK/SQLite, an offline model provider and controlled native CLI fixtures; live user Host and provider-account acceptance remain outstanding.
|
|
172
|
+
|
|
173
|
+
| To do this | Use this workflow |
|
|
174
|
+
| --- | --- |
|
|
175
|
+
| Hold a private conversation | Select a Bot in the sidebar, send a message, and respond to questions or approval cards as they appear. |
|
|
176
|
+
| Collaborate in a group | Create a group from the chat selector, set members/administrators and response rules, and use `@` mentions to address Bots. Configure staged goals for longer work. |
|
|
177
|
+
| Manage long-term context | Search conversations, use checkpoints/segments, and edit Bot, group, or team memories. Review proposed skill/project-rule learning before accepting it. |
|
|
178
|
+
| Work with pages and documents | Open the current Bot's browser panel, manage pages, and attach supported Office documents for reading/preview. Configure connectors and enter secrets through credential cards when needed. |
|
|
179
|
+
| Schedule recurring work | Enable the Host's Automation tasks service, choose the target Bot/group, task, and schedule, then check the next-run state. The Host and relevant Agent must remain running. |
|
|
180
|
+
| Customize the workspace | Manage avatars and team appearance independently of the private file library. |
|
|
181
|
+
|
|
182
|
+
Integration mode reuses Harness Sessions. An optional independent runtime has its own session store; switch ownership explicitly so a Bot is served by one runtime at a time.
|
|
183
|
+
|
|
184
|
+
<a id="task-progress"></a>
|
|
185
|
+
|
|
186
|
+
## Multi-Bot task progress and pending items
|
|
187
|
+
|
|
188
|
+
**Available in the full Bot edition 0.67.0.** On **Tasks**, inspect task counts per Bot, filter by **All / In progress / Needs attention / Ended**, or search task names and task, plan, or operation IDs. Counts and filters cover loaded records; funding admission is in progress, while budget waiting needs attention.
|
|
189
|
+
|
|
190
|
+
**Needs your attention** reports the full count and expands beyond six items. Each reminder opens the original task; approval reminders can open the owning Bot's conversation to show its original request. Open a task's **timeline** for queue, admission, execution, stop-request, and reconciliation events, with the original identities for each attempt. Reading history does not dispatch tasks or invoke models; stop requests still require confirmation. Older Hosts without history support retain existing receipt details.
|
|
191
|
+
|
|
192
|
+
The Host loads at most **512 tasks**, prioritizing pending and active work before newer historical records, and explicitly reports loaded and total counts when truncated. History reads the latest **80 events** on demand and reports its total when truncated. These are durable managed-task records; they do not cover every chat message or live provider output.
|
|
193
|
+
|
|
194
|
+
This iteration draws on [Agents Anywhere](https://github.com/anywhere-labs/Agents-Anywhere)'s timeline and capability-based actions. See the [task workspace notes](https://gitlab.com/Alice_marx/dsh-model-router/-/blob/main/docs/integration/agents-anywhere-tasks.md) for implementation and verification.
|
|
195
|
+
|
|
196
|
+
<a id="bot-routing"></a>
|
|
197
|
+
|
|
198
|
+
## Delegate from a Main Bot to execution Bots
|
|
199
|
+
|
|
200
|
+
**Full Bot edition.** Model routing chooses a model route; Bot routing chooses a configured Bot and dispatches a task to it.
|
|
201
|
+
|
|
202
|
+
Routing uses each Bot's own saved prices, including when Bots share the same model. Invalid prices or quality scores remain unknown. When scores tie, a known price takes precedence before the Bot ID.
|
|
203
|
+
|
|
204
|
+
Changing a task, refreshing candidates, or switching Hosts retires the previous preview. Expand **View comparison basis** to inspect candidate scores and unknown information. Creating a task requires a current preview; a confirmed submission shows its plan ID and disables repeat creation. If the acknowledgement is missing or incomplete, refresh the task records and check the original submission before creating another task. On narrow screens, scroll tables horizontally to inspect all columns.
|
|
205
|
+
|
|
206
|
+
**Check original submission** reads the original request's durable plan and operation IDs without resubmitting, granting access, or calling a model. A missing record is a current observation: the original request may still complete. The reminder survives page remounts for the same connected Host in this window, and stores only the submission reference in memory. Reloading the app clears it. After checking the records yourself, an explicit reminder dismissal only clears the notice; it does not stop the original task or create another one.
|
|
207
|
+
|
|
208
|
+
Before reloading, expand **Save submission code** and copy the code. After reloading, connect to the original Host and paste it into **Check a saved submission** to query the original record. The code contains only the original Bot and request IDs; it contains no task text or credentials and does not authorize execution. Invalid codes are rejected locally. If clipboard access is unavailable, select and copy the code manually. Lookup failures explain whether to sign in again, update the Host, check a mismatched record, or reconnect; the reference remains available for another read.
|
|
209
|
+
|
|
210
|
+
```mermaid
|
|
211
|
+
flowchart LR
|
|
212
|
+
U["Task + acceptance criteria"] --> M["Main Bot"]
|
|
213
|
+
M --> R["Check eligible Bots and preview route"]
|
|
214
|
+
R --> A["Research Bot · configured model/tools"]
|
|
215
|
+
R --> B["Build Bot · configured model/tools"]
|
|
216
|
+
R --> C["Review Bot · configured model/tools"]
|
|
217
|
+
A --> E["Task records + outputs + receipts"]
|
|
218
|
+
B --> E
|
|
219
|
+
C --> E
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
*An example team arrangement. Create these Bots and commit their access before routing work to them.*
|
|
223
|
+
|
|
224
|
+
1. Configure the Main Bot and execution Bots with their actual models, allowed tools, computer/workspace grants, and funding settings.
|
|
225
|
+
2. Open **Tasks → Bot routing**, enable it, select **Economy**, **Balanced**, or **Quality first**, and save the policy.
|
|
226
|
+
3. Enter a task and choose automatic routing or a specific Bot. Select the computer/directory and operation type if required. **Preview route** explains the selection, missing conditions, rejection reasons, and proposed bindings.
|
|
227
|
+
4. Choose **Create task with this route** to dispatch. Follow the task record and inspect the output. An accepted plan ID means submitted, not completed.
|
|
228
|
+
|
|
229
|
+
The Main Bot can also call `bot_route_task` or its alias `bot_dispatch`. Both dispatch by default; `preview: true` only previews. `bot_task_plan_status` returns the actual plan/task state. Each execution Bot's model call has its own budget admission and receipt linked to the parent task. Role text does not grant tool or computer permissions.
|
|
230
|
+
|
|
231
|
+
<a id="computers"></a>
|
|
232
|
+
|
|
233
|
+
## Connect your Windows or cloud computer
|
|
234
|
+
|
|
235
|
+
**Full Bot edition.** Bring your own **Windows x64 computer or cloud desktop**. The setup wizard creates the local Agent configuration and pairing file; the Host must be able to reach the Agent over your configured network, VPN, or tunnel.
|
|
236
|
+
|
|
237
|
+
**On the computer to control:**
|
|
238
|
+
|
|
239
|
+
1. Download the [complete Windows Agent 0.1.2 package](https://github.com/Alice-Marx/dsh-model-router/releases/download/v0.67.0/dsh-remote-agent-0.1.2-windows-x64.zip), extract it into a permanent directory, and run `start.cmd`. Keep the interactive Windows user signed in.
|
|
240
|
+
2. In the setup wizard, configure the accessible address, port, approved work directories, and optional command/browser capabilities. It registers the Agent and desktop helper for the current user and generates `private/pairing.private.json` without storing a Windows password. Subsequent runs retain the existing configuration.
|
|
241
|
+
|
|
242
|
+
**In Harness:**
|
|
243
|
+
|
|
244
|
+
3. Open **Remote computers → Add computer** and import `private/pairing.private.json`. Check the populated endpoint and grants, select the allowed Bots, then pair/probe the computer. Keep this pairing file private.
|
|
245
|
+
4. In **Bot bindings**, save the Bot's computer and tool grants. Open **Computer operations** or the computer page, select a display, and choose **Connect desktop** to watch first.
|
|
246
|
+
5. Choose **Take control** and wait for confirmation before sending keyboard, mouse, wheel, or text input. **Watch only** returns control and releases held input. Use **Expand** or double-click while watching for a larger view; disconnect when finished.
|
|
247
|
+
|
|
248
|
+
Desktop viewing uses adaptive JPEG streaming with native input acknowledgements and a visible measured frame rate. Human control prevents conflicting Bot desktop automation. The current desktop implementation targets an available, signed-in Windows interactive session; performance depends on resolution and network conditions. Secure/UAC desktops are outside this capture scope. Computer pairing configures access; it does not provision a cloud machine or establish network connectivity.
|
|
249
|
+
|
|
250
|
+
<a id="routines"></a>
|
|
251
|
+
|
|
252
|
+
## Record and replay a routine
|
|
253
|
+
|
|
254
|
+
**Full Bot edition.** Routines save a demonstrated desktop sequence privately for the selected Bot.
|
|
255
|
+
|
|
256
|
+
1. Connect to the desktop, take control, restore the application to a known starting state, enter a routine name, and choose **Start recording**.
|
|
257
|
+
2. Demonstrate the workflow. Only successfully acknowledged inputs are recorded; mouse movement is sampled into 200 ms waypoints.
|
|
258
|
+
3. Choose **Stop and save**. Saving waits for queued input and confirmed release of held keys/buttons. Recorded text is part of the saved routine.
|
|
259
|
+
4. Open **Routines**, select the Bot/computer, restore the same starting layout, and run the saved sequence. Check the result and any stopped step.
|
|
260
|
+
|
|
261
|
+
A routine holds up to **200 retained steps**, with pauses up to **60 seconds**, and checks display identity, physical resolution, coordinates, and recorded DPI. It replays coordinates and timing, so application/layout changes may require a new recording. If an input may have taken effect but its acknowledgement was lost, the result is **unknown**. Inspect the real desktop and provide a reconciliation note before unblocking another run. A stop request remains pending until stopping is confirmed.
|
|
262
|
+
|
|
263
|
+
<a id="library"></a>
|
|
264
|
+
|
|
265
|
+
## Give each Bot a private file library
|
|
266
|
+
|
|
267
|
+
**Full Bot edition.** Open **Library**, select a Bot and folder, then upload/download files, create folders, or edit supported text. Name filtering narrows the current folder. **Search text** scans the selected Bot's private text files and returns file paths, line numbers, and matching lines; open a result to edit and explicitly save the file.
|
|
268
|
+
|
|
269
|
+
Binary transfers preserve the original bytes, with a **16 MiB per-file limit**; text reading/editing is limited to **1 MiB per file**. Same-name uploads are rejected. Authorized `bot_library_search` calls use the calling Bot's own library. PDF/Office uploads are stored as files; searchable text here is not a general OCR or semantic-indexing service.
|
|
270
|
+
|
|
271
|
+
<a id="costs"></a>
|
|
272
|
+
|
|
273
|
+
## Understand execution and accounting
|
|
274
|
+
|
|
275
|
+
- **Plan locally.** Route comparison and execution preflight do not call models. Confirmed execution sends the selected task/context to a provider or CLI and may incur charges.
|
|
276
|
+
- **Control API spending.** Per-task estimates and daily/monthly limits check recorded spend plus active reservations. Unknown prices or amounts require the relevant confirmation under a finite budget. Estimates are planning controls; provider bills remain authoritative.
|
|
277
|
+
- **Track subscriptions separately.** Subscription calls and reported input/output/cache tokens are recorded independently of API money. Missing usage remains unknown and does not imply zero usage or prove a vendor's remaining quota.
|
|
278
|
+
- **Choose fallback behavior.** Billing preferences can favor subscription, require subscription, or use API only. A subscription-to-API change requires fresh API estimation, budget admission, and any required confirmation. Managed editable/single-tool/team runs do not automatically retry on API.
|
|
279
|
+
- **Recover from evidence.** Execution records retain attempts, receipts, reservations, and unknown effects. Review interrupted work before retrying; elapsed time or a stop request does not prove that a remote action stopped.
|
|
280
|
+
- **Refine routing deliberately.** Optional stronger-model reviews may add calls. Explicit ratings adjust a bounded preference term; they do not raise measured quality or bypass quality floors. Learning can be disabled, ratings withdrawn, and the learning baseline reset.
|
|
281
|
+
|
|
282
|
+
<a id="architecture"></a>
|
|
283
|
+
<a id="data"></a>
|
|
284
|
+
|
|
285
|
+
## Integration, data, and compatibility
|
|
286
|
+
|
|
287
|
+
The Host owns committed model, tool, computer, funding, and operation identity. Bot dispatch, model-originated tools, and owner workbench actions follow this authority. Worktree isolation organizes code changes; vendor-native processes use the current user's system access.
|
|
288
|
+
|
|
289
|
+
Provider credentials and authenticated sessions are managed by Harness. Routing state, receipts, committed Bot bindings, private libraries, and routine ledgers live under `<DSH_HOME>/model-router/`. The configured Bot home stores upstream conversations, memory, browser state, and team files. Agent configuration and pairing credentials remain on the controlled computer. Back up these locations before changing runtime ownership; keep pairing files, recordings, logs, and private files out of public reports.
|
|
290
|
+
|
|
291
|
+
| Component | Current scope |
|
|
292
|
+
| --- | --- |
|
|
293
|
+
| Harness integration | Declared Host versions are listed in [package.json](package.json); integration verification uses the actual Harness SDK **0.2.1-rc.4**. |
|
|
294
|
+
| Bot foundation | Pinned [DS Bot](https://github.com/Fei2411/DS-Bot) **0.2.7**, with project-specific integration and product overlays. |
|
|
295
|
+
| Remote desktop | Windows x64 Agent **0.1.2**, with an available signed-in interactive desktop. |
|
|
296
|
+
| Tool execution | Availability depends on the local platform, installed CLI, account, exact model, and supported execution adapter shown by the workbench. |
|
|
297
|
+
|
|
298
|
+
<a id="troubleshooting"></a>
|
|
299
|
+
|
|
300
|
+
## Troubleshooting and support
|
|
301
|
+
|
|
302
|
+
| Symptom | What to check |
|
|
303
|
+
| --- | --- |
|
|
304
|
+
| Old interface after an update | Fully quit the tray Host, verify the installed package/version, and restart. |
|
|
305
|
+
| No route or eligible execution Bot | Check configured exact models, allowed tools, grants, availability, and the route preview's rejection reasons. |
|
|
306
|
+
| Tool installed but execution blocked | Check login, model access, mode-specific readiness, workspace, and committed permissions. |
|
|
307
|
+
| Agent reachable but desktop unavailable | Check the signed-in Windows session, Agent/helper tasks, display access, and native logs. |
|
|
308
|
+
| New Bot cannot use a paired computer | Check the pairing's allowed Bots/managed-Bot limit, then save that Bot's computer and tool grants. |
|
|
309
|
+
| Can watch but cannot take control | Check desktop-input permission, write access, and current control ownership. |
|
|
310
|
+
| Interrupted, unknown, or stop pending | Inspect execution records and the actual remote result; reconcile before another attempt. |
|
|
311
|
+
| Routine reports a display change | Restore the original display, resolution, DPI, and application layout, or record again. |
|
|
312
|
+
| Library upload/edit refused | Check file size and same-name collisions; binary transfer and text-edit limits differ. |
|
|
313
|
+
| Cost or usage unknown | Check actual model identity, configured prices, and reported usage. Missing data is not zero. |
|
|
314
|
+
|
|
315
|
+
Use [GitHub Issues](https://github.com/Alice-Marx/dsh-model-router/issues) for reproducible problems and [GitHub Releases](https://github.com/Alice-Marx/dsh-model-router/releases/latest) for installation files. Include the edition, plugin/Host versions, platform, steps, and a sanitized screenshot or error. Remove credentials, pairing files, and private task content.
|
|
316
|
+
|
|
317
|
+
## License and acknowledgements
|
|
318
|
+
|
|
319
|
+
Project extensions are [MIT licensed](LICENSE). The bundled DS Bot source retains its **Apache-2.0** license and notices; provenance is recorded in [SOURCE.json](modules/bot-runtime/SOURCE.json). Thanks to [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) and [DS Bot](https://github.com/Fei2411/DS-Bot) for the Host and Bot foundations.
|
|
320
|
+
|
|
321
|
+
## Technical reference: accounting and routing
|
|
322
|
+
|
|
323
|
+
### Actual cost versus planning estimate
|
|
324
|
+
|
|
325
|
+
The formula below applies to API-billed results. Algorithmic route-price comparisons are planning inputs; they do not turn a subscription into an API bill. The execution preview separates API money from estimated subscription tokens.
|
|
326
|
+
|
|
327
|
+
For API-billed results, a valid CLI-reported USD amount, including explicit zero, wins over token-price calculation. Otherwise, token-based CLI accounting requires complete normalized usage, known nonnegative prices, and a reported actual model matching the priced route or its explicit CLI mapping:
|
|
328
|
+
|
|
329
|
+
<!-- formula:actual-cost -->
|
|
330
|
+
```math
|
|
331
|
+
C_a = \frac{I_u p_i+O p_o+R p_r+W p_w}{10^6}
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
$`C_a`$ is `actualUsd`; $`I_u`$, $`O`$, $`R`$, and $`W`$ correspond to `inputTokens`, `outputTokens`, `cacheReadTokens`, and `cacheWriteTokens`. $`p_i`$, $`p_o`$, $`p_r`$, and $`p_w`$ are the matching input, output, cache-read and cache-write prices in USD per million tokens.
|
|
335
|
+
|
|
336
|
+
These ledger counters are disjoint after adapter normalization; do not add cached tokens to an inclusive input count. Missing optional cache prices use the input price. Incomplete usage, absent prices or unknown/unmatched identity keep the amount `null`, not zero. Complete terminal evidence can survive a failed/cancelled/timed-out run; partial events are marked `usageIncomplete`.
|
|
337
|
+
|
|
338
|
+
For example, a complete API result with 1,000 uncached input tokens at \$1/million and 500 output tokens at \$5/million costs \$0.0035. A subscription result instead records the reported tokens and call count; it is not converted to API money. A provider-reported \$0 for an API attempt is explicit evidence for that attempt, not proof that earlier unknown attempts were free. Actual provider bills are authoritative. Official-team mode does not automatically fall back to API, but a vendor CLI using its own API credentials still incurs API-billed usage.
|
|
339
|
+
|
|
340
|
+
<a id="routing"></a>
|
|
341
|
+
|
|
342
|
+
### How routing works
|
|
343
|
+
|
|
344
|
+
Manual assignment: after planning, choose algorithm recommendations or select an API model / official tool for each package. See the [workbench workflow](#workbench).
|
|
345
|
+
|
|
346
|
+
The planner is a deterministic local heuristic, not a trained success predictor. It classifies text, estimates complexity, creates suitable analysis/execution/verification/synthesis packages, discovers exact configured routes, overlays profiles, and applies capability/quality constraints. An explicit route bypasses comparison with other routes. Catalog quality/latency/risk hints are experimental priors, not measured success probabilities or live vendor quotes. Execution is currently text-oriented; a vision label does not establish an end-to-end multimodal pipeline.
|
|
347
|
+
|
|
348
|
+
#### Token and price estimate
|
|
349
|
+
|
|
350
|
+
Without matching resource evidence, base input tokens are $`\max(80,\lceil n/3.7\rceil)`$, then adjusted by package-stage multipliers. Base output is 900, adjusted by stage/reasoning effort, with minimum 220. Here $`n`$ is the JavaScript `text.length` value. This is a text-length heuristic, not a vendor tokenizer. Sufficient matching, complete history replaces these heuristics with empirical P90 resource estimates, without applying effort or stage multipliers again. Let $`I`$ be total estimated input, $`R`$/$`W`$ the cached-read/write portions, $`O`$ output, and prices USD per million tokens:
|
|
351
|
+
|
|
352
|
+
<!-- formula:planning-cost -->
|
|
353
|
+
```math
|
|
354
|
+
C = \frac{(I-R-W)p_i+O p_o+R p_r+W p_w}{10^6}
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
<!-- formula:cost-utility -->
|
|
358
|
+
```math
|
|
359
|
+
U_c = \frac{1}{1+C/\max(C_{\mathrm{ref}},10^{-12})}
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
$`U_c`$ is `costUtility`. The price symbols are the same as above. $`C_{\mathrm{ref}}`$ uses fixed reference prices (input 1, output 5, cache read/write 1 USD/million), not a vendor offer. Fixed scaling prevents an unrelated expensive candidate from flattening all cost penalties. Unknown prices produce a public estimate of `null` and cost utility 0. Internal unconstrained search uses a cost sentinel of 0, but finite-budget assignment excludes unknown-price candidates; the sentinel never means free execution.
|
|
363
|
+
|
|
364
|
+
#### Candidate objective and quality floors
|
|
365
|
+
|
|
366
|
+
With normalized quality $`q`$ and normalized latency, specialty, reasoning-fit and risk proxies:
|
|
367
|
+
|
|
368
|
+
<!-- formula:latency-utility -->
|
|
369
|
+
```math
|
|
370
|
+
L = \begin{cases}
|
|
371
|
+
\dfrac{1}{1+t/10\,000}, & t\text{ known}, \\
|
|
372
|
+
1-\min(1,\max(0,\ell e_\ell)), & \text{otherwise}.
|
|
373
|
+
\end{cases}
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
<!-- formula:candidate-utility -->
|
|
377
|
+
```math
|
|
378
|
+
u = w_q q+w_c U_c+w_\ell L+w_s s+w_r r-w_k k-\alpha\max(0,f-q)+\Delta_p
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
<!-- formula:assignment-score -->
|
|
382
|
+
```math
|
|
383
|
+
S = \sum_{j=1}^{n}u_j - 0.015\sum_{(i,j)\in E}\mathbf{1}[\rho_i\ne\rho_j]
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
$`L`$ is latency utility: $`t`$ is the matching historical P90 duration in milliseconds; otherwise $`\ell`$ is the latency proxy and $`e_\ell`$ its effort multiplier. In the utility formula, $`s`$/$`r`$/$`k`$ are specialty/reasoning-fit/risk, $`f`$ is the quality floor, $`\alpha`$ is criticality, and $`\Delta_p`$ is the bounded `preferenceAdjustment`; the $`w`$ terms are the corresponding weights. $`S`$ is `assignmentScore`; $`E`$ contains dependency edges, and $`\rho_j`$ is package $`j`$'s `provider/model` route. The indicator is 1 when routes differ, otherwise 0.
|
|
387
|
+
|
|
388
|
+
Quality first uses sufficient matching objective task evidence, then falls back to task-category LiveBench, overall LiveBench, and profile/catalog estimates. Model and effort are compared jointly only when at least two API efforts have usable task evidence; observed duration can replace the latency proxy. Public-data refresh is opt-in. Human ratings affect only the bounded `preferenceAdjustment`; they cannot increase objective quality or satisfy its floor.
|
|
389
|
+
|
|
390
|
+
| Package basis | Quality | Cost | Latency | Specialty | Reasoning | Risk |
|
|
391
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
392
|
+
| Simple | 0.28 | 0.45 | 0.14 | 0.04 | 0.07 | 0.02 |
|
|
393
|
+
| Balanced | 0.40 | 0.26 | 0.10 | 0.09 | 0.10 | 0.05 |
|
|
394
|
+
| Complex | 0.48 | 0.14 | 0.06 | 0.14 | 0.11 | 0.07 |
|
|
395
|
+
| Synthesis | 0.58 | 0.08 | 0.04 | 0.08 | 0.16 | 0.06 |
|
|
396
|
+
|
|
397
|
+
Base quality floors are **0.75 / 0.78 / 0.82** for simple/balanced/complex tasks; critical complex packages raise the floor, and complex synthesis is at least 0.84. The economy preset multiplies quality/cost/latency weights by 0.75/1.6/1.1 and lowers the floor by 0.04. Quality-first multiplies quality/cost/specialty/reasoning by 1.35/0.5/1.2/1.2 and raises the floor by 0.04. Tilted weights are renormalized to the original total; adjusted floors are clamped to [0.5, 0.97]. Balanced applies no tilt.
|
|
398
|
+
|
|
399
|
+
#### Candidate pruning and assignment search
|
|
400
|
+
|
|
401
|
+
1. Prefer candidates meeting each package's floor. If none qualify, retain up to three highest-quality fallbacks and report relaxation.
|
|
402
|
+
2. Keep at most **12 candidates per package**, including anchors for lowest known cost, greatest utility and highest quality. Local Pareto pruning is disabled when dependencies exist, because route identity affects handoffs.
|
|
403
|
+
3. Validate unique package IDs and topological dependency order. Search the retained Cartesian space exactly when its size is at most **4,096**; otherwise use **beam width 256**. Search compresses dominated prefixes sharing the same future dependency boundary and ranks them using optimistic future handoffs. Remaining minimum costs prune infeasible prefixes; the beam protects the cheapest feasible prefix under a finite budget.
|
|
404
|
+
4. Compare assignments lexicographically: fewer relaxed packages, smaller quality shortfall, higher utility, lower cost, fewer route switches, then stable route order. Minimum-cost mode compares cost before utility. Each dependency crossing a `provider/model` route subtracts 0.015 from utility.
|
|
405
|
+
5. Report search metadata and feasibility. When a positive budget has no feasible assignment, a minimum-cost alternative can still be returned with `budgetFeasible: false`. A displayed plan is not proof that the budget is satisfied.
|
|
406
|
+
|
|
407
|
+
“Exact” applies only to the retained candidate space and proxy objective. Candidate caps and beam pruning prevent a guarantee of global optimality over all configured models; use the preview to inspect the selected route and any relaxed quality floor.
|
|
408
|
+
|
|
409
|
+
Routing profiles support matching resource evidence, fallback rules, reasoning-effort handling, and optional JSON validation with escalation. Escalation defaults to off and permits at most one additional ordinary API request after billing and budget checks.
|