dsh-vision-router 3.0.1 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/README.zh.md +6 -6
- package/docs/architecture/ci-risk-posture.md +45 -0
- package/docs/architecture/dsh-021-alpha1-adaptation.md +46 -0
- package/docs/releases/v3.0.2.md +105 -0
- package/docs/releases/v3.0.3.md +45 -0
- package/index.js +13 -3
- package/lib/adapter-ownership.js +51 -0
- package/lib/client-presentation-boundary-main.js +123 -50
- package/lib/client-presentation-boundary.js +36 -46
- package/lib/client.js +10 -4
- package/lib/core-primitives.js +21 -0
- package/lib/core-vision-surface.js +3 -1
- package/lib/desktop-screenshot-tool.js +11 -9
- package/lib/diagnostic-redaction.js +67 -12
- package/lib/doctor-cli-p0.js +36 -5
- package/lib/dsh-support-window.js +4 -1
- package/lib/file-logger.js +9 -9
- package/lib/image-offload-compat.js +10 -3
- package/lib/local-vision-stabilizer.js +8 -6
- package/lib/native-image-coexistence.js +11 -1
- package/lib/proxy-routing.js +39 -5
- package/lib/remote-settings-risk-client-boundary.js +6 -1
- package/lib/session-vision-mode-authority.js +2 -7
- package/lib/session-vision-policy.js +9 -4
- package/lib/settings-number-contract.js +3 -1
- package/lib/vision-background-stop-store-core.js +14 -2
- package/lib/vision-resilience.js +31 -2
- package/lib/vision-tool-runtime-boundary.js +2 -7
- package/package.json +2 -2
|
@@ -12,12 +12,15 @@ export function parseSessionVisionPolicy(value) {
|
|
|
12
12
|
if (value === null || typeof value !== 'object' || Array.isArray(value))
|
|
13
13
|
return undefined;
|
|
14
14
|
const record = value;
|
|
15
|
-
|
|
15
|
+
// Own keys only: a policy row is persisted JSON, so a value inherited from a
|
|
16
|
+
// prototype is evidence of a malformed row rather than of a policy.
|
|
17
|
+
if (!Object.hasOwn(record, 'revision') || record.revision !== SESSION_VISION_POLICY_REVISION)
|
|
16
18
|
return undefined;
|
|
17
|
-
if (typeof record.enabled !== 'boolean')
|
|
19
|
+
if (!Object.hasOwn(record, 'enabled') || typeof record.enabled !== 'boolean')
|
|
18
20
|
return undefined;
|
|
19
|
-
if (record.source !== 'user' && record.source !== 'delegation')
|
|
21
|
+
if (!Object.hasOwn(record, 'source') || (record.source !== 'user' && record.source !== 'delegation')) {
|
|
20
22
|
return undefined;
|
|
23
|
+
}
|
|
21
24
|
if (record.source === 'user') {
|
|
22
25
|
if (record.inheritedFrom !== undefined)
|
|
23
26
|
return undefined;
|
|
@@ -27,7 +30,9 @@ export function parseSessionVisionPolicy(value) {
|
|
|
27
30
|
source: 'user',
|
|
28
31
|
});
|
|
29
32
|
}
|
|
30
|
-
const inheritedFrom =
|
|
33
|
+
const inheritedFrom = Object.hasOwn(record, 'inheritedFrom')
|
|
34
|
+
? nonEmptyString(record.inheritedFrom)
|
|
35
|
+
: undefined;
|
|
31
36
|
if (inheritedFrom === undefined)
|
|
32
37
|
return undefined;
|
|
33
38
|
return Object.freeze({
|
|
@@ -10,7 +10,9 @@ export const SETTINGS_NUMBER_META = Object.freeze({
|
|
|
10
10
|
})
|
|
11
11
|
|
|
12
12
|
export function parseSettingsNumber(key, raw, { allowClear = false } = {}) {
|
|
13
|
-
|
|
13
|
+
// Own keys only: a bare lookup would resolve inherited names such as
|
|
14
|
+
// `__proto__` or `constructor` to prototype machinery instead of "unknown key".
|
|
15
|
+
const meta = Object.hasOwn(SETTINGS_NUMBER_META, key) ? SETTINGS_NUMBER_META[key] : undefined
|
|
14
16
|
if (!meta) return undefined
|
|
15
17
|
if (raw === '' || raw === null || raw === undefined) return allowClear ? { clear: true } : undefined
|
|
16
18
|
const value = Number(raw)
|
|
@@ -105,8 +105,20 @@ async function load(file, fsOps, at) {
|
|
|
105
105
|
return new Map();
|
|
106
106
|
}
|
|
107
107
|
const records = retainedStopMap(stops, at);
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
// Rewrite whenever loading changed the persisted set: v2 stored raw entries
|
|
109
|
+
// that this version must drop, and any later retention rule (category,
|
|
110
|
+
// expiry, fingerprint shape) has to reach the file the same way instead of
|
|
111
|
+
// leaving a stale record that only the runtime filter happens to hide.
|
|
112
|
+
if (version === 2 || records.size !== stops.length) {
|
|
113
|
+
try {
|
|
114
|
+
await save(file, records, fsOps, at);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// This rewrite is opportunistic: a read-only or full disk must not discard the records
|
|
118
|
+
// the load could still read (the catch below returns an empty map). The store's own
|
|
119
|
+
// persist() retries the write and reports it through the logger.
|
|
120
|
+
}
|
|
121
|
+
}
|
|
110
122
|
return records;
|
|
111
123
|
}
|
|
112
124
|
catch (error) {
|
package/lib/vision-resilience.js
CHANGED
|
@@ -109,6 +109,35 @@ export function kindForHttpStatus(status) {
|
|
|
109
109
|
return undefined
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
+
/** Read one field without letting a hostile getter escape the classifier. */
|
|
113
|
+
function safeFailureField(error, name) {
|
|
114
|
+
try {
|
|
115
|
+
return error === null || error === undefined ? undefined : error[name]
|
|
116
|
+
} catch {
|
|
117
|
+
return undefined
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/** Read the human-readable text; a throwing toString() must not escape either. */
|
|
122
|
+
function safeFailureText(error) {
|
|
123
|
+
try {
|
|
124
|
+
return String(safeFailureField(error, 'message') ?? error ?? '')
|
|
125
|
+
} catch {
|
|
126
|
+
return ''
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** Map a branded error code to a kind using own keys only (no prototype hits). */
|
|
131
|
+
function kindForCode(code) {
|
|
132
|
+
let key
|
|
133
|
+
try {
|
|
134
|
+
key = code === null || code === undefined ? '' : String(code)
|
|
135
|
+
} catch {
|
|
136
|
+
key = ''
|
|
137
|
+
}
|
|
138
|
+
return Object.hasOwn(CODE_KIND_MAP, key) ? CODE_KIND_MAP[key] : undefined
|
|
139
|
+
}
|
|
140
|
+
|
|
112
141
|
/**
|
|
113
142
|
* Classify a backend failure into the shared taxonomy plus a provider-retry
|
|
114
143
|
* verdict. Deterministic failures (AUTH / INVALID_REQUEST / REGION / TOS)
|
|
@@ -117,8 +146,8 @@ export function kindForHttpStatus(status) {
|
|
|
117
146
|
* the task deadline still has budget.
|
|
118
147
|
*/
|
|
119
148
|
export function classifyVisionFailure(error) {
|
|
120
|
-
const message =
|
|
121
|
-
let kind =
|
|
149
|
+
const message = safeFailureText(error)
|
|
150
|
+
let kind = kindForCode(safeFailureField(error, 'code')) ?? kindForHttpStatus(safeFailureField(error, 'status'))
|
|
122
151
|
if (kind === undefined) {
|
|
123
152
|
for (const [candidate, patterns] of KIND_BY_PATTERN) {
|
|
124
153
|
if (patterns.some((pattern) => pattern.test(message))) {
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
LiveDescribeCache,
|
|
12
12
|
} from './runtime-reliability.js'
|
|
13
13
|
import { projectDelegatedCallConfig } from './delegated-call-config.js'
|
|
14
|
+
import { isVisionRouterOwnedAdapter } from './adapter-ownership.js'
|
|
14
15
|
import { VISION_RESULT_CODES } from './vision-resilience.js'
|
|
15
16
|
|
|
16
17
|
const toolRuntime = new AsyncLocalStorage()
|
|
@@ -26,7 +27,6 @@ const wrappedLlms = new WeakMap()
|
|
|
26
27
|
const wrappedAdapters = new WeakMap()
|
|
27
28
|
const wrappedDelegatingAdapters = new WeakMap()
|
|
28
29
|
const wrappedTransparentAdapters = new WeakMap()
|
|
29
|
-
const VISION_ROUTER_ADAPTER_OWNER = Symbol.for('dsh-vision-router.adapter-owner')
|
|
30
30
|
const MAX_TRANSPARENT_REASONING_MEMORY = 512
|
|
31
31
|
const VISION_FAILURE_RESULT_CODES = new Set(Object.values(VISION_RESULT_CODES))
|
|
32
32
|
|
|
@@ -434,12 +434,7 @@ function visionChainAdapter(adapter, routes) {
|
|
|
434
434
|
}
|
|
435
435
|
|
|
436
436
|
function visionRouterOwnedAdapter(adapter) {
|
|
437
|
-
|
|
438
|
-
try {
|
|
439
|
-
return adapter[VISION_ROUTER_ADAPTER_OWNER] !== undefined
|
|
440
|
-
} catch {
|
|
441
|
-
return false
|
|
442
|
-
}
|
|
437
|
+
return isVisionRouterOwnedAdapter(adapter)
|
|
443
438
|
}
|
|
444
439
|
|
|
445
440
|
function explicitReasoningEffort(options) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-vision-router",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"description": "Eyes for text-only DeepSeek Harness agents: built-in free vision chain + pixel-level tools. Remote vision providers, including the default free fallback, receive image content unless strict local-only use is configured.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"@deepseek-ai/dsh-storage-domain": "0.2.0-rc.2"
|
|
90
90
|
},
|
|
91
91
|
"scripts": {
|
|
92
|
-
"test": "node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/cache-atomic-write-concurrency.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/release-registry-identity.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/activation-shim-contract.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/architecture-2.3-gate.test.js tests/host-settings-seam.test.js tests/drift-canary-settings-seam.test.js tests/esm-cycle-audit.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/local-only-vision.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/vision-diagnostics-routes.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/free-cloud-first.test.js tests/dsh-host-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/issue-606-session-source-ownership.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/provider-probe-proxy-scope.test.js tests/lifecycle-invariants.test.js tests/vision-tool-settings-generation.test.js tests/release-package-content-identity.test.js tests/release-state-machine.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/long-ocr-empty-retry.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/session-vision-policy.test.js tests/session-vision-policy-domain.test.js tests/session-vision-delegation.test.js tests/session-vision-delegation-boundary.test.js tests/subagent-vision-inheritance-characterization.test.js tests/subagent-vision-runtime-integration.test.js tests/subagent-vision-cold-resume.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && pnpm test:regression-closure && node --test tests/vision-backend-runtime-policy.test.js",
|
|
92
|
+
"test": "node --test tests/index-modularization.test.js tests/adapter-prepare-call-compat.test.js tests/core.test.js tests/issue-374-delegated-call-config.test.js tests/grounding-coordinate-frame.test.js tests/grounding-coordinate-runtime.test.js tests/capability-advisory.test.js tests/vision-execution-policy.test.js tests/vision-backend-diagnostics.test.js tests/live-model-discovery.test.js tests/cache-atomic-write-concurrency.test.js tests/live-model-credential-resolution.test.js tests/vision-model-registry.test.js tests/live-model-client-stability.test.js tests/providers-persistence.test.js tests/provider-directory-fallback.test.js tests/model-catalog-policy.test.js tests/settings-ia-client-prelude.test.js tests/settings-ia-fj.test.js tests/settings-ia-acceptance-regression.test.js tests/settings-migration.test.js tests/settings-section-order.test.js tests/attachment-admission-policy.test.js tests/vision-resilience.test.js tests/degraded-local-evidence.test.js tests/vision-resilience-lifecycle.test.js tests/vision-breaker-readonly.test.js tests/alpha1-browser-lifecycle-integration.test.js tests/issue-367-remote-session-inject.test.js tests/vision-mode-toggle-injection.test.js tests/client.test.js tests/issue-307-regression.test.js tests/issue-284-vision-mode-toggle.test.js tests/issue-284-vision-mode-hardening.test.js tests/issue-284-attachment-id-hint.test.js tests/issue-284-model-visibility.test.js tests/issue-284-vision-selection-effort.test.js tests/client-presentation-boundary.test.js tests/clipboard-image-paste-compat.test.js tests/remote-settings-bridge.test.js tests/remote-settings-v2-contract.test.js tests/remote-settings-risk-confirmation.test.js tests/local-remote-settings-permission.test.js tests/artifact-path-security.test.js tests/http-compat.test.js tests/catalog-corrections.test.js tests/release-registry-identity.test.js tests/update-check.test.js tests/update-check-signal-lifecycle.test.js tests/self-update.test.js tests/doctor.test.js tests/doctor-cli.test.js tests/legacy-session-repair.test.js tests/profile-pnpm-diagnostics.test.js tests/doctor-v2.test.js tests/doctor-cli-v2.test.js tests/doctor-runtime.test.js tests/dsh-host-capabilities.test.js tests/doctor-host-capabilities.test.js tests/session-repair-v2.test.js tests/activation-shim-contract.test.js tests/bundle-defaults.test.js tests/file-logger.test.js tests/official-deepseek-catalog.test.js tests/replay-delegation.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/adversarial-hardening.test.js tests/vision-adversarial-hardening-v2.test.js tests/vision-capability-benchmark-visual-proof.test.js tests/wrapper-directory.test.js tests/logging-ui.test.js tests/manifest-dependencies.test.js tests/provider-transport-threading.test.js tests/architecture-2.3-gate.test.js tests/host-settings-seam.test.js tests/drift-canary-settings-seam.test.js tests/esm-cycle-audit.test.js tests/structured-bootstrap.test.js tests/structured-bootstrap-gate.test.js tests/vision-model-guidance-contract.test.js tests/local-ollama.test.js tests/local-only-vision.test.js tests/ollama-cold-start.test.js tests/ollama-cold-start-loaded.test.js tests/zero-regression-gate.test.js tests/runtime-e2e.test.js tests/local-vision-stabilizer.test.js tests/local-connection-probe.test.js tests/vision-diagnostics-routes.test.js tests/repetition-guard.test.js tests/guide-scroll-gate.test.js tests/settings-scroll-jank-regression.test.js tests/free-cloud-first.test.js tests/dsh-host-compat.test.js tests/native-image-coexistence.test.js tests/issue-276-session-image-ownership.test.js tests/issue-276-entry-policy-bridge.test.js tests/issue-276-policy-hardening.test.js tests/issue-289-native-nonintervention.test.js tests/issue-512-tool-restriction.test.js tests/issue-606-session-source-ownership.test.js tests/pi-ai-bridge-wire-compat.test.js tests/fetch-wrapper-lifecycle.test.js tests/fetch-wrapper-composition.test.js tests/provider-probe-proxy-scope.test.js tests/lifecycle-invariants.test.js tests/vision-tool-settings-generation.test.js tests/release-package-content-identity.test.js tests/release-state-machine.test.js tests/mixed-router.test.js tests/depth-tier.test.js tests/depth-quota-behavior.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-budget-activation.test.js tests/runtime-boundary-fixes.test.js tests/security-resource-boundaries.test.js tests/security-property-fuzz.test.js tests/security-adversarial-fuzz-contract.test.js tests/runtime-i18n.test.js tests/long-ocr-empty-retry.test.js tests/tesseract-adaptive-ocr.test.js tests/tesseract-node24-boot.test.js tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-event-feed.test.js tests/session-vision-policy.test.js tests/session-vision-policy-domain.test.js tests/session-vision-delegation.test.js tests/session-vision-delegation-boundary.test.js tests/subagent-vision-inheritance-characterization.test.js tests/subagent-vision-runtime-integration.test.js tests/subagent-vision-cold-resume.test.js tests/image-resource-governor.test.js tests/resource-retention-lifecycle.test.js tests/pixel-diff-stream.test.js tests/large-image-resource-integration.test.js tests/structured-guard-idempotency.test.js tests/vision-routing-product.test.js tests/vision-runtime-performance.test.js tests/vision-routing-settings-prelude.test.js tests/v2-settings-ia-integration.test.js tests/vision-capability-router.test.js tests/vision-capability-reference.test.js tests/vision-capability-benchmark.test.js tests/vision-capability-grounding-proof-contract.test.js tests/vision-capability-probe.test.js tests/vision-capability-axis-freshness.test.js tests/vision-capability-shadow-health.test.js tests/vision-capability-benchmark-service.test.js tests/vision-capability-preflight-hardening.test.js tests/vision-capability-benchmark-contract.test.js tests/vision-capability-benchmark-client.test.js tests/vision-capability-benchmark-client-productization.test.js tests/vision-capability-adapter-route.test.js tests/vision-background-benchmark.test.js tests/vision-background-lifecycle.test.js tests/vision-background-benchmark-productization.test.js tests/vision-capability-benchmark-budget.test.js tests/vision-image-input-verdict.test.js tests/vision-capability-failure-classification.test.js tests/vision-capability-gate-client.test.js tests/v2-product-review-fixes.test.js tests/qa-top5-reliability.test.js tests/qa-screenshot-runtime.test.js tests/qa-runtime-identity.test.js tests/qa-turn-budget-cancellation.test.js tests/qa-cancellation-publication.test.js tests/qa-reliability-tail.test.js tests/qa-endpoint-route-alias.test.js tests/settings-native-card-semantics.test.js tests/settings-native-card-lazy-data.test.js tests/settings-invalid-staged-dirty.test.js tests/vision-toggle-root-hardening.test.js && pnpm test:regression-closure && node --test tests/vision-backend-runtime-policy.test.js tests/vision-router-adversarial-review-fixes.test.js tests/web-panel-delegation.test.js",
|
|
93
93
|
"test:core": "node --test tests/core.test.js tests/degraded-local-evidence.test.js tests/runtime-e2e.test.js tests/structured-bootstrap.test.js tests/structured-flow-hardening.test.js tests/structured-flow-adversarial.test.js tests/vision-execution-policy.test.js tests/vision-backend-runtime-policy.test.js",
|
|
94
94
|
"test:routing": "node --test tests/issue-374-delegated-call-config.test.js tests/twin-image-capability-fallback.test.js tests/twin-image-custom-wrapper.test.js tests/vision-routing-product.test.js tests/vision-capability-router.test.js tests/vision-capability-probe.test.js tests/vision-capability-shadow-health.test.js tests/vision-runtime-performance.test.js tests/vision-background-benchmark.test.js tests/vision-image-input-verdict.test.js",
|
|
95
95
|
"test:session": "node --test tests/session-vision-state.test.js tests/session-vision-state-integration.test.js tests/session-vision-policy.test.js tests/session-vision-delegation.test.js tests/session-vision-delegation-boundary.test.js tests/subagent-vision-inheritance-characterization.test.js tests/subagent-vision-runtime-integration.test.js tests/subagent-vision-cold-resume.test.js tests/session-vision-policy-domain.test.js tests/replay-delegation.test.js tests/legacy-session-repair.test.js tests/session-repair-v2.test.js tests/issue-276-session-image-ownership.test.js",
|