@toddzheng024/dscode-desktop 0.0.0-stage → 0.7.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +120 -2
- package/THIRD_PARTY_NOTICES.md +30 -0
- package/bin/apply_patch +9 -0
- package/cordis.patch.yml +433 -0
- package/docs/CHANGELOG.md +649 -0
- package/docs/account-login.md +44 -0
- package/docs/auto-review.md +128 -0
- package/docs/browser-use.md +784 -0
- package/docs/computer-use.md +81 -0
- package/docs/custom-providers.md +88 -0
- package/docs/demo.md +158 -0
- package/docs/distribution.md +58 -0
- package/docs/dscode-ultra.md +75 -0
- package/docs/email.md +296 -0
- package/docs/exec.md +40 -0
- package/docs/hub-distribution.md +212 -0
- package/docs/memory.md +121 -0
- package/docs/opencode-go.md +61 -0
- package/docs/plugin-hub.md +68 -0
- package/docs/releases/0.2.0.md +28 -0
- package/docs/releases/0.3.0.md +21 -0
- package/docs/releases/0.4.0.md +20 -0
- package/docs/releases/0.5.0.md +19 -0
- package/docs/releases/0.6.0.md +20 -0
- package/docs/releases/0.7.0.md +22 -0
- package/docs/releases/0.7.1.md +20 -0
- package/docs/releases/0.7.10.md +10 -0
- package/docs/releases/0.7.11.md +17 -0
- package/docs/releases/0.7.12.md +11 -0
- package/docs/releases/0.7.13.md +12 -0
- package/docs/releases/0.7.14.md +11 -0
- package/docs/releases/0.7.15.md +11 -0
- package/docs/releases/0.7.16.md +10 -0
- package/docs/releases/0.7.17.md +12 -0
- package/docs/releases/0.7.18.md +13 -0
- package/docs/releases/0.7.19.md +8 -0
- package/docs/releases/0.7.2.md +19 -0
- package/docs/releases/0.7.20.md +10 -0
- package/docs/releases/0.7.21.md +9 -0
- package/docs/releases/0.7.22.md +11 -0
- package/docs/releases/0.7.23.md +14 -0
- package/docs/releases/0.7.24.md +11 -0
- package/docs/releases/0.7.25.md +8 -0
- package/docs/releases/0.7.26.md +18 -0
- package/docs/releases/0.7.27.md +8 -0
- package/docs/releases/0.7.28.md +22 -0
- package/docs/releases/0.7.29.md +12 -0
- package/docs/releases/0.7.3.md +23 -0
- package/docs/releases/0.7.30.md +19 -0
- package/docs/releases/0.7.31.md +14 -0
- package/docs/releases/0.7.32.md +14 -0
- package/docs/releases/0.7.33.md +37 -0
- package/docs/releases/0.7.34.md +24 -0
- package/docs/releases/0.7.4.md +16 -0
- package/docs/releases/0.7.5.md +18 -0
- package/docs/releases/0.7.6.md +29 -0
- package/docs/releases/0.7.7.md +36 -0
- package/docs/releases/0.7.8.md +14 -0
- package/docs/releases/0.7.9.md +15 -0
- package/docs/session-bridge.md +80 -0
- package/docs/session-cards.md +53 -0
- package/docs/session-communication.md +186 -0
- package/docs/session-metrics.md +41 -0
- package/docs/skills.md +81 -0
- package/docs/triggers.md +338 -0
- package/docs/tui-commands.md +204 -0
- package/extensions/browser/manifest.json +22 -0
- package/extensions/browser/popup.css +6 -0
- package/extensions/browser/popup.html +11 -0
- package/extensions/browser/popup.mjs +47 -0
- package/extensions/browser/protocol.mjs +168 -0
- package/extensions/browser/worker.mjs +94 -0
- package/icon.svg +7 -0
- package/locale/en.json +6 -0
- package/locale/zh-cn.json +6 -0
- package/node_modules/@deepseek-ai/node-addon-system/LICENSE +21 -0
- package/node_modules/@deepseek-ai/node-addon-system/README.i18n.yaml +6 -0
- package/node_modules/@deepseek-ai/node-addon-system/README.md +15 -0
- package/node_modules/@deepseek-ai/node-addon-system/README.zh.md +15 -0
- package/node_modules/@deepseek-ai/node-addon-system/lib/flock.d.ts +13 -0
- package/node_modules/@deepseek-ai/node-addon-system/lib/flock.js +51 -0
- package/node_modules/@deepseek-ai/node-addon-system/lib/index.d.ts +73 -0
- package/node_modules/@deepseek-ai/node-addon-system/lib/index.js +98 -0
- package/node_modules/@deepseek-ai/node-addon-system/package.json +45 -0
- package/node_modules/@deepseek-ai/node-addon-system/src/flock.c +164 -0
- package/node_modules/@deepseek-ai/node-addon-system/src/main.c +298 -0
- package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/LICENSE +28 -0
- package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/README.i18n.yaml +6 -0
- package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/README.md +9 -0
- package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/README.zh.md +9 -0
- package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/bin/system.node +0 -0
- package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/package.json +31 -0
- package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/prebuilds.json +6 -0
- package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/LICENSE +28 -0
- package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/README.i18n.yaml +6 -0
- package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/README.md +9 -0
- package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/README.zh.md +9 -0
- package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/bin/system.node +0 -0
- package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/package.json +31 -0
- package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/prebuilds.json +6 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/LICENSE +28 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/README.i18n.yaml +6 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/README.md +11 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/README.zh.md +11 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/bin/glibc/system.node +0 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/bin/landlock-run +0 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/bin/musl/system.node +0 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/package.json +31 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/prebuilds.json +24 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-x64/LICENSE +28 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-x64/README.i18n.yaml +6 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-x64/README.md +11 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-x64/README.zh.md +11 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-x64/bin/glibc/system.node +0 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-x64/bin/landlock-run +0 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-x64/bin/musl/system.node +0 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-x64/package.json +31 -0
- package/node_modules/@deepseek-ai/node-addon-system-linux-x64/prebuilds.json +24 -0
- package/package.json +156 -4
- package/plugins/account/index.mjs +178 -0
- package/plugins/account/state.mjs +123 -0
- package/plugins/auto-review/audit.mjs +24 -0
- package/plugins/auto-review/index.mjs +267 -0
- package/plugins/auto-review/policy.mjs +92 -0
- package/plugins/browser/SKILL.md +158 -0
- package/plugins/browser/access.mjs +143 -0
- package/plugins/browser/config.mjs +60 -0
- package/plugins/browser/connection.mjs +385 -0
- package/plugins/browser/desktop-client.mjs +282 -0
- package/plugins/browser/desktop-host.mjs +74 -0
- package/plugins/browser/document-identity.mjs +57 -0
- package/plugins/browser/extension-relay.mjs +66 -0
- package/plugins/browser/files.mjs +32 -0
- package/plugins/browser/index.mjs +235 -0
- package/plugins/browser/mcp-entry.mjs +18 -0
- package/plugins/browser/mcp-tools.mjs +21 -0
- package/plugins/browser/presentation.mjs +45 -0
- package/plugins/browser/preview.mjs +77 -0
- package/plugins/browser/review.mjs +20 -0
- package/plugins/browser/screenshots.mjs +35 -0
- package/plugins/clipboard-image/clipboard-image.swift +56 -0
- package/plugins/clipboard-image/index.mjs +70 -0
- package/plugins/code-review/baseline.mjs +143 -0
- package/plugins/code-review/git.mjs +163 -0
- package/plugins/code-review/index.mjs +236 -0
- package/plugins/compaction/engine.mjs +304 -0
- package/plugins/compaction/tetris.mjs +65 -0
- package/plugins/compaction/threshold.mjs +99 -0
- package/plugins/computer-use/DESKTOP-SKILL.md +64 -0
- package/plugins/computer-use/desktop-host.mjs +75 -0
- package/plugins/computer-use/desktop-skill.mjs +28 -0
- package/plugins/computer-use/desktop-upstream.mjs +3 -0
- package/plugins/computer-use/index.mjs +37 -0
- package/plugins/cordis-config/plain.mjs +31 -0
- package/plugins/credentials/index.mjs +73 -0
- package/plugins/custom/adapter.mjs +110 -0
- package/plugins/custom/config.mjs +85 -0
- package/plugins/custom/desktop-client.mjs +150 -0
- package/plugins/custom/desktop-host.mjs +78 -0
- package/plugins/custom/images.mjs +32 -0
- package/plugins/custom/index.mjs +145 -0
- package/plugins/custom/wire.mjs +179 -0
- package/plugins/desktop/client.mjs +1041 -0
- package/plugins/desktop/index.mjs +10 -0
- package/plugins/desktop/shell-environment.mjs +9 -0
- package/plugins/desktop-workspace/hooks.mjs +29 -0
- package/plugins/desktop-workspace/index.mjs +37 -0
- package/plugins/dscode/board.mjs +260 -0
- package/plugins/dscode/child-target.mjs +11 -0
- package/plugins/dscode/control.mjs +17 -0
- package/plugins/dscode/desktop-client.mjs +55 -0
- package/plugins/dscode/desktop-host.mjs +37 -0
- package/plugins/dscode/index.mjs +270 -0
- package/plugins/email/cli.mjs +32 -0
- package/plugins/email/contacts.mjs +36 -0
- package/plugins/email/desktop-client.mjs +117 -0
- package/plugins/email/desktop-host.mjs +54 -0
- package/plugins/email/desktop-service.mjs +106 -0
- package/plugins/email/gmail-oauth.mjs +69 -0
- package/plugins/email/gmail-store.mjs +2 -0
- package/plugins/email/gmail.mjs +194 -0
- package/plugins/email/imap.mjs +136 -0
- package/plugins/email/inbox.d.mts +25 -0
- package/plugins/email/inbox.mjs +76 -0
- package/plugins/email/smtp.mjs +70 -0
- package/plugins/email/store.mjs +32 -0
- package/plugins/email-tools/index.mjs +46 -0
- package/plugins/exec/cli.mjs +64 -0
- package/plugins/exec/index.mjs +112 -0
- package/plugins/grok/adapter.mjs +114 -0
- package/plugins/grok/auth.mjs +76 -0
- package/plugins/grok/billing.mjs +147 -0
- package/plugins/grok/index.mjs +123 -0
- package/plugins/grok/models.mjs +129 -0
- package/plugins/grok/status.mjs +29 -0
- package/plugins/grok/wire.mjs +268 -0
- package/plugins/hub/catalog.mjs +82 -0
- package/plugins/hub/desktop-client.mjs +114 -0
- package/plugins/hub/desktop-host.mjs +129 -0
- package/plugins/i18n/messages.d.mts +21 -0
- package/plugins/i18n/messages.mjs +537 -0
- package/plugins/jev/approval.mjs +131 -0
- package/plugins/jev/client.mjs +74 -0
- package/plugins/jev/index.mjs +100 -0
- package/plugins/memory/content.mjs +57 -0
- package/plugins/memory/desktop-host.mjs +3 -0
- package/plugins/memory/index.mjs +168 -0
- package/plugins/memory/pipeline.mjs +79 -0
- package/plugins/memory/store.mjs +93 -0
- package/plugins/message-source/kind.mjs +20 -0
- package/plugins/opencode-go/adapter.mjs +96 -0
- package/plugins/opencode-go/command.mjs +128 -0
- package/plugins/opencode-go/index.mjs +121 -0
- package/plugins/opencode-go/models.mjs +58 -0
- package/plugins/opencode-go/oauth.mjs +194 -0
- package/plugins/opencode-go/search.mjs +86 -0
- package/plugins/opencode-go/usage.mjs +120 -0
- package/plugins/opencode-go/version.mjs +10 -0
- package/plugins/opencode-go/wire.mjs +73 -0
- package/plugins/openrouter/adapter.mjs +232 -0
- package/plugins/openrouter/index.mjs +124 -0
- package/plugins/openrouter/models.mjs +157 -0
- package/plugins/openrouter/search.mjs +113 -0
- package/plugins/openrouter/wire.mjs +101 -0
- package/plugins/providers/catalog.mjs +160 -0
- package/plugins/providers/chat-messages.mjs +120 -0
- package/plugins/providers/chat-stream.mjs +174 -0
- package/plugins/providers/desktop-client.mjs +84 -0
- package/plugins/providers/desktop-host.mjs +63 -0
- package/plugins/providers/effort.mjs +35 -0
- package/plugins/providers/http-errors.mjs +50 -0
- package/plugins/providers/openrouter-account.mjs +171 -0
- package/plugins/session-bridge/client.mjs +106 -0
- package/plugins/session-bridge/communication.mjs +260 -0
- package/plugins/session-bridge/index.mjs +67 -0
- package/plugins/session-bridge/mailbox.mjs +267 -0
- package/plugins/session-bridge/paths.mjs +21 -0
- package/plugins/session-bridge/server.mjs +172 -0
- package/plugins/session-bridge/tasks.mjs +229 -0
- package/plugins/session-cards/content.mjs +64 -0
- package/plugins/session-cards/index.mjs +38 -0
- package/plugins/session-cards/manager.mjs +140 -0
- package/plugins/session-metrics/attribution.mjs +30 -0
- package/plugins/session-metrics/balance.mjs +81 -0
- package/plugins/session-metrics/desktop-client.mjs +62 -0
- package/plugins/session-metrics/desktop-host.mjs +46 -0
- package/plugins/session-metrics/index.mjs +97 -0
- package/plugins/session-metrics/pricing.mjs +84 -0
- package/plugins/session-metrics/rate.mjs +59 -0
- package/plugins/session-metrics/store.mjs +75 -0
- package/plugins/session-metrics/turns.mjs +134 -0
- package/plugins/session-metrics/view.mjs +272 -0
- package/plugins/time-marks/desktop-host.mjs +2 -0
- package/plugins/time-marks/index.mjs +116 -0
- package/plugins/time-marks/marks.mjs +152 -0
- package/plugins/triggers/cli.mjs +558 -0
- package/plugins/triggers/commands.mjs +143 -0
- package/plugins/triggers/config.mjs +264 -0
- package/plugins/triggers/desktop-client.mjs +155 -0
- package/plugins/triggers/desktop-host.mjs +88 -0
- package/plugins/triggers/desktop-management.mjs +97 -0
- package/plugins/triggers/desktop-scheduler.mjs +125 -0
- package/plugins/triggers/host.mjs +24 -0
- package/plugins/triggers/index.mjs +27 -0
- package/plugins/triggers/job-cli.mjs +110 -0
- package/plugins/triggers/jobs.mjs +156 -0
- package/plugins/triggers/launchd.mjs +101 -0
- package/plugins/triggers/lease.mjs +24 -0
- package/plugins/triggers/log.mjs +104 -0
- package/plugins/triggers/management.mjs +181 -0
- package/plugins/triggers/options.mjs +117 -0
- package/plugins/triggers/overlay.mjs +7 -0
- package/plugins/triggers/poll.mjs +65 -0
- package/plugins/triggers/run.mjs +157 -0
- package/plugins/triggers/schedule.mjs +40 -0
- package/plugins/triggers/scheduler-service.mjs +46 -0
- package/plugins/triggers/scheduler.mjs +92 -0
- package/plugins/triggers/session-run.mjs +125 -0
- package/plugins/triggers/session.mjs +48 -0
- package/plugins/triggers/source-emit.mjs +19 -0
- package/plugins/triggers/source-host.mjs +78 -0
- package/plugins/triggers/source-ingress.mjs +70 -0
- package/plugins/triggers/source-sandbox.mjs +35 -0
- package/plugins/triggers/sources.mjs +45 -0
- package/plugins/triggers/spool.mjs +145 -0
- package/plugins/triggers/tools.mjs +67 -0
- package/plugins/triggers/unattended.mjs +18 -0
- package/plugins/tui-tools/composition.mjs +28 -0
- package/plugins/tui-tools/desktop-host.mjs +2 -0
- package/plugins/tui-tools/doctor-cli.mjs +22 -0
- package/plugins/tui-tools/doctor.mjs +149 -0
- package/plugins/tui-tools/hook-sources.mjs +113 -0
- package/plugins/tui-tools/hooks.mjs +23 -0
- package/plugins/tui-tools/index.mjs +269 -0
- package/plugins/tui-tools/sandbox-runner.mjs +123 -0
- package/plugins/tui-tools/shell.mjs +27 -0
- package/plugins/tui-tools/update.mjs +111 -0
- package/plugins/tui-tools/workspace-discovery.mjs +129 -0
- package/plugins/ultra/policy.mjs +42 -0
- package/plugins/worktree-subagent/worktree.mjs +56 -0
- package/runtime-sources.json +94 -0
- package/vendor/bash/LICENSE +21 -0
- package/vendor/bash/index.js +717 -0
- package/vendor/bash/types/background.d.ts +50 -0
- package/vendor/bash/types/index.d.ts +38 -0
- package/vendor/bash/types/render.d.ts +57 -0
- package/vendor/command-goal/LICENSE +21 -0
- package/vendor/command-goal/index.js +210 -0
- package/vendor/command-goal/types/index.d.ts +10 -0
- package/vendor/computer-use/LICENSE +21 -0
- package/vendor/computer-use/lib/approval-policy.js +12 -0
- package/vendor/computer-use/lib/approval-policy.js.map +1 -0
- package/vendor/computer-use/lib/artifacts.js +79 -0
- package/vendor/computer-use/lib/artifacts.js.map +1 -0
- package/vendor/computer-use/lib/backend.js +3 -0
- package/vendor/computer-use/lib/backend.js.map +1 -0
- package/vendor/computer-use/lib/client.js +369 -0
- package/vendor/computer-use/lib/client.js.map +1 -0
- package/vendor/computer-use/lib/config.js +159 -0
- package/vendor/computer-use/lib/config.js.map +1 -0
- package/vendor/computer-use/lib/confirmations.js +99 -0
- package/vendor/computer-use/lib/confirmations.js.map +1 -0
- package/vendor/computer-use/lib/diff.js +58 -0
- package/vendor/computer-use/lib/diff.js.map +1 -0
- package/vendor/computer-use/lib/errors.js +22 -0
- package/vendor/computer-use/lib/errors.js.map +1 -0
- package/vendor/computer-use/lib/exposure.js +244 -0
- package/vendor/computer-use/lib/exposure.js.map +1 -0
- package/vendor/computer-use/lib/index.js +66 -0
- package/vendor/computer-use/lib/index.js.map +1 -0
- package/vendor/computer-use/lib/leases.js +262 -0
- package/vendor/computer-use/lib/leases.js.map +1 -0
- package/vendor/computer-use/lib/providers/macos.js +243 -0
- package/vendor/computer-use/lib/providers/macos.js.map +1 -0
- package/vendor/computer-use/lib/providers/native-helper.js +726 -0
- package/vendor/computer-use/lib/providers/native-helper.js.map +1 -0
- package/vendor/computer-use/lib/providers/unsupported.js +51 -0
- package/vendor/computer-use/lib/providers/unsupported.js.map +1 -0
- package/vendor/computer-use/lib/service.js +608 -0
- package/vendor/computer-use/lib/service.js.map +1 -0
- package/vendor/computer-use/lib/skill.js +136 -0
- package/vendor/computer-use/lib/skill.js.map +1 -0
- package/vendor/computer-use/lib/target-resolver.js +180 -0
- package/vendor/computer-use/lib/target-resolver.js.map +1 -0
- package/vendor/computer-use/lib/tools.js +511 -0
- package/vendor/computer-use/lib/tools.js.map +1 -0
- package/vendor/computer-use/lib/types/approval-policy.d.ts +13 -0
- package/vendor/computer-use/lib/types/approval-policy.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/artifacts.d.ts +10 -0
- package/vendor/computer-use/lib/types/artifacts.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/backend.d.ts +124 -0
- package/vendor/computer-use/lib/types/backend.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/client/index.d.ts +83 -0
- package/vendor/computer-use/lib/types/client/index.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/config.d.ts +94 -0
- package/vendor/computer-use/lib/types/config.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/confirmations.d.ts +23 -0
- package/vendor/computer-use/lib/types/confirmations.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/diff.d.ts +5 -0
- package/vendor/computer-use/lib/types/diff.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/errors.d.ts +15 -0
- package/vendor/computer-use/lib/types/errors.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/exposure.d.ts +30 -0
- package/vendor/computer-use/lib/types/exposure.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/index.d.ts +21 -0
- package/vendor/computer-use/lib/types/index.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/leases.d.ts +81 -0
- package/vendor/computer-use/lib/types/leases.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/providers/macos.d.ts +39 -0
- package/vendor/computer-use/lib/types/providers/macos.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/providers/native-helper.d.ts +48 -0
- package/vendor/computer-use/lib/types/providers/native-helper.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/providers/unsupported.d.ts +23 -0
- package/vendor/computer-use/lib/types/providers/unsupported.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/service.d.ts +58 -0
- package/vendor/computer-use/lib/types/service.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/skill.d.ts +14 -0
- package/vendor/computer-use/lib/types/skill.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/target-resolver.d.ts +38 -0
- package/vendor/computer-use/lib/types/target-resolver.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/tools.d.ts +6 -0
- package/vendor/computer-use/lib/types/tools.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/types.d.ts +270 -0
- package/vendor/computer-use/lib/types/types.d.ts.map +1 -0
- package/vendor/computer-use/lib/types/web.d.ts +33 -0
- package/vendor/computer-use/lib/types/web.d.ts.map +1 -0
- package/vendor/computer-use/lib/types.js +9 -0
- package/vendor/computer-use/lib/types.js.map +1 -0
- package/vendor/computer-use/lib/web.js +188 -0
- package/vendor/computer-use/lib/web.js.map +1 -0
- package/vendor/computer-use/native/macos/Sources/Fixture/main.swift +412 -0
- package/vendor/computer-use/native/macos/Sources/Helper/CursorImage.swift +11 -0
- package/vendor/computer-use/native/macos/Sources/Helper/CursorMotion.swift +67 -0
- package/vendor/computer-use/native/macos/Sources/Helper/CursorOverlay.swift +840 -0
- package/vendor/computer-use/native/macos/Sources/Helper/TargetedPointer.swift +327 -0
- package/vendor/computer-use/native/macos/Sources/Helper/WindowNumberMatcher.swift +29 -0
- package/vendor/computer-use/native/macos/Sources/Helper/main.swift +1244 -0
- package/vendor/computer-use/native/macos/Sources/Monitor/main.swift +153 -0
- package/vendor/computer-use/native/macos/bin/dsh-computer-use-helper +0 -0
- package/vendor/computer-use/native/macos/manifest.json +14 -0
- package/vendor/persistent/LICENSE +21 -0
- package/vendor/persistent/index.js +411 -0
- package/vendor/persistent/types/index.d.ts +24 -0
- package/vendor/subagent/LICENSE +21 -0
- package/vendor/subagent/index.js +694 -0
- package/vendor/subagent/invariant.js +52 -0
- package/vendor/subagent/model-selection-settings.js +68 -0
- package/vendor/subagent/types/index.d.ts +82 -0
- package/vendor/subagent/types/invariant.d.ts +16 -0
- package/vendor/subagent/types/list-models.d.ts +10 -0
- package/vendor/subagent/types/model-selection-settings.d.ts +45 -0
- package/vendor/subagent/types/model-selection-state.d.ts +48 -0
- package/vendor/subagent/types/model-selection.d.ts +81 -0
- package/vendor/subagent-core/LICENSE +21 -0
- package/vendor/subagent-core/index.js +3202 -0
- package/vendor/subagent-core/invariant.js +76 -0
- package/vendor/subagent-core/typert.host.d.ts +3 -0
- package/vendor/subagent-core/typert.host.js +978 -0
- package/vendor/subagent-core/typert.remote-client.d.ts +25 -0
- package/vendor/subagent-core/typert.remote-client.js +114 -0
- package/vendor/subagent-core/types/archive-admission.d.ts +16 -0
- package/vendor/subagent-core/types/archive-admission.js +151 -0
- package/vendor/subagent-core/types/assistant-output.d.ts +48 -0
- package/vendor/subagent-core/types/assistant-output.js +73 -0
- package/vendor/subagent-core/types/catalog.d.ts +84 -0
- package/vendor/subagent-core/types/catalog.js +109 -0
- package/vendor/subagent-core/types/child-agent.d.ts +156 -0
- package/vendor/subagent-core/types/child-agent.js +213 -0
- package/vendor/subagent-core/types/client.d.ts +8 -0
- package/vendor/subagent-core/types/client.js +7 -0
- package/vendor/subagent-core/types/continuation-activation.d.ts +267 -0
- package/vendor/subagent-core/types/continuation-activation.js +700 -0
- package/vendor/subagent-core/types/continuation-messages.d.ts +62 -0
- package/vendor/subagent-core/types/continuation-messages.js +106 -0
- package/vendor/subagent-core/types/continuation.d.ts +124 -0
- package/vendor/subagent-core/types/continuation.js +455 -0
- package/vendor/subagent-core/types/control-types.d.ts +135 -0
- package/vendor/subagent-core/types/control-types.js +8 -0
- package/vendor/subagent-core/types/control.d.ts +45 -0
- package/vendor/subagent-core/types/control.js +79 -0
- package/vendor/subagent-core/types/depth.d.ts +31 -0
- package/vendor/subagent-core/types/depth.js +39 -0
- package/vendor/subagent-core/types/descriptor.d.ts +144 -0
- package/vendor/subagent-core/types/descriptor.js +193 -0
- package/vendor/subagent-core/types/error.d.ts +11 -0
- package/vendor/subagent-core/types/error.js +14 -0
- package/vendor/subagent-core/types/inbox.d.ts +43 -0
- package/vendor/subagent-core/types/inbox.js +61 -0
- package/vendor/subagent-core/types/index.d.ts +320 -0
- package/vendor/subagent-core/types/index.js +475 -0
- package/vendor/subagent-core/types/internal.d.ts +58 -0
- package/vendor/subagent-core/types/internal.js +58 -0
- package/vendor/subagent-core/types/invariant.d.ts +13 -0
- package/vendor/subagent-core/types/invariant.js +91 -0
- package/vendor/subagent-core/types/lifecycle.d.ts +113 -0
- package/vendor/subagent-core/types/lifecycle.js +180 -0
- package/vendor/subagent-core/types/list-children.d.ts +36 -0
- package/vendor/subagent-core/types/list-children.js +166 -0
- package/vendor/subagent-core/types/out-of-process.d.ts +118 -0
- package/vendor/subagent-core/types/out-of-process.js +219 -0
- package/vendor/subagent-core/types/projection-types.d.ts +82 -0
- package/vendor/subagent-core/types/projection-types.js +7 -0
- package/vendor/subagent-core/types/projection.d.ts +100 -0
- package/vendor/subagent-core/types/projection.js +157 -0
- package/vendor/subagent-core/types/run-settlement.d.ts +17 -0
- package/vendor/subagent-core/types/run-settlement.js +70 -0
- package/vendor/subagent-core/types/types.d.ts +377 -0
- package/vendor/subagent-core/types/types.js +19 -0
- package/vendor/subagent-driver/LICENSE +21 -0
- package/vendor/subagent-driver/index.js +255 -0
- package/vendor/subagent-driver/types/index.d.ts +33 -0
- package/vendor/subagent-driver/types/structured.d.ts +42 -0
- package/vendor/subagent-fork/LICENSE +21 -0
- package/vendor/subagent-fork/index.js +61 -0
- package/vendor/subagent-fork/types/index.d.ts +20 -0
- package/vendor/subagent-spawn/LICENSE +21 -0
- package/vendor/subagent-spawn/index.js +45 -0
- package/vendor/subagent-spawn/types/index.d.ts +19 -0
- package/vendor/terminal/LICENSE +21 -0
- package/vendor/terminal/index.js +1093 -0
- package/vendor/terminal/types/config.d.ts +82 -0
- package/vendor/terminal/types/index.d.ts +36 -0
- package/vendor/terminal/types/sanitize.d.ts +47 -0
- package/vendor/terminal/types/session.d.ts +87 -0
package/docs/memory.md
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# DSCODE global memory
|
|
2
|
+
|
|
3
|
+
Global cross-session memory was added in DSCODE 0.2.0.
|
|
4
|
+
|
|
5
|
+
Memory is stored across projects and sessions and shared within one DSCODE state directory. The workspace path and the source session are kept; project experience is not automatically promoted to other projects. It works separately from resume (restoring a full session), compaction (compressing the current context) and project instruction files.
|
|
6
|
+
|
|
7
|
+
## Usage
|
|
8
|
+
|
|
9
|
+
Reading and background generation are on by default. A new root session schedules history consolidation when it first produces a model request configuration, and from then on it tries once every 30 minutes; it never holds the user's reply back waiting for consolidation. Exiting the process cancels the background task and the next run continues it. Having no history memory on first use is normal.
|
|
10
|
+
|
|
11
|
+
| Command | Behaviour |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `/memories` or `/memories status` | Path, switches, background state, entry count, memory model calls and token usage |
|
|
14
|
+
| `/memories off` / `on` | Disables / enables reading and further contribution for the current session; survives a session resume |
|
|
15
|
+
| `/memories global-off` / `global-on` | Persistently turns global reading and generation off / on; a disable in the configuration file still wins |
|
|
16
|
+
| `/memories run` | Schedules one background consolidation immediately, still under the idle, count and age limits |
|
|
17
|
+
| `/memories note answer in Chinese` | Adds an explicit preference or correction for the next consolidation; text is added, never executed |
|
|
18
|
+
| `/memories clear` | Clears the global generated results and the input memory; sessions created before the clear are no longer used for regeneration |
|
|
19
|
+
|
|
20
|
+
`off` does not erase experience that was already consolidated; use `clear` to delete all old memory. Toggling a switch does not delete what is already in the current conversation either, so complete isolation needs a new session. `/clear` still clears the conversation, which is not the same as clearing global memory.
|
|
21
|
+
|
|
22
|
+
The model automatically receives only a summary of at most 6000 characters. When historical experience is needed, use `memory_search` to find entries, procedures and source-session summaries; it returns session IDs, workspaces and original message sequence numbers. Simple tasks skip retrieval. Memory is not proof of the current code state.
|
|
23
|
+
|
|
24
|
+
## Experimental Desktop package
|
|
25
|
+
|
|
26
|
+
The [combined Desktop package](browser-use.md#install-the-experimental-combined-desktop-package)
|
|
27
|
+
includes this memory service. It uses the same `/memories` commands and
|
|
28
|
+
`memory_search` tool; there is no separate memory settings panel. Only DSCODE
|
|
29
|
+
agents receive the summary and retrieval tool. Native Standard sessions cannot
|
|
30
|
+
change memory through `/memories`; their history and child-agent history are
|
|
31
|
+
excluded from extraction. A child DSCODE agent also respects its parent's
|
|
32
|
+
session reading opt-out.
|
|
33
|
+
|
|
34
|
+
Desktop stores memory under its own state directory by default, usually separate
|
|
35
|
+
from the terminal installation. Sharing credentials does not share memory.
|
|
36
|
+
Setting the same `DSCODE_MEMORY_HOME` shares the memory database, including global
|
|
37
|
+
switches, notes and cleanup, between those installations. Extraction still reads
|
|
38
|
+
the current Host's session history.
|
|
39
|
+
|
|
40
|
+
Session and global switches, consolidated memory and source evidence survive a
|
|
41
|
+
Host restart. Unloading the memory plugin cancels an in-flight generation,
|
|
42
|
+
releases its leases and removes its tool and prompt from open agents. The files
|
|
43
|
+
remain on disk, and reloading restores access for open DSCODE agents. Removing
|
|
44
|
+
the whole package takes effect after quitting and restarting the application;
|
|
45
|
+
use `/memories clear` first if you also want to delete generated memory.
|
|
46
|
+
|
|
47
|
+
The packed service was checked on `0.2.1-alpha.1` and the signed macOS
|
|
48
|
+
`0.2.0-rc.2` Electron Desktop Host with deterministic local inference. These
|
|
49
|
+
checks cover generation, source evidence, parent opt-out, restart, cancellation,
|
|
50
|
+
live-plugin reload and cost attribution across interleaved sessions. They do not establish live-model memory quality or
|
|
51
|
+
renderer interaction with the slash commands.
|
|
52
|
+
|
|
53
|
+
## Two-stage implementation
|
|
54
|
+
|
|
55
|
+
1. Read the historical JSONL from the existing `sessionPersistence` service. Child agents, non-dscode sessions, active sessions, sessions with contribution switched off and oversized logs are skipped. Only original user messages and visible assistant text are extracted: thinking, tool payloads and injected system information are not read.
|
|
56
|
+
2. An independent model request extracts `raw_memory`, `rollout_summary` and evidence message sequence numbers. JSON, field lengths and source ranges are validated, and common secret formats in the input and output are redacted. With no usable experience it may return an empty result. A failure records exponential backoff; a success records the matching source version.
|
|
57
|
+
3. Retained experience is selected by use count and recency, explicit user notes are added, and a second independent model request merges entries and reusable procedures. The model call is skipped when no input changed.
|
|
58
|
+
4. After the source IDs referenced by the output are validated, a SQLite snapshot is published and a readable Markdown file is generated. Retrieval and summarisation use the database snapshot; an interrupted file generation can be repaired by the next consolidation.
|
|
59
|
+
|
|
60
|
+
A SQLite lease coordinates multiple processes and the background holds a heartbeat; a source session under recovery, an expired lease and a clear operation all stop an old result from committing. The consolidation model has no shell, MCP, file-write or delegation tools, and file paths are determined by the plugin.
|
|
61
|
+
|
|
62
|
+
Directory resolution order: plugin `root` → `DSCODE_MEMORY_HOME` → the native Harness home plus `memories`. Harness resolves a nonblank `DSH_HOME` (including supported tilde paths), otherwise `~/.dsh`. A source launch normally sets the project's `.runtime` as that home; the npm launcher maps its `DSCODE_HOME` into `DSH_HOME`. To share memory between installations, set the same `DSCODE_MEMORY_HOME` explicitly. Version 0.7.34 does not automatically move memory left in an earlier fallback directory.
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
memories/
|
|
66
|
+
state.sqlite # job version, lease, switches, notes, authoritative snapshot and usage
|
|
67
|
+
memory_summary.md # condensed summary
|
|
68
|
+
MEMORY.md # experience handbook with sources
|
|
69
|
+
raw_memories.md # currently retained per-session extraction results
|
|
70
|
+
rollout_summaries/*.md # session summaries, with message sequence numbers
|
|
71
|
+
skills/*/SKILL.md # consolidated reusable procedures, retrieved on demand
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
These Markdown files are generated artifacts and manual edits are overwritten; submit corrections through `/memories note`. The generation flow returns to the agent as text and is never installed automatically as a skill with execution permission.
|
|
75
|
+
|
|
76
|
+
## Configuration and cost
|
|
77
|
+
|
|
78
|
+
A source install overrides the existing plugin configuration in `config/harness.local.yml`; a released package can override the same entry ID through a DSH profile overlay:
|
|
79
|
+
|
|
80
|
+
```yaml
|
|
81
|
+
- id: dscode-memory
|
|
82
|
+
config:
|
|
83
|
+
generate: true
|
|
84
|
+
use: true
|
|
85
|
+
minIdleHours: 6
|
|
86
|
+
maxAgeDays: 30
|
|
87
|
+
maxPerRun: 16
|
|
88
|
+
maxCandidates: 32
|
|
89
|
+
maxUnusedDays: 30
|
|
90
|
+
extractEffort: low
|
|
91
|
+
consolidationEffort: high
|
|
92
|
+
timeoutMs: 90000
|
|
93
|
+
# optional, and both are required together; otherwise the triggering session's provider/model is used.
|
|
94
|
+
# provider: deepseek-official
|
|
95
|
+
# model: deepseek-flash
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Extraction and consolidation efforts are set independently, and neither inherits ultra. Each run does at most 16 per-session requests and 1 consolidation request, executed in order; input and output are both length-bounded, and a single model request has a 90-second default timeout. A missing usable provider, an unsupported configured effort or a network failure never affects the foreground; the background keeps the failure state and retries.
|
|
99
|
+
|
|
100
|
+
Background generation incurs extra API usage. `/memories` reports its aggregate
|
|
101
|
+
usage, and the initiating session's cost ledger records each call with purpose
|
|
102
|
+
`memory`. Automatic work belongs to the root session that scheduled it; manual
|
|
103
|
+
`run` and `note` belong to their invoking session, even before its first model
|
|
104
|
+
request. A run keeps that owner and model route through extraction and
|
|
105
|
+
consolidation. Starting another session or closing the owner does not transfer
|
|
106
|
+
in-flight costs. Periodic work uses the latest scheduled route and attributes a
|
|
107
|
+
new run only when that remembered session is still live. A request arriving while
|
|
108
|
+
the worker is busy updates the preference for a later run; it does not start a
|
|
109
|
+
second worker or change the current run's attribution. These auxiliary requests
|
|
110
|
+
do not carry the foreground session ID to the model provider.
|
|
111
|
+
|
|
112
|
+
This is DSCODE's implementation of the two-stage architecture borrowed from Codex, not a line-by-line port: an input fingerprint replaces the Git diff, and a tool-free structured model request replaces the consolidation agent that can edit a directory. There is currently no Codex-style provider remaining-quota gate, and redaction covers only common secret formats; what reaches the model is filtered historical session content. Generation can be switched off globally while reading existing memory is kept.
|
|
113
|
+
|
|
114
|
+
## Verification
|
|
115
|
+
|
|
116
|
+
```sh
|
|
117
|
+
node --test tests/memory.test.mjs
|
|
118
|
+
node scripts/verify-memory.mjs
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
The first covers source filtering, evidence validation, the lease, backoff, clear races and the reading switch. The second loads a real Harness in a temporary profile and uses real JSONL storage plus the local deterministic LLM adapter to check the full two-stage flow and prompt injection. It does not reach a remote model and is not an acceptance of real-model extraction quality or billing.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# OpenCode Go
|
|
2
|
+
|
|
3
|
+
DSCODE can run a session on an [OpenCode Go](https://opencode.ai/docs/go/) subscription: $10 a month for open coding models. You sign in with your OpenCode account; there is no API key to paste. The route is `opencode-go`, next to DeepSeek, OpenRouter and Grok.
|
|
4
|
+
|
|
5
|
+
## Setting it up
|
|
6
|
+
|
|
7
|
+
1. Enter `/opencode login`. DSCODE shows a code and opens the OpenCode console in your browser.
|
|
8
|
+
2. Approve the code there. The page names the **OpenCode CLI**: DSCODE signs in through the OpenCode CLI's login client, so this is expected. The command answers at once and keeps waiting in the background for up to ten minutes; `/opencode` shows how it ended.
|
|
9
|
+
3. Enter `/provider opencode-go`. `/model` picks among the Go models and `/effort` sets their reasoning.
|
|
10
|
+
|
|
11
|
+
`/provider opencode-go` (or `/provider opencode`) before signing in, and `/login opencode-go`, point you to `/opencode login` instead of asking for a key.
|
|
12
|
+
|
|
13
|
+
**Upgrading from 0.7.31**, which used a console API key: that key is no longer read. Run `/opencode login` once. The stored `OPENCODE_API_KEY` stays in `~/.dscode/credentials.yaml` unused until you remove it.
|
|
14
|
+
|
|
15
|
+
## The account login
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
/opencode status: who is signed in, or how the last attempt ended
|
|
19
|
+
/opencode login show a code, open the browser, and sign in in the background
|
|
20
|
+
/opencode cancel stop waiting for the current code
|
|
21
|
+
/opencode logout remove the login from this machine
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
- DSCODE keeps its own login, stored as `OPENCODE_OAUTH` in `~/.dscode/credentials.yaml`. It is separate from any `opencode auth login` on the same machine, and signing in or out of one does not affect the other.
|
|
25
|
+
- The login picks the first organisation (by name) with a Go subscription. Requests go to the inference endpoint the OpenCode console names for that organisation. The public `zen/go/v1` endpoint accepts only console API keys, not the login.
|
|
26
|
+
- The access token lasts 30 days and renews itself before it expires. Each renewal replaces the refresh token, and the new one is written back at once. Several DSCODE sessions share the login: when one has renewed first, the others pick up its token instead of failing.
|
|
27
|
+
- If the login is revoked or cannot be renewed, requests fail with a message asking for `/opencode login` again.
|
|
28
|
+
- `/opencode logout` only removes the local copy. The token stays valid on OpenCode until it expires; revoke it in the OpenCode console to end it immediately.
|
|
29
|
+
- The login client belongs to OpenCode, not DSCODE, so OpenCode can restrict it at any time. If it does, this route stops working until DSCODE supports another way in.
|
|
30
|
+
|
|
31
|
+
## The models
|
|
32
|
+
|
|
33
|
+
Go serves each model over the protocol of the lab that made it. This release speaks the OpenAI chat-completions protocol, which covers these models:
|
|
34
|
+
|
|
35
|
+
| Family | Models | Reasoning efforts | Images |
|
|
36
|
+
|---|---|---|---|
|
|
37
|
+
| DeepSeek | `deepseek-v4-pro`, `deepseek-v4-flash`, `deepseek-v4.1-flash`, `deepseek-v4-flash-vision-exp` | high, max, Ultra | V4.1 Flash and Vision Exp |
|
|
38
|
+
| GLM | `glm-5.3`, `glm-5.3-flash`, `glm-5.2`, `glm-5.1` | low, high, max, Ultra (thinking cannot be switched off) | `glm-5.3-flash` |
|
|
39
|
+
| Kimi | `kimi-k3`, `kimi-k2.6` | off, low, high, max, Ultra | yes |
|
|
40
|
+
| Kimi | `kimi-k2.7-code` | low, high, max, Ultra | yes |
|
|
41
|
+
| MiMo | `mimo-v2.6-pro`, `mimo-v2.6-flash` | off, low, high | yes |
|
|
42
|
+
| MiMo | `mimo-v2.5-pro`, `mimo-v2.5` | off, low, high, max, Ultra | `mimo-v2.5` |
|
|
43
|
+
| LongCat | `longcat-2.0` | low, high, max, Ultra | no |
|
|
44
|
+
| Hy | `hy4-preview`, `hy3` | off, low, high, max, Ultra | no |
|
|
45
|
+
| Space Bunny | `space-bunny-free` | low, high, max, Ultra | yes |
|
|
46
|
+
|
|
47
|
+
The default is `kimi-k3` at high effort. Switching from DeepSeek or OpenRouter lands on the same model when Go serves it, and keeps the effort when that model offers it.
|
|
48
|
+
|
|
49
|
+
**Not yet available**: Qwen and MiniMax (Go serves them over the Anthropic messages protocol) and Grok, GPT Luna and Muse Spark (the OpenAI responses protocol). Naming one of them, for example with `dscode exec --model`, fails before any request with a message saying so.
|
|
50
|
+
|
|
51
|
+
## What to know
|
|
52
|
+
|
|
53
|
+
- **DeepSeek needs the Global region.** Go serves its DeepSeek models only to workspaces set to Global. Until then a request fails with "This Go model requires Global regions"; change it under your workspace's Privacy settings in the OpenCode console.
|
|
54
|
+
- **Usage in the footer.** Go caps the subscription per rolling five hours, per week and per month. On this route the footer's money slot shows how much of each is used, read from the account's usage endpoint once a minute: `Go · 5h 12% · 7d 3% · 30d 1%`. An exhausted window is marked `!`, and the slot then says when requests work again (`limited until 09-25 14:45`). Before the first read, or if the usage cannot be read, it shows `Go` alone. There is no dollar cost: a subscription has no per-call price for DSCODE to add up.
|
|
55
|
+
- **Limits are Go's.** A request past a cap fails with Go's own error.
|
|
56
|
+
- **Web search** goes through [Exa](https://exa.ai)'s hosted search, as OpenCode's own client does, because Go has no search endpoint. It needs no key. Set `EXA_API_KEY` (in the environment or the credential store) to run the searches on your own Exa account. The keyless tier is Exa's free offer with no published limits, so a busy session can be rate-limited. Only Go sessions use Exa; the other routes search as before.
|
|
57
|
+
- **Session identity.** Each request carries the session id in `x-opencode-session` and a `dscode/<version>` user agent, as Go asks of third-party clients.
|
|
58
|
+
|
|
59
|
+
## Configuration
|
|
60
|
+
|
|
61
|
+
The route's settings live in the `dscode-opencode-go` profile entry: `streamIdleTimeoutMs`, `maxRequestImageBytes` and `retryPolicy`. The endpoint is not a setting: the login names it.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Plugin Hub in Harness Desktop
|
|
2
|
+
|
|
3
|
+
The DSCODE Desktop plugin includes **Settings → Plugin Hub**, backed by
|
|
4
|
+
[DSH Plugin Hub](https://dshpluginhub.ai). It uses the same public catalog as
|
|
5
|
+
the Hub website and CLI. No Hub login is required to browse.
|
|
6
|
+
|
|
7
|
+
## Find and inspect plugins
|
|
8
|
+
|
|
9
|
+
Enter a package name or describe a capability, optionally choose a category,
|
|
10
|
+
and select **Search**. **Load more plugins** continues the current search.
|
|
11
|
+
Open **View details** to read the description, repository, license, weekly
|
|
12
|
+
downloads, publisher indicators, reported security checks and declared
|
|
13
|
+
compatibility. The website link opens the corresponding Hub listing.
|
|
14
|
+
|
|
15
|
+
Publisher verification and a passing scan do not guarantee safety. Missing,
|
|
16
|
+
failed and incomplete scans remain visible. Compatibility declarations come
|
|
17
|
+
from the catalog; the official installer also checks the actual package.
|
|
18
|
+
|
|
19
|
+
In a DSCODE conversation, ask the agent to find a plugin. The read-only
|
|
20
|
+
`plugin_hub_search` and `plugin_hub_info` tools use the same catalog and Desktop
|
|
21
|
+
compatibility checks. These tools do not install plugins, change the Profile
|
|
22
|
+
or expose account credentials. Catalog descriptions are third-party data.
|
|
23
|
+
The native Standard preset does not receive these tools.
|
|
24
|
+
|
|
25
|
+
## Install and enable
|
|
26
|
+
|
|
27
|
+
1. Open the package details and choose **Review installation**.
|
|
28
|
+
2. Review the exact npm package, version and registry returned by the official
|
|
29
|
+
plugin manager, alongside the Hub's scan and compatibility information.
|
|
30
|
+
3. Choose **Confirm installation**. The official manager downloads the package
|
|
31
|
+
and dependencies. **Cancel installation** requests cancellation through that
|
|
32
|
+
manager; the displayed outcome determines whether it completed in time.
|
|
33
|
+
4. Select **Manage installed plugin**, then enable and configure it in the
|
|
34
|
+
official **Settings → Plugins** page.
|
|
35
|
+
|
|
36
|
+
Installation leaves the plugin disabled. Enabling third-party plugins runs
|
|
37
|
+
their code in the Host. Build-script approvals, enable/disable, configuration
|
|
38
|
+
and removal remain with the official plugin manager. When it reports a failure,
|
|
39
|
+
cancellation, override or restart requirement, the Hub preserves that outcome.
|
|
40
|
+
It does not report every completed package command as successful activation.
|
|
41
|
+
|
|
42
|
+
An installation preview expires after five minutes. Reopen the preview if it
|
|
43
|
+
expires. Closing and reopening the Hub page recovers the latest operation while
|
|
44
|
+
the same Host remains running. After a Host restart, check **Plugins** before
|
|
45
|
+
retrying; the Hub's operation history is not persisted.
|
|
46
|
+
|
|
47
|
+
## Current boundaries
|
|
48
|
+
|
|
49
|
+
- The first integration installs the catalog's latest exact npm version. It
|
|
50
|
+
checks DSH and Node ranges, platform, interface support, withdrawal and
|
|
51
|
+
deprecation. Git/tarball-only entries remain discoverable but are not installed
|
|
52
|
+
through this integration.
|
|
53
|
+
- Already available bundles link to official management. This page does not
|
|
54
|
+
replace them, select older versions, check for updates or roll back a Profile.
|
|
55
|
+
- Searches cover the community catalog, including packages for other Harness
|
|
56
|
+
interfaces. Details explain when a package does not fit this Desktop.
|
|
57
|
+
- The DSCODE terminal package and Desktop package are separate entries. A
|
|
58
|
+
terminal-only package is not made Desktop-compatible by appearing in search.
|
|
59
|
+
- Search queries and package lookups go to `api.dshpluginhub.ai`. Provider keys,
|
|
60
|
+
conversation text, workspace files and local credentials are not sent by this
|
|
61
|
+
catalog client. The agent may include task terms in a query you ask it to make.
|
|
62
|
+
- The Desktop plugin is published as `@toddzheng024/dscode-desktop@0.7.34`
|
|
63
|
+
on npm, with the `preview` tag. Official Add plugin installation, Hub installation with
|
|
64
|
+
handoff to official management, and migration from the legacy probe name
|
|
65
|
+
have passed on macOS Desktop 0.2.0-rc.2.
|
|
66
|
+
|
|
67
|
+
See [Desktop installation](browser-use.md#install-the-experimental-combined-desktop-package)
|
|
68
|
+
and [distribution](hub-distribution.md) for package setup and release status.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# DSCODE 0.2.0
|
|
2
|
+
|
|
3
|
+
This update connects the TUI, CLI, scripts and other agents to one session runtime, and offers a clearer terminal status display.
|
|
4
|
+
|
|
5
|
+
- Session communication: built-in `list_sessions`, `read_session`, `send_session` and `reply_session`; queue / steer / defer, a persisted mailbox, retry de-duplication, cancellation and a finite communication budget. Only a loaded root session in the same state directory is reachable, and an offline session is never started automatically.
|
|
6
|
+
- Descriptive cards: project, workspace and recent user topics; task conclusions are never recorded.
|
|
7
|
+
- Global memory: background extraction, consolidation and retrieval with source tracking, plus global and per-session switches. Background extraction causes extra model calls; see the memory documentation.
|
|
8
|
+
- Input and resume: `!` shell, Shift+Enter newline, `dscode resume`, a resume hint on exit, and CJK input cursor positioning.
|
|
9
|
+
- TUI: a compact header, a unified run status, a sub-agent activity overview and de-emphasised cost/context/cache figures; thinking and tool-call history are hidden by default.
|
|
10
|
+
- Ultra: keeps native max reasoning and delegates as the task needs; a parent agent can choose a separate effort for each child.
|
|
11
|
+
- Compatibility: the recommended Harness composition is pinned; the npm launcher only prints a warning for another composition and keeps starting.
|
|
12
|
+
|
|
13
|
+
## Install and upgrade
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
npm install -g @toddzheng024/dscode@0.2.0
|
|
17
|
+
dscode
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
A user who already has an npm/Hub profile has to run `dscode update 0.2.0` separately. Exit running processes before upgrading; `dscode history` and `dscode rollback` manage profile revisions. A program rollback is not a data-format rollback.
|
|
21
|
+
|
|
22
|
+
The recommended Harness is still `0.1.5-rc.1` and the upstream TUI is `dsh-code@1.0.6`. macOS 14+, Node 22.19+ (22.x) or 24+ are supported.
|
|
23
|
+
|
|
24
|
+
## Verification scope
|
|
25
|
+
|
|
26
|
+
70 regression tests; the real Ink dark and light themes rendered at 32/48/80/120 columns; an isolated TUI launch, CJK text and Shift+Enter; the native session write lock, reads and crash recovery. Before release, a temporary install of the npm tarball separately verified the agent, session communication, cards, memory, a failed upgrade and rollback.
|
|
27
|
+
|
|
28
|
+
The model integration checks use a deterministic local adapter. Remote model quality, the human experience of the system input-method candidate window, and real browser and desktop control are outside this verification scope. A claimed message cannot be guaranteed recalled.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# DSCODE 0.3.0
|
|
2
|
+
|
|
3
|
+
This release covers the login, terminal interaction and runtime improvements made after 0.2.0.
|
|
4
|
+
|
|
5
|
+
- `/login` saves a local DeepSeek key through a hidden input, loads it at startup and can reload it for the current session; an environment variable takes precedence.
|
|
6
|
+
- A horizontal effort bar with the Ultra animation, and a welcome box showing the version, model and project path.
|
|
7
|
+
- The composer is pinned to the bottom of the terminal and a long conversation uses an in-screen viewport; the full content stays viewable and exportable.
|
|
8
|
+
- A blank launch shows the composer first, and Chrome MCP connects when an agent session is created.
|
|
9
|
+
- Fixed `apply_patch` path handling inside a Git subdirectory.
|
|
10
|
+
- Hardened the startup and version-management locks and session message handling, and added the compaction evaluation tooling and an isolated test flow.
|
|
11
|
+
|
|
12
|
+
Upgrade:
|
|
13
|
+
|
|
14
|
+
```sh
|
|
15
|
+
npm install -g @toddzheng024/dscode@0.3.0
|
|
16
|
+
dscode update 0.3.0
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Release verification covers local deterministic tests, TUI rendering, packaging and the Hub install lifecycle. A real remote model, a browser and desktop control are not part of this release's acceptance; the CJK candidate-window position still needs confirmation in the user's terminal.
|
|
20
|
+
|
|
21
|
+
Known display issue: the welcome box may still show `v0.2.0`, because the build reused the already-patched welcome component. The installed version is authoritative through `dscode --version` and `dscode doctor`; both the npm package and the Hub profile here are `0.3.0`.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# DSCODE 0.4.0
|
|
2
|
+
|
|
3
|
+
Adds the Agent email system, which lets email add context to the current coding task.
|
|
4
|
+
|
|
5
|
+
- `/email` shows the local inbox shared by all sessions, ordered by update time, with CJK previews and narrow-window support.
|
|
6
|
+
- A Gmail app password connects IMAP and receives new mail whose subject starts with `[ToAgent]` after the first connection; an optional OAuth interface is retained.
|
|
7
|
+
- Pressing Enter on a selected message injects it into the current session whether it is idle or running. The JSON structure states explicitly that the user chose it and that it is supplementary context only.
|
|
8
|
+
- `send_email` sends plain text through Gmail SMTP, adds `[ToAgent]` automatically, reuses the existing approval and local credentials, and records the send result to prevent a duplicate send.
|
|
9
|
+
- Contact aliases are shared across sessions and can be managed by the agent or by `dscode email alias`; the approval shows the real address.
|
|
10
|
+
|
|
11
|
+
Exit DSCODE sessions using the same data directory before upgrading:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
npm install -g @toddzheng024/dscode@0.4.0
|
|
15
|
+
dscode update 0.4.0
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Inside `/email`, press `i` to configure the Gmail address and app password. Details are in [Email](../email.md). The mailbox and contacts are stored in `~/.dscode/email` and are never put into a release package.
|
|
19
|
+
|
|
20
|
+
Verification covers deterministic tests, the real local TLS IMAP/SMTP protocol, the TUI and the package install lifecycle. No mail was sent through a real Gmail account; an SMTP accepted means the server accepted it and does not guarantee the recipient received or read it. Sending currently supports only a Gmail app-password connection, with no attachments and no automatic replies.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# DSCODE 0.5.0
|
|
2
|
+
|
|
3
|
+
This release focuses on the coding agent's collaboration boundaries, code review and terminal interaction.
|
|
4
|
+
|
|
5
|
+
- The Ultra main agent can choose `worktree: true` in `subagent` or `subagent_fork`, so a child agent that needs to edit independently starts an isolated checkout from a clean Git `HEAD`. Sharing the directory remains the default; an isolated launch is refused while the main directory has uncommitted changes. A child agent never delegates to another child agent.
|
|
6
|
+
- `/review` and the agent's `review` tool start an independent, read-only model review of a named Git diff. After a code change passes its relevant checks the agent reviews once before ending and fixes concrete findings first. The staging area, a base branch, a single commit and a path range are optional; a repeated review of the same diff reuses its result.
|
|
7
|
+
- The TUI supports scrolling up through history. The first Ctrl+C during a run interrupts the agent immediately, and a second exits; a long paste collapses to a marker in the composer and expands fully in the conversation after submitting. A pasted image shows a marker such as `[Image 1]`, and several images are supported. A user message is presented with its own background, and turns are separated by a divider.
|
|
8
|
+
- An ordinary DeepSeek Flash agent request gets short task-proportional guidance: answer a simple question directly, and for a bounded code change finish the relevant checks and stop. Low, high and max reasoning do not start a child agent; only Ultra can start or wake one.
|
|
9
|
+
|
|
10
|
+
Exit DSCODE sessions using the same data directory before upgrading:
|
|
11
|
+
|
|
12
|
+
```sh
|
|
13
|
+
npm install -g @toddzheng024/dscode@0.5.0
|
|
14
|
+
dscode update 0.5.0
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`dscode-0.5.0.tar.gz` can also be downloaded from GitHub Releases to install the standalone source package. The two installation forms use different data directories and never migrate sessions or credentials automatically.
|
|
18
|
+
|
|
19
|
+
Verification covers unit, integration, TUI, package build, a real local Harness launch and Hub install/rollback. No paid model is called; review quality and image clipboard compatibility across terminals still need testing in real use.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# DSCODE 0.6.0
|
|
2
|
+
|
|
3
|
+
This release focuses on unattended runs, a readable identity for child agents, and the release experience.
|
|
4
|
+
|
|
5
|
+
- `dscode exec "prompt"` runs a complete dscode agent turn without opening the TUI: the same preset, tools, skills, MCP and memory. The reply streams to stdout, tool activity and the session id go to stderr, and the exit code reflects the turn's result. It supports a stdin prompt, `--json`, `--resume`, `--effort`, `--model`, `--permission`, `--approve-all` and `--timeout`. An approval request that would fall back to a human is denied by default when nobody is present.
|
|
6
|
+
- A parent agent must name every child agent (1 to 10 characters of letters, digits or underscores, starting and ending with a letter). A child agent shows as `/name · description` in the agents line and `/agents`; `send_message` and `interrupt_agent` accept `/name`, a child refers to its parent as `/`, and live children of one parent cannot share a name.
|
|
7
|
+
- The welcome box became a three-shade pixel snowflake, 24×24 on terminals of 26 rows or more and 22×22 on 24 to 25 rows; while the agent works the bottom activity line is a snowflake orbit animation; the turn divider spans the full line.
|
|
8
|
+
- Prompt tuning: the persona gained rules for reply language, the boundary between judging and asking, complete delivery and honest reporting; the shell policy keeps only a delegation summary and leaves the detail to the Ultra request policy; the email guidance no longer embeds real contacts.
|
|
9
|
+
- The publish script can read a granular npm token from the macOS keychain and hand it to npm through a one-off temporary config, with no login and no one-time code; `npm run publish:token store|check|remove` manages that token.
|
|
10
|
+
|
|
11
|
+
Exit DSCODE sessions using the same data directory before upgrading:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
npm install -g @toddzheng024/dscode@0.6.0
|
|
15
|
+
dscode update 0.6.0
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`dscode-0.6.0.tar.gz` can also be downloaded from GitHub Releases to install the standalone source package. The two installation forms use different data directories and never migrate sessions or credentials automatically.
|
|
19
|
+
|
|
20
|
+
Verification covers unit, integration (including an end-to-end exec probe with a fake model), TUI, package build, a real local Harness launch and Hub install/rollback. `dscode exec` was only smoke-tested against a real model with a single sentence; child-agent naming survives only for display in an old session after a restart, and `/name` addressing needs a child created in the same process.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# DSCODE 0.7.0
|
|
2
|
+
|
|
3
|
+
This release focuses on the everyday feel inside the terminal: language, copying, a visible thinking process, accurate rates, and a steadier review.
|
|
4
|
+
|
|
5
|
+
- `/language` switches the interface language: English (default), Simplified Chinese, Traditional Chinese, Japanese, Korean, Spanish. With no argument it opens an up/down selection panel, and with an argument it sets the language directly, accepting codes, names and common aliases. The choice is saved in `~/.dsh/dsh-code/language.json`, and `DSCODE_LANGUAGE` overrides it temporarily. The activity line, the agents line, welcome-box labels, footer telemetry labels, the composer placeholder, the various hints and the doctor report are all translated with it.
|
|
6
|
+
- Mouse capture is off by default, so the terminal can drag-select and copy directly and PageUp/PageDown scrolls the conversation; `/mouse` turns wheel scrolling on, with the choice saved on this machine.
|
|
7
|
+
- `/verbose` (or Ctrl/Alt+R) shows each step's `· Thinking:`, `· Tool Call:` and `Output:` in a dim colour with a blank line between blocks; thinking shows at most 8 lines and hints at Ctrl+O for the full history; the switch is saved on this machine.
|
|
8
|
+
- While the agent works the conversation area no longer reserves a fixed third for history: the live content takes only the lines it actually needs and history gets the rest. The busy line is a two-dot comet orbiting a snowflake that breathes with the orbit; the welcome box's pixel snowflake has an inward-to-outward ripple, following the `/animation` setting.
|
|
9
|
+
- The footer's `current` is computed from the generation time the window actually covers, so the first second after a tool call is a real rate, and it is calibrated with the exact outputTokens from each settled request; `average` became output tokens / total LLM call time, excluding tool execution and idle time. TPS colouring recognises labels in any language.
|
|
10
|
+
- The review tool returns `no_repository` in a non-Git workspace and no longer injects the review guidance; when a model finishes with a reason other than stop it retries once and then reports the provider's reason if it still fails; hitting the output ceiling returns partial rather than a failure, and the ceiling is raised to 8192; a review request no longer counts towards the live TPS.
|
|
11
|
+
- Release chain: the dsh-hub CLI is upgraded to 0.3.0 and calls the Hub's sync interface before a profile publish to pull the npm package immediately; the npm publish token is stored in the keychain through `pbpaste | npm run publish:token store`.
|
|
12
|
+
|
|
13
|
+
Exit DSCODE sessions using the same data directory before upgrading:
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
npm install -g @toddzheng024/dscode@0.7.0
|
|
17
|
+
dscode update 0.7.0
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
`dscode-0.7.0.tar.gz` can also be downloaded from GitHub Releases to install the standalone source package. The two installation forms use different data directories and never migrate sessions or credentials automatically.
|
|
21
|
+
|
|
22
|
+
Verification covers unit, integration, TUI, package build, a real local Harness launch and Hub install/rollback. The interface translations were proofread by hand for English and Chinese; the other four languages have not been reviewed by native speakers.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# DSCODE 0.7.1
|
|
2
|
+
|
|
3
|
+
This release fixes TUI wheel scrolling and makes the scroll feel finer.
|
|
4
|
+
|
|
5
|
+
- Fixed the wheel doing nothing: 0.7.0 disabled mouse capture by default, while the TUI redraws in place and clears the terminal scrollback, so with capture off the wheel produced no event and there was no terminal content to scroll; only `/mouse` turned it on. Capture is now on by default and the wheel works out of the box; `/mouse` can still turn it off to drag-select and copy directly.
|
|
6
|
+
- One wheel notch now scrolls 1 line (was 3), and wheel events landing in the same 16ms frame are merged into one redraw: a continuous trackpad slide is smoother and fast scrolling no longer drops events.
|
|
7
|
+
- The wheel listener registers once and reads the latest state through a ref, cutting the re-render cost per event; PageUp/PageDown behaviour is unchanged.
|
|
8
|
+
- The `/mouse` hint now prefers Shift (in terminals such as Ghostty, Shift-drag is the local selection by default), with Option for iTerm2 and Fn for Terminal.
|
|
9
|
+
- A bundle that already carries the old patch upgrades in place to the new implementation. The README became English-first with `README.zh-CN.md` retained, and `docs/CHANGELOG.md` was added to record the release history from 0.1.0.
|
|
10
|
+
|
|
11
|
+
Exit DSCODE sessions using the same data directory before upgrading:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
npm install -g @toddzheng024/dscode@0.7.1
|
|
15
|
+
dscode update 0.7.1
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`dscode-0.7.1.tar.gz` can also be downloaded from GitHub Releases to install the standalone source package. The two installation forms use different data directories and never migrate sessions or credentials automatically.
|
|
19
|
+
|
|
20
|
+
Verification covers unit, integration, TUI, package build, a real local Harness launch and Hub install/rollback. The TUI end-to-end verification gained assertions for "one wheel notch moves one line" and "three scrolls in the same frame move three lines".
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# DSCODE 0.7.10
|
|
2
|
+
|
|
3
|
+
This release fixes the version printed by `dscode --version` on tar and source installations.
|
|
4
|
+
|
|
5
|
+
- `dscode --version` (and `-v`) now prints DSCODE's own version number. These two flags used to be passed through to the DSH CLI, printing the runtime version `0.1.5-rc.1` instead, which has nothing to do with this version number and easily misleads troubleshooting. The npm/Hub launcher already printed the launcher version correctly.
|
|
6
|
+
- The README's command examples gained `dscode --version` along the way.
|
|
7
|
+
|
|
8
|
+
This release does not upgrade the upstream DSH dependencies and does not change install or upgrade behaviour.
|
|
9
|
+
|
|
10
|
+
Verification: `npm run check` passes (244 unit tests, 44 evaluation tests; integration, the real Ink UI and the package checks pass).
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# DSCODE 0.7.11
|
|
2
|
+
|
|
3
|
+
This release moves the built-in TUI from `dsh-code` 1.0.6 to **1.2.0** and ships several earlier changes with it.
|
|
4
|
+
|
|
5
|
+
- **TUI moved to dsh-code 1.2.0**: all 25 DSCODE patches were re-aligned. This upstream version changed a great deal — the local command catalogue moved to i18n `descriptionKey`, the `Header` component was rewritten, the input layer was restructured, and `/language` and `/review` became upstream features. Our approach: inject a fallback branch into upstream's `t()` for the catalogue (without changing upstream message tables, to avoid type conflicts when merging source later), and deliberately take over `/language` and `/review` as a whole.
|
|
6
|
+
- **DSH pinned to `0.1.5-rc.2`**: the dependency graph and the runtime-patch gate moved together, and all 9 runtime patches were re-verified against rc.2 (including the macOS stdin probe).
|
|
7
|
+
- **`dscode update` upgrades the whole installation in one step**: the npm/Hub path replaces the launcher itself with npm first and then upgrades the profile; the tar path downloads the release tarball, verifies its sha256, swaps the directory in place and migrates `.runtime`/`.env`/the local config; a source checkout refuses and asks for a git pull. There is also an in-TUI `/update`: a detached helper completes the upgrade after you exit.
|
|
8
|
+
- **Startup version check**: the TUI reads the npm registry once at startup (8-second timeout, silent on failure) and suggests `/update` when there is a newer version; `DSCODE_UPDATE_CHECK=off` disables it.
|
|
9
|
+
- **Update notices in seven languages** (en/zh-CN/zh-TW/ja/ko/es): the startup notice uses the TUI language runtime and `/update` follows the saved language.
|
|
10
|
+
- **`/model` lists only the current provider's models, sorted alphabetically by display name** (numbers in natural order, GLM 5.2 before 5.3); the search only filters rows, never reorders them.
|
|
11
|
+
- **Code review is more reliable**: the output budget went from 8k to 32k (reasoning tokens included), and an attempt that burns the budget without writing a report is retried with a doubled budget up to 64k; it starts at the lowest reasoning level the model supports; `DSCODE_REVIEW_MODEL=provider/model` and `DSCODE_REVIEW_EFFORT=<level>` are supported (aligned with Codex's `review_model`); a failure carries each attempt's budget and usage diagnostics.
|
|
12
|
+
- **Error display**: an unexpected stop the user did not cancel (a hook block, a restart interruption, blocked) now uses the error colour instead of a dim turn marker.
|
|
13
|
+
- **New tooling**: `npm run probe:tui [directory]` quantifies the blast radius of the TUI patches in 30 seconds before an upgrade (this migration was driven by it).
|
|
14
|
+
|
|
15
|
+
This release upgrades no external dependency other than DSH (`@anionex/dsh-computer-use`, `chrome-devtools-mcp` and `node-addon-system` are already at their latest versions).
|
|
16
|
+
|
|
17
|
+
Verification: `npm run check` passes (258 unit tests, 44 evaluation tests; lint, dependency integration, 4 real Ink UI verifications — TUI rendering/scrollback replay/effort bar/model search — and the package checks all pass). During the migration three classes of verification problem caused by upstream behaviour changes were found and fixed: `time-context` injection, the new `view.pending` field, and the new `recordHistory` prop.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# DSCODE 0.7.12
|
|
2
|
+
|
|
3
|
+
This release turns `!cmd` shell mode into a real mode (rounded border, `!` flush left, Esc to leave, with the command and its redacted output returning to the agent context), moves the submit default back to steer, and fixes two problems: "the composer drifting up and down on every loop" and "cache hit always showing --".
|
|
4
|
+
|
|
5
|
+
- Shell mode: when the draft starts with `!` the composer switches to a brand-coloured rounded border (outline only, no fill), `!` sits flush left, and Esc leaves the mode while keeping the command text; outside the box a new `! shell mode · esc exits` hint appears (in 6 languages). After `!cmd` runs, the command and its redacted output return to the agent as context.
|
|
6
|
+
- Submit mode is steer again: submitting while a turn runs inserts into the current turn, and while idle it sends normally; Tab now switches to queue (dsh-code 1.2.0 changed the default to queue).
|
|
7
|
+
- Frame geometry: Ink's frame redraw is anchored to the bottom — when the live area shrinks, the freed lines stay as blank space above instead of being reclaimed, the redraw block height only grows, and the composer is only pushed down by new output; the persistent activity line and the compaction panel also count against the live-area budget, so the frame cannot reach the terminal height (where Ink clears the screen every frame and wipes the scrollback). `scripts/verify-tui-scroll.mjs` (an ANSI screen simulation) was added as a regression test.
|
|
8
|
+
- Cache-hit telemetry is no longer wiped by "an auxiliary call with no usage" (memory, review, an interrupted timeout stream): a missing usage is recorded as unaccounted and only a malformed usage counts as unknown. Of 1707 `end` rows in the local ledger, 49 had no usage, and after the fix that session shows 98.4%.
|
|
9
|
+
- IME cursor following is delegated to dsh-code 1.2.0's native anchor (the previous three-line drift is gone); the footer's cache figure is kept from 80 columns (it used to need 130).
|
|
10
|
+
|
|
11
|
+
Verification: `npm run check` passes (258 unit tests, 44 evaluation tests; integration, the real Ink UI (6 probes, including the new scroll regression) and the package checks pass).
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# DSCODE 0.7.13
|
|
2
|
+
|
|
3
|
+
This release replaces "text-patching upstream build output" with **vendor takeover**: `packages/tui` carries `dsh-code` 1.2.0's TypeScript source directly, and all 27 DSCODE changes live as source rather than patch text; it also fixes three problems: the extra exclamation mark in shell mode, the footer width counting a variation selector as a column, and the SQLite experimental notice printed at startup.
|
|
4
|
+
|
|
5
|
+
- **Vendor takeover**: the upstream source lives in `packages/tui` (61 files under `src`), the repository root depends on it through `file:packages/tui`, and `node_modules/dsh-code` is only a symlink, so an everyday change needs **no build** and takes effect immediately. The 27 patch scripts, 6 UI verification scripts and `probe:tui` all retired, taking `scripts/patch-*.mjs` from 32 down to 6 (only the host-side runtime/Ink/stdin/compaction patches remain).
|
|
6
|
+
- **The release shape became compiled**: Node refuses to strip types from a file under `node_modules`, so packaging uses `scripts/build-tui.mjs` to transpile `src` into `lib` file by file (no bundling, no minification), and both the npm bundle and the `.dshprofile` carry the compiled output; a repository checkout still runs the source directly.
|
|
7
|
+
- **Shell mode hides the exclamation mark**: a `!cmd` draft already has the brand-coloured rounded border and the `! shell mode · esc exits` hint, so the editor no longer draws that routing prefix and the cursor moves one column left; submit routing, the paste-collapse marker, command completion and the line budget still read the real draft.
|
|
8
|
+
- **Width fix**: `displayWidth` counted zero-width characters (combining marks, variation selectors) as one column, so `❄️` (U+2744 + U+FE0F) counted as 3 — the footer's provider budget therefore swung by one column with DeepSeek's peak/off-peak periods, and that assertion failed at random off-peak. Zero-width characters now count 0, and the footer budget no longer swings with the period.
|
|
9
|
+
- **Quiet startup**: every DSH child the harness starts now carries `--disable-warning=ExperimentalWarning` (prepended ahead of the node arguments the caller passes), so the `node:sqlite` experimental notice is no longer printed at startup; the `exec` path no longer passes the same flag twice.
|
|
10
|
+
- **Test infrastructure**: the test fixture now symlinks `node_modules/dsh-code` to `packages/tui` (matching the repository and the resolution path of a real run), where the integration suite had been failing entirely because of the type-stripping restriction; the coverage inventory excludes `packages/tui/lib`, the compiled output, taking the first-party inventory back to 8,094 lines.
|
|
11
|
+
|
|
12
|
+
Verification: `npm run check` is green — 246 unit tests (82.98% first-party line coverage), 7 integration probes (session bridge, messaging, runtime foundations, session cards, memory, login runtime, exec), the package checks and 44 evaluation tests. Real-TTY interaction is still unverified (this environment has no pty, which is also why `EXEC_PROBE` skips the cases that block a terminal).
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# DSCODE 0.7.14
|
|
2
|
+
|
|
3
|
+
This release connects the **Grok subscription** as a provider, turns automatic compaction into **pre-compaction** (at the threshold it no longer compacts on the spot but waits for a summary already running in the background), and fixes the code review **thinking budget**: the DeepSeek reviewer used to spend 25k–56k tokens of thought inside the 90-second deadline and write not one word of a report, so every review ended in a timeout.
|
|
4
|
+
|
|
5
|
+
- **Grok subscription**: `grok` is connected as a subscription provider. The adapter only reads the `grok` CLI's login (`~/.grok/auth.json`, which DSCODE never writes back, so it cannot knock the CLI offline by racing its refresh-token rotation), talks to `api.x.ai/v1`, and supports structured tool calls and reasoning; the model list — context window, output limit and the `low/medium/high/xhigh` bands — comes from the CLI proxy's `/v1/models`. The footer shows the subscription allowance instead of cost: the used percentage of the weekly window from `/v1/billing?format=credits` plus the local reset time, and "no usage reported" rather than a made-up number when it is unavailable.
|
|
6
|
+
- **Pre-compaction**: one band below the priced threshold (70% of the default 80% threshold) a background thread summarises the oldest compactable region first, **without touching disk and without a lock**; when the threshold is really reached it opens `compaction/start` and reuses that summary to commit, so the wait at the threshold is "waiting for something already running", and content added between 70% and 80% **stays verbatim after the checkpoint** instead of being folded into the summary. A summary invalidated by a manual compaction or a surface rewrite is dropped silently and the step summarises again.
|
|
7
|
+
- **Agent-line timestamps**: a tool card, folded thinking and a reply each start with the local `HH:MM:SS` of that line's event in a dim colour, with the block wrapping to the remaining columns.
|
|
8
|
+
- **Code review turns thinking off**: a review now requests `off` by default (the only band that really disables thinking). `minimal` used to land on `low` for DeepSeek, which is still a thinking mode, measuring 24k–56k reasoning tokens per call and almost certainly being cut off by the 90-second deadline; with it off the output is just the report. A model without an `off` band keeps its own default, and `DSCODE_REVIEW_EFFORT` can still override.
|
|
9
|
+
- **Fixes**: the `credentials` provider is mounted again in a source checkout (upstream matches the row by `name` while the patch only changed the config key, so it had only worked in the npm bundle); the composer no longer floats up after a `<Static>` flush; a running shell command keeps its own output window and poll no longer overwrites accumulated text with the current viewport (another session or a background task in the same terminal can no longer make it report "beginning dropped" wrongly).
|
|
10
|
+
|
|
11
|
+
Verification: `npm run check` is green — 262 unit tests (7,595/9,257 first-party lines, 82.05%), the integration probes (session bridge, messaging, runtime foundations, session cards, memory, login runtime, exec), the package checks and 46 evaluation tests; this environment cannot allocate a PTY, so the case that blocks a terminal in the exec probe is skipped by the existing convention. Whether the code-review change takes effect is **not confirmed on a real machine**: this session's process had loaded the old plugin module before the file changed, so `review` still ended in a 90-second timeout; the new code was verified offline to resolve to `off` on the real DeepSeek adapter (→ wire `thinking: disabled`), and on the same route a forced-disabled `session-title` call history shows 28/30 calls with 0 reasoning tokens.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# DSCODE 0.7.15
|
|
2
|
+
|
|
3
|
+
This release really connects project-level extensions: hooks merge in layers from the project directory, skills and `AGENTS.md`/`CLAUDE.md` can come from directories above the project root; it also stops mounting Chrome MCP by default and lets TypeSafe Jev replace one model call in automatic permission review with one structured decision (including automatic denial).
|
|
4
|
+
|
|
5
|
+
- **Jev review (new)**: with `dscode-jev` mounted, automatic review first asks Jev (OpenRouter's alpha Decisions endpoint `POST /api/alpha/decisions`) four typed questions — `allow`/`ask`/`deny` with per-option probabilities, whether the retained instructions clearly authorise this action, how hard it is to roll back if it goes wrong, and whether credentials are involved — then decides in code against asymmetric thresholds: an allow requires a high-confidence allow with no credential or hard-to-undo signal; a denial takes effect when "confidence and `P(deny)` are both high" or "confidence is a little lower but the risk score corroborates and is over the line", and an authorisation veto (`authorized ≥ 0.6`) turns it into a hand-to-human. When Jev is unconfigured, disabled, times out or errors it returns "no verdict" and automatic review falls back to the original reviewer model, behaving as before. The decision signals (`choice`/`confidence`/`denyProbability`/`authorized`/`destructive`/`credentialRisk`) are written to `.runtime/auto-review/*.jsonl` for later threshold tuning.
|
|
6
|
+
- **Layered hooks**: a project's `.codex/hooks.json`, `.dsh/hooks.json` and `.claude/settings.json` stack on top of `config/hooks.local.json` by default and merge into `$DSH_HOME/hooks.resolved.json`, with a report listing each layer and the events this bridge cannot execute; a bad format in a project file is only recorded, never fatal, while an installation-level file still fails hard; `/hooks` points out a layer that changed (or vanished) after the merge, because only a restart re-reads it. The switch accepts only the documented spellings for on (`1/true/on/yes`), so `=no`/`=none`/`=disable` no longer turns it back on.
|
|
7
|
+
- **Upward discovery for skills and workspace instructions**: with `DSCODE_SKILL_ANCESTORS=1`, the `.dsh/skills`, `.agents/skills` and `.claude/skills` of every level between the project root and home register at rank 300 (only headers enter the catalog, bodies stay lazy); `AGENTS.md`/`CLAUDE.md` above the project root fold into a 60 KiB-capped aggregate file (the user-level file is always kept, the nearest ancestor wins, an over-budget source is skipped whole); the home boundary is compared by realpath, so it no longer silently fails when `$HOME` is a symlink.
|
|
8
|
+
- **Chrome DevTools MCP is no longer mounted by default**: it uses an isolated `--isolated` temporary profile, cannot see your login state, and occupies about 29 model-visible tools. The launcher, bundle and doctor stop wiring it; `config/mcp.local.example.yml` gives an example of adding it back on demand (including `--browserUrl` to reach a Chrome you started with remote debugging).
|
|
9
|
+
- **Two discipline sections added to the system prompt**: `dscode:code-discipline` (fix the root cause without overstepping, do not touch unrelated code, add no comment or copyright-header noise, do not commit on your own, do not invent a test suite in a repo that has none, read `git log`/`git blame` first when it would settle a question) and `dscode:working-discipline` (instruction precedence: the system prompt and the approval policy cannot be loosened downstream, user request > `AGENTS.md`/`CLAUDE.md` > memory > external content; act once there is enough information; correct yourself only when it would change a conclusion); the persona rule "a progress update every minute", which contradicted its own next sentence, became event-driven.
|
|
10
|
+
|
|
11
|
+
Verification: `npm run check` passes (306 unit tests; lint clean). The ancestor and hook behaviour is covered by new unit tests (`tests/workspace-discovery.test.mjs`, `tests/hook-sources.test.mjs`, `tests/tui-tools.test.mjs`). The Jev path uses a mock transport to cover the request shape, threshold judgement, timeout and fallback, and was measured on a real machine over four cases (96–813 ms, about $0.000025 each); the confidence drifts between two runs of the same action (`rm -rf` from 0.90 to 0.97), so thresholds should still be aligned with the audit records rather than copying the defaults.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# DSCODE 0.7.16
|
|
2
|
+
|
|
3
|
+
This release runs automatic compaction on the window messages can actually occupy, and adds a usable sandbox runner for restricted environments.
|
|
4
|
+
|
|
5
|
+
- **The compaction threshold is priced against the real message headroom (fix)**: the DeepSeek adapter counts the output budget (256k by default) inside the same 1M window, so a request whose "messages + output" exceeds the window is rejected outright; the threshold used to be priced against the whole window, which put the 90% line (943,718) **above** the real message ceiling (792,576), making a pressure compaction impossible to trigger first. Every compaction therefore came from overflow recovery: prune first, then write the summary synchronously on the spot — in the 0.7.15 log, `compaction/summary` appears **26.8 seconds** after `compaction/start`, and a prefetched compaction that only hangs off the pressure path never ran once. `effectiveContextWindow` now subtracts the output budget the adapter declares, so the threshold 713,318 and the prefetch start 634,061 both sit below the ceiling; the `/model` "switching will compact" preview uses the same window.
|
|
6
|
+
- **Overflow recovery skips the summary when the prune already fits (fix)**: overflow recovery pruned first and then summarised regardless. That 0.7.15 request exceeded the limit by only 125 tokens while the prune freed 87,018, so the summary was pure waste. After pruning it now re-checks with `fitsInWindow` (messages + output budget ≤ window): when it fits, it returns so the caller retries (the prune itself replaced the surface with `surfaceOp: replace`, so the retry condition holds), and only compacts when it does not; and a skip is allowed **only when a surface replacement really happened**, or the caller would not retry and the original error would be thrown at the user.
|
|
7
|
+
- **Sandbox runner (new, enabled by hand)**: `plugins/tui-tools/sandbox-runner.mjs` adds one `(allow file-write* (literal "/dev/ptmx"))` to the existing write policy — without it a confined command cannot allocate a PTY (`posix_openpt: Operation not permitted`), breaking a nested harness, tmux, expect and node-pty tests; inside an already confined process it **inherits** the outer profile instead of nesting another. Copy `config/harness.local.example.yml` to `config/harness.local.yml` to enable it, after which `npm run doctor`, `make release`, and "open another dscode inside a dscode session" all work.
|
|
8
|
+
- **The runner's notices are no longer mistaken for a failure (fix)**: the provider judges "non-zero exit + stderr matching `runnerFailureSignatures`" as a sandbox failure. The runner printed notices such as "inheriting the outer profile" with the same prefix, so inside a nested session any failing command was reported as a broken sandbox. A real failure now goes through `fatal:` and a notice through `notice:`, and the signatures in the example config match only the former.
|
|
9
|
+
|
|
10
|
+
Verification: `npm run check` passes (lint clean, all 315 unit tests green). The compaction fixes come with real contract tests — calling the DeepSeek adapter's `modelInfoFor` directly to confirm `defaultMaxTokens` is a top-level field and `effectiveContextWindow` yields 792,576 — plus engine-level regressions: the pressure path really triggers with an output budget; a prune that fits skips the summary while an unreplaced surface does not skip it; and the upgrade path is covered for pristine / v1-only / v2-only old engine states. The sandbox runner's apply path is covered by a shim that records the profile, and the inheritance path was measured on a real machine.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# DSCODE 0.7.17
|
|
2
|
+
|
|
3
|
+
This release replaces the compaction engine's "build-time rewrite of upstream source" with a "subclass override", restores all six languages in `/language`, and re-aims the compaction evaluation at the production engine.
|
|
4
|
+
|
|
5
|
+
- **The compaction engine became a subclass override (refactor, behaviour unchanged)**: automatic compaction used to be written into `@deepseek-ai/dsh-compaction-basic`'s source by four `replaceOnce` patches, which could break on any upstream upgrade. The policy now lives in our own `plugins/compaction/engine.mjs`: `DscodeCompactionEngine` extends the upstream engine and overrides only `compactIfNeeded` (threshold pricing, completion budget, prefetch, prune-on-overflow first) and `summarize` (the injection point for a prefetched summary); the durable transaction, the `compaction/start|end` markers and the stability check stay with upstream `compactRegion`. Distribution no longer vendors that package, and nothing rewrites its source at install time.
|
|
6
|
+
- **`/language` regained all six languages (fix)**: after our own terminal took over, `/language` fell back to the upstream implementation with only en/zh, while DSCODE's own message tables had always supported `en`, `zh-CN`, `zh-TW`, `ja`, `ko` and `es` — yet the panel listed two entries and `/language ja` was silently stored as English. The list, the argument parsing and the `language.json` persistence now all follow `plugins/i18n`: `zh`, `jp` and `繁體中文` resolve through the alias table, and a stored `zh` upgrades to `zh-CN`. The terminal's own skeleton copy still has only English and Simplified Chinese, so under another language the skeleton is English and DSCODE's own copy uses the chosen language — exactly the semantics `/language` always promised.
|
|
7
|
+
- **The compaction evaluation re-aimed at the production engine (fix)**: after the subclassing the evaluation harness still mounted the unpatched upstream engine, which meant it no longer tested the production configuration; it now mounts `DscodeCompactionEngine` and records the engine source hash, and the judge model is decoupled from the model under test.
|
|
8
|
+
- **The evaluation window on OpenRouter routes (fix)**: `OpenRouterAdapter` reported the 1M window from the live listing, lifting the threshold above any replayed history so compaction never triggered; a new window wrapper reports the window the harness actually executes with.
|
|
9
|
+
- **Judge parsing tolerance (fix)**: if the judge wrote one sentence before the JSON object or wrapped it in a fence, a whole batch of verdicts was recorded as "unscored", failing the calibration (10/14, 6/14 and 4/14 across three models). The parser now extracts the outermost object, and the calibration passes 14/14.
|
|
10
|
+
- **A prefetch wait no longer swallows the compaction indicator (fix)**: submitting a compaction while a prefetch was still running used to wait for the summary before entering the transaction, and the TUI showed no compaction indicator during that wait. The wait now happens after the transaction's open marker, so the indicator shows as usual; a failed prefetch or a rewritten span falls back to a just-in-time summary instead of failing the transaction.
|
|
11
|
+
|
|
12
|
+
Verification: `npm run check` passes (lint clean; unit, integration, packaging and evaluation all green). The evaluation fixes come with real contract tests — the harness mounts the production engine, the evaluation window follows what the harness executes, and the judge parsing tolerates noise — plus engine-level regressions: threshold pricing and the completion budget still apply on the pressure path, an overflow the prune already covers skips the summary, and a prefetch commits after the marker opens and falls back when rewritten. The `/language` side gained terminal assertions: the six-language list matches DSCODE's message table item by item, alias resolution works, an old `zh` normalises to `zh-CN`, and the skeleton copy falls back to English under the other languages.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# DSCODE 0.7.18
|
|
2
|
+
|
|
3
|
+
This release adds three things that let the compaction evaluation guide decisions — deterministic context fidelity, a pre-screen of discriminating cases, and separating a format failure from a model failure — and completes the first summary A/B.
|
|
4
|
+
|
|
5
|
+
- **Context fidelity (new, evaluation)**: on the context the model really saw, `retention` counts at token boundaries whether each probe's original sentence evidence (`evidence.quote`) and the words inside it are still present, writes it into `scores.jsonl`, and the report carries an `Evidence kept` column. It calls neither the model under test nor the judge, so it has no sampling variance and can be recorded on every run. On LongMemEval tier1 it explained the source of compaction loss directly: with the evidence sentence still present the pass rate is close to no compaction, while a sentence swallowed by the summary leaves only 4%–6% — and word-level retention is still 89%–92%: a summary keeps the words and loses the restatable fact.
|
|
6
|
+
- **Pre-screen of discriminating cases (new, evaluation)**: `--baseline <run> [--baseline-policy full]` keeps only cases where that policy was fully correct in every repeat of the baseline run with no infrastructure error; the filtered dataset is written to the new run's `dataset.json` and `manifest.json`'s `selection` records the source and the counts. Of these 100 cases, 47 were selected, saving half the non-discriminating probes in later policy comparisons.
|
|
7
|
+
- **A summary A/B without changing the product (new, evaluation)**: a policy may carry a `summaryInstruction`, which the evaluation-side `EvalCompactionEngine` inserts into the compaction request before the upstream summarisation instruction; without it the behaviour matches the product exactly. The first comparison (`compact-80` vs `compact-80-keepfacts`, 47 cases × 3 repeats) was a **negative result**: asking to "keep the quotable fact sentences" changed neither fidelity nor the pass rate (10 better, 11 worse) and cost slightly more. The conclusion and how to reproduce it are recorded in `eval/experiments/2026-09-longmemeval-tier1-summary-ab.md`.
|
|
8
|
+
- **Probe protocol retry (fix, evaluation)**: when a reply is not a single valid JSON, or the stream is cut off before the JSON closes, it retries once with a corrective hint and records it in `answerRetries` (counting towards the call ceiling); a rejected reply never enters the session, so later checkpoints are unaffected. Another run had zero of these format errors (423 checkpoints), showing that the earlier 15 `invalid-answer-json` came from the backend and model snapshot of the time rather than a general runner defect.
|
|
9
|
+
- **Word boundaries in evidence quoting (fix, evaluation)**: LongMemEval samples used to be hard-cut at 160 characters, leaving 87/100 evidence quotes split mid-word, which a token-boundary match then judged "not retained" (even without compaction only 55% survived). The cut is now at a word boundary, and after the fix the no-compaction policy is back to 100%; the corrected dataset is written to `eval/private/longmemeval/tier1-wordboundary.json` without overwriting the original file, and the hash check of historical runs stays valid.
|
|
10
|
+
- **Prebuilt release packages (new)**: `dscode-<version>-darwin-arm64.tar.gz` and `-darwin-x64.tar.gz` are source trees with the locked `node_modules` already installed, and the `curl | sh` installer and `dscode update` prefer the one for the local platform, so installing and upgrading only reaches GitHub and needs neither npm nor the npm registry — a corporate registry proxy can no longer block `npm ci`. A platform without a prebuilt package falls back to the source tarball, and `DSCODE_INSTALL_SOURCE=1` forces the choice. `npm run dist` builds all three (`DSCODE_PREBUILT_ARCHS` can narrow or skip the prebuilt packages), and the release workflow and `make attach` upload them.
|
|
11
|
+
- **The launching directory's `.env` no longer affects the launch (fix)**: upstream reads the launching directory's `.env` as a project layer, so a workspace file could inject variables into the agent process, and one of the names reserved for bootstrap (any `DSH_*`, `NODE_OPTIONS`, a CA path) would abort the launch with "only the launching environment may set". A pinned `dsh-app-boot` patch now drops that layer in a repository and a tar installation; the installation's own `.env` is still loaded by the launcher.
|
|
12
|
+
|
|
13
|
+
Verification: `npm run check` passes (lint, coverage, integration, packaging and evaluation all green). The new evaluation tests cover token-boundary matching for fidelity and the evidence loss after compaction, the `--baseline` selection (including across repeats and with partial evidence), and that the protocol retry only changes the compaction request's prompt while a rejected reply never enters the session; the `summaryInstruction` test confirms it appears only in the compaction request.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# DSCODE 0.7.19
|
|
2
|
+
|
|
3
|
+
This release stops an escalation the user already asked for from interrupting a human every time — the second model in automatic review decides it instead; and it fixes the chain that made an agent calling a CLI with its own credentials look "not signed in".
|
|
4
|
+
|
|
5
|
+
- **An authorised escalation goes to a deeper model review (change, automatic review)**: Jev has four guards on the allow direction — credential risk ≥ 0.5, hard to undo (`score ≥ 2`), a `choice` other than `allow`, and confidence < 0.85. They used to go to a human every time and **ignored whether the instructions had already authorised the action**: a build verification that has to leave the sandbox inside a "commit and release" task therefore prompted for approval every time. Now, as long as `authorized ≥ authorizedVeto`(0.6) — the retained instructions appear to ask for it — those four guards return `defer` instead, leaving it to the reviewer model that can see the full pending arguments and the instructions. Jev's scores are coarse by nature, and this deployment's policy already allows ordinary network access and lets a CLI use credentials it stored itself, so these guards should not veto on their own. **The deny direction is unchanged**: a decisive denial, and "the instructions appear to veto this denial", still work as before. A `defer` is never treated as an allow (`applyVerdict` only accepts an explicit `allow`), and a reviewer ruling of `human` still consults a human; one `defer` leaves two rows in the audit — Jev's verdict and risk scores, and the final ruling.
|
|
6
|
+
- **Hub login aligned to the state directory (new, launcher)**: `dsh-hub login` writes `$DSH_HOME/.hub/auth.json`, but a user who logged in outside DSCODE wrote `~/.dsh/.hub/auth.json`. When DSH_HOME points elsewhere, the CLI inside the agent reports "Not signed in" — and at release time that is exactly the chain that sends people off to "export a token", which is then judged a credential risk and routed to a human again. The launcher now copies that login into this session's `$DSH_HOME` (when the target does not exist): the directory is normalised to `0700` and the file to `0600`, an existing copy always wins (a fresh token the CLI refreshed is never overwritten by the old file), and any read/write failure is ignored silently — a convenience copy must never make the launch fail. The copy lands in the state directory, which also lets the CLI refresh its own session without leaving the sandbox.
|
|
7
|
+
|
|
8
|
+
Verification: `npm run check` passes (lint, coverage, integration, packaging and evaluation all green). New tests cover "the four guards return `defer` when authorized", "below `authorizedVeto` it is still `human`", "an authorised decisive denial still goes to a human", "a `defer` goes to the reviewer model and spends no human", "a reviewer ruling of `human` still finds the user", and for the credential alignment "no action without a login / copied once / an existing copy wins / a loose directory is tightened to 0700 / an unreadable source does not throw".
|