@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.
Files changed (485) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +120 -2
  3. package/THIRD_PARTY_NOTICES.md +30 -0
  4. package/bin/apply_patch +9 -0
  5. package/cordis.patch.yml +433 -0
  6. package/docs/CHANGELOG.md +649 -0
  7. package/docs/account-login.md +44 -0
  8. package/docs/auto-review.md +128 -0
  9. package/docs/browser-use.md +784 -0
  10. package/docs/computer-use.md +81 -0
  11. package/docs/custom-providers.md +88 -0
  12. package/docs/demo.md +158 -0
  13. package/docs/distribution.md +58 -0
  14. package/docs/dscode-ultra.md +75 -0
  15. package/docs/email.md +296 -0
  16. package/docs/exec.md +40 -0
  17. package/docs/hub-distribution.md +212 -0
  18. package/docs/memory.md +121 -0
  19. package/docs/opencode-go.md +61 -0
  20. package/docs/plugin-hub.md +68 -0
  21. package/docs/releases/0.2.0.md +28 -0
  22. package/docs/releases/0.3.0.md +21 -0
  23. package/docs/releases/0.4.0.md +20 -0
  24. package/docs/releases/0.5.0.md +19 -0
  25. package/docs/releases/0.6.0.md +20 -0
  26. package/docs/releases/0.7.0.md +22 -0
  27. package/docs/releases/0.7.1.md +20 -0
  28. package/docs/releases/0.7.10.md +10 -0
  29. package/docs/releases/0.7.11.md +17 -0
  30. package/docs/releases/0.7.12.md +11 -0
  31. package/docs/releases/0.7.13.md +12 -0
  32. package/docs/releases/0.7.14.md +11 -0
  33. package/docs/releases/0.7.15.md +11 -0
  34. package/docs/releases/0.7.16.md +10 -0
  35. package/docs/releases/0.7.17.md +12 -0
  36. package/docs/releases/0.7.18.md +13 -0
  37. package/docs/releases/0.7.19.md +8 -0
  38. package/docs/releases/0.7.2.md +19 -0
  39. package/docs/releases/0.7.20.md +10 -0
  40. package/docs/releases/0.7.21.md +9 -0
  41. package/docs/releases/0.7.22.md +11 -0
  42. package/docs/releases/0.7.23.md +14 -0
  43. package/docs/releases/0.7.24.md +11 -0
  44. package/docs/releases/0.7.25.md +8 -0
  45. package/docs/releases/0.7.26.md +18 -0
  46. package/docs/releases/0.7.27.md +8 -0
  47. package/docs/releases/0.7.28.md +22 -0
  48. package/docs/releases/0.7.29.md +12 -0
  49. package/docs/releases/0.7.3.md +23 -0
  50. package/docs/releases/0.7.30.md +19 -0
  51. package/docs/releases/0.7.31.md +14 -0
  52. package/docs/releases/0.7.32.md +14 -0
  53. package/docs/releases/0.7.33.md +37 -0
  54. package/docs/releases/0.7.34.md +24 -0
  55. package/docs/releases/0.7.4.md +16 -0
  56. package/docs/releases/0.7.5.md +18 -0
  57. package/docs/releases/0.7.6.md +29 -0
  58. package/docs/releases/0.7.7.md +36 -0
  59. package/docs/releases/0.7.8.md +14 -0
  60. package/docs/releases/0.7.9.md +15 -0
  61. package/docs/session-bridge.md +80 -0
  62. package/docs/session-cards.md +53 -0
  63. package/docs/session-communication.md +186 -0
  64. package/docs/session-metrics.md +41 -0
  65. package/docs/skills.md +81 -0
  66. package/docs/triggers.md +338 -0
  67. package/docs/tui-commands.md +204 -0
  68. package/extensions/browser/manifest.json +22 -0
  69. package/extensions/browser/popup.css +6 -0
  70. package/extensions/browser/popup.html +11 -0
  71. package/extensions/browser/popup.mjs +47 -0
  72. package/extensions/browser/protocol.mjs +168 -0
  73. package/extensions/browser/worker.mjs +94 -0
  74. package/icon.svg +7 -0
  75. package/locale/en.json +6 -0
  76. package/locale/zh-cn.json +6 -0
  77. package/node_modules/@deepseek-ai/node-addon-system/LICENSE +21 -0
  78. package/node_modules/@deepseek-ai/node-addon-system/README.i18n.yaml +6 -0
  79. package/node_modules/@deepseek-ai/node-addon-system/README.md +15 -0
  80. package/node_modules/@deepseek-ai/node-addon-system/README.zh.md +15 -0
  81. package/node_modules/@deepseek-ai/node-addon-system/lib/flock.d.ts +13 -0
  82. package/node_modules/@deepseek-ai/node-addon-system/lib/flock.js +51 -0
  83. package/node_modules/@deepseek-ai/node-addon-system/lib/index.d.ts +73 -0
  84. package/node_modules/@deepseek-ai/node-addon-system/lib/index.js +98 -0
  85. package/node_modules/@deepseek-ai/node-addon-system/package.json +45 -0
  86. package/node_modules/@deepseek-ai/node-addon-system/src/flock.c +164 -0
  87. package/node_modules/@deepseek-ai/node-addon-system/src/main.c +298 -0
  88. package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/LICENSE +28 -0
  89. package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/README.i18n.yaml +6 -0
  90. package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/README.md +9 -0
  91. package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/README.zh.md +9 -0
  92. package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/bin/system.node +0 -0
  93. package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/package.json +31 -0
  94. package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/prebuilds.json +6 -0
  95. package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/LICENSE +28 -0
  96. package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/README.i18n.yaml +6 -0
  97. package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/README.md +9 -0
  98. package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/README.zh.md +9 -0
  99. package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/bin/system.node +0 -0
  100. package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/package.json +31 -0
  101. package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/prebuilds.json +6 -0
  102. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/LICENSE +28 -0
  103. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/README.i18n.yaml +6 -0
  104. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/README.md +11 -0
  105. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/README.zh.md +11 -0
  106. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/bin/glibc/system.node +0 -0
  107. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/bin/landlock-run +0 -0
  108. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/bin/musl/system.node +0 -0
  109. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/package.json +31 -0
  110. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/prebuilds.json +24 -0
  111. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/LICENSE +28 -0
  112. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/README.i18n.yaml +6 -0
  113. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/README.md +11 -0
  114. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/README.zh.md +11 -0
  115. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/bin/glibc/system.node +0 -0
  116. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/bin/landlock-run +0 -0
  117. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/bin/musl/system.node +0 -0
  118. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/package.json +31 -0
  119. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/prebuilds.json +24 -0
  120. package/package.json +156 -4
  121. package/plugins/account/index.mjs +178 -0
  122. package/plugins/account/state.mjs +123 -0
  123. package/plugins/auto-review/audit.mjs +24 -0
  124. package/plugins/auto-review/index.mjs +267 -0
  125. package/plugins/auto-review/policy.mjs +92 -0
  126. package/plugins/browser/SKILL.md +158 -0
  127. package/plugins/browser/access.mjs +143 -0
  128. package/plugins/browser/config.mjs +60 -0
  129. package/plugins/browser/connection.mjs +385 -0
  130. package/plugins/browser/desktop-client.mjs +282 -0
  131. package/plugins/browser/desktop-host.mjs +74 -0
  132. package/plugins/browser/document-identity.mjs +57 -0
  133. package/plugins/browser/extension-relay.mjs +66 -0
  134. package/plugins/browser/files.mjs +32 -0
  135. package/plugins/browser/index.mjs +235 -0
  136. package/plugins/browser/mcp-entry.mjs +18 -0
  137. package/plugins/browser/mcp-tools.mjs +21 -0
  138. package/plugins/browser/presentation.mjs +45 -0
  139. package/plugins/browser/preview.mjs +77 -0
  140. package/plugins/browser/review.mjs +20 -0
  141. package/plugins/browser/screenshots.mjs +35 -0
  142. package/plugins/clipboard-image/clipboard-image.swift +56 -0
  143. package/plugins/clipboard-image/index.mjs +70 -0
  144. package/plugins/code-review/baseline.mjs +143 -0
  145. package/plugins/code-review/git.mjs +163 -0
  146. package/plugins/code-review/index.mjs +236 -0
  147. package/plugins/compaction/engine.mjs +304 -0
  148. package/plugins/compaction/tetris.mjs +65 -0
  149. package/plugins/compaction/threshold.mjs +99 -0
  150. package/plugins/computer-use/DESKTOP-SKILL.md +64 -0
  151. package/plugins/computer-use/desktop-host.mjs +75 -0
  152. package/plugins/computer-use/desktop-skill.mjs +28 -0
  153. package/plugins/computer-use/desktop-upstream.mjs +3 -0
  154. package/plugins/computer-use/index.mjs +37 -0
  155. package/plugins/cordis-config/plain.mjs +31 -0
  156. package/plugins/credentials/index.mjs +73 -0
  157. package/plugins/custom/adapter.mjs +110 -0
  158. package/plugins/custom/config.mjs +85 -0
  159. package/plugins/custom/desktop-client.mjs +150 -0
  160. package/plugins/custom/desktop-host.mjs +78 -0
  161. package/plugins/custom/images.mjs +32 -0
  162. package/plugins/custom/index.mjs +145 -0
  163. package/plugins/custom/wire.mjs +179 -0
  164. package/plugins/desktop/client.mjs +1041 -0
  165. package/plugins/desktop/index.mjs +10 -0
  166. package/plugins/desktop/shell-environment.mjs +9 -0
  167. package/plugins/desktop-workspace/hooks.mjs +29 -0
  168. package/plugins/desktop-workspace/index.mjs +37 -0
  169. package/plugins/dscode/board.mjs +260 -0
  170. package/plugins/dscode/child-target.mjs +11 -0
  171. package/plugins/dscode/control.mjs +17 -0
  172. package/plugins/dscode/desktop-client.mjs +55 -0
  173. package/plugins/dscode/desktop-host.mjs +37 -0
  174. package/plugins/dscode/index.mjs +270 -0
  175. package/plugins/email/cli.mjs +32 -0
  176. package/plugins/email/contacts.mjs +36 -0
  177. package/plugins/email/desktop-client.mjs +117 -0
  178. package/plugins/email/desktop-host.mjs +54 -0
  179. package/plugins/email/desktop-service.mjs +106 -0
  180. package/plugins/email/gmail-oauth.mjs +69 -0
  181. package/plugins/email/gmail-store.mjs +2 -0
  182. package/plugins/email/gmail.mjs +194 -0
  183. package/plugins/email/imap.mjs +136 -0
  184. package/plugins/email/inbox.d.mts +25 -0
  185. package/plugins/email/inbox.mjs +76 -0
  186. package/plugins/email/smtp.mjs +70 -0
  187. package/plugins/email/store.mjs +32 -0
  188. package/plugins/email-tools/index.mjs +46 -0
  189. package/plugins/exec/cli.mjs +64 -0
  190. package/plugins/exec/index.mjs +112 -0
  191. package/plugins/grok/adapter.mjs +114 -0
  192. package/plugins/grok/auth.mjs +76 -0
  193. package/plugins/grok/billing.mjs +147 -0
  194. package/plugins/grok/index.mjs +123 -0
  195. package/plugins/grok/models.mjs +129 -0
  196. package/plugins/grok/status.mjs +29 -0
  197. package/plugins/grok/wire.mjs +268 -0
  198. package/plugins/hub/catalog.mjs +82 -0
  199. package/plugins/hub/desktop-client.mjs +114 -0
  200. package/plugins/hub/desktop-host.mjs +129 -0
  201. package/plugins/i18n/messages.d.mts +21 -0
  202. package/plugins/i18n/messages.mjs +537 -0
  203. package/plugins/jev/approval.mjs +131 -0
  204. package/plugins/jev/client.mjs +74 -0
  205. package/plugins/jev/index.mjs +100 -0
  206. package/plugins/memory/content.mjs +57 -0
  207. package/plugins/memory/desktop-host.mjs +3 -0
  208. package/plugins/memory/index.mjs +168 -0
  209. package/plugins/memory/pipeline.mjs +79 -0
  210. package/plugins/memory/store.mjs +93 -0
  211. package/plugins/message-source/kind.mjs +20 -0
  212. package/plugins/opencode-go/adapter.mjs +96 -0
  213. package/plugins/opencode-go/command.mjs +128 -0
  214. package/plugins/opencode-go/index.mjs +121 -0
  215. package/plugins/opencode-go/models.mjs +58 -0
  216. package/plugins/opencode-go/oauth.mjs +194 -0
  217. package/plugins/opencode-go/search.mjs +86 -0
  218. package/plugins/opencode-go/usage.mjs +120 -0
  219. package/plugins/opencode-go/version.mjs +10 -0
  220. package/plugins/opencode-go/wire.mjs +73 -0
  221. package/plugins/openrouter/adapter.mjs +232 -0
  222. package/plugins/openrouter/index.mjs +124 -0
  223. package/plugins/openrouter/models.mjs +157 -0
  224. package/plugins/openrouter/search.mjs +113 -0
  225. package/plugins/openrouter/wire.mjs +101 -0
  226. package/plugins/providers/catalog.mjs +160 -0
  227. package/plugins/providers/chat-messages.mjs +120 -0
  228. package/plugins/providers/chat-stream.mjs +174 -0
  229. package/plugins/providers/desktop-client.mjs +84 -0
  230. package/plugins/providers/desktop-host.mjs +63 -0
  231. package/plugins/providers/effort.mjs +35 -0
  232. package/plugins/providers/http-errors.mjs +50 -0
  233. package/plugins/providers/openrouter-account.mjs +171 -0
  234. package/plugins/session-bridge/client.mjs +106 -0
  235. package/plugins/session-bridge/communication.mjs +260 -0
  236. package/plugins/session-bridge/index.mjs +67 -0
  237. package/plugins/session-bridge/mailbox.mjs +267 -0
  238. package/plugins/session-bridge/paths.mjs +21 -0
  239. package/plugins/session-bridge/server.mjs +172 -0
  240. package/plugins/session-bridge/tasks.mjs +229 -0
  241. package/plugins/session-cards/content.mjs +64 -0
  242. package/plugins/session-cards/index.mjs +38 -0
  243. package/plugins/session-cards/manager.mjs +140 -0
  244. package/plugins/session-metrics/attribution.mjs +30 -0
  245. package/plugins/session-metrics/balance.mjs +81 -0
  246. package/plugins/session-metrics/desktop-client.mjs +62 -0
  247. package/plugins/session-metrics/desktop-host.mjs +46 -0
  248. package/plugins/session-metrics/index.mjs +97 -0
  249. package/plugins/session-metrics/pricing.mjs +84 -0
  250. package/plugins/session-metrics/rate.mjs +59 -0
  251. package/plugins/session-metrics/store.mjs +75 -0
  252. package/plugins/session-metrics/turns.mjs +134 -0
  253. package/plugins/session-metrics/view.mjs +272 -0
  254. package/plugins/time-marks/desktop-host.mjs +2 -0
  255. package/plugins/time-marks/index.mjs +116 -0
  256. package/plugins/time-marks/marks.mjs +152 -0
  257. package/plugins/triggers/cli.mjs +558 -0
  258. package/plugins/triggers/commands.mjs +143 -0
  259. package/plugins/triggers/config.mjs +264 -0
  260. package/plugins/triggers/desktop-client.mjs +155 -0
  261. package/plugins/triggers/desktop-host.mjs +88 -0
  262. package/plugins/triggers/desktop-management.mjs +97 -0
  263. package/plugins/triggers/desktop-scheduler.mjs +125 -0
  264. package/plugins/triggers/host.mjs +24 -0
  265. package/plugins/triggers/index.mjs +27 -0
  266. package/plugins/triggers/job-cli.mjs +110 -0
  267. package/plugins/triggers/jobs.mjs +156 -0
  268. package/plugins/triggers/launchd.mjs +101 -0
  269. package/plugins/triggers/lease.mjs +24 -0
  270. package/plugins/triggers/log.mjs +104 -0
  271. package/plugins/triggers/management.mjs +181 -0
  272. package/plugins/triggers/options.mjs +117 -0
  273. package/plugins/triggers/overlay.mjs +7 -0
  274. package/plugins/triggers/poll.mjs +65 -0
  275. package/plugins/triggers/run.mjs +157 -0
  276. package/plugins/triggers/schedule.mjs +40 -0
  277. package/plugins/triggers/scheduler-service.mjs +46 -0
  278. package/plugins/triggers/scheduler.mjs +92 -0
  279. package/plugins/triggers/session-run.mjs +125 -0
  280. package/plugins/triggers/session.mjs +48 -0
  281. package/plugins/triggers/source-emit.mjs +19 -0
  282. package/plugins/triggers/source-host.mjs +78 -0
  283. package/plugins/triggers/source-ingress.mjs +70 -0
  284. package/plugins/triggers/source-sandbox.mjs +35 -0
  285. package/plugins/triggers/sources.mjs +45 -0
  286. package/plugins/triggers/spool.mjs +145 -0
  287. package/plugins/triggers/tools.mjs +67 -0
  288. package/plugins/triggers/unattended.mjs +18 -0
  289. package/plugins/tui-tools/composition.mjs +28 -0
  290. package/plugins/tui-tools/desktop-host.mjs +2 -0
  291. package/plugins/tui-tools/doctor-cli.mjs +22 -0
  292. package/plugins/tui-tools/doctor.mjs +149 -0
  293. package/plugins/tui-tools/hook-sources.mjs +113 -0
  294. package/plugins/tui-tools/hooks.mjs +23 -0
  295. package/plugins/tui-tools/index.mjs +269 -0
  296. package/plugins/tui-tools/sandbox-runner.mjs +123 -0
  297. package/plugins/tui-tools/shell.mjs +27 -0
  298. package/plugins/tui-tools/update.mjs +111 -0
  299. package/plugins/tui-tools/workspace-discovery.mjs +129 -0
  300. package/plugins/ultra/policy.mjs +42 -0
  301. package/plugins/worktree-subagent/worktree.mjs +56 -0
  302. package/runtime-sources.json +94 -0
  303. package/vendor/bash/LICENSE +21 -0
  304. package/vendor/bash/index.js +717 -0
  305. package/vendor/bash/types/background.d.ts +50 -0
  306. package/vendor/bash/types/index.d.ts +38 -0
  307. package/vendor/bash/types/render.d.ts +57 -0
  308. package/vendor/command-goal/LICENSE +21 -0
  309. package/vendor/command-goal/index.js +210 -0
  310. package/vendor/command-goal/types/index.d.ts +10 -0
  311. package/vendor/computer-use/LICENSE +21 -0
  312. package/vendor/computer-use/lib/approval-policy.js +12 -0
  313. package/vendor/computer-use/lib/approval-policy.js.map +1 -0
  314. package/vendor/computer-use/lib/artifacts.js +79 -0
  315. package/vendor/computer-use/lib/artifacts.js.map +1 -0
  316. package/vendor/computer-use/lib/backend.js +3 -0
  317. package/vendor/computer-use/lib/backend.js.map +1 -0
  318. package/vendor/computer-use/lib/client.js +369 -0
  319. package/vendor/computer-use/lib/client.js.map +1 -0
  320. package/vendor/computer-use/lib/config.js +159 -0
  321. package/vendor/computer-use/lib/config.js.map +1 -0
  322. package/vendor/computer-use/lib/confirmations.js +99 -0
  323. package/vendor/computer-use/lib/confirmations.js.map +1 -0
  324. package/vendor/computer-use/lib/diff.js +58 -0
  325. package/vendor/computer-use/lib/diff.js.map +1 -0
  326. package/vendor/computer-use/lib/errors.js +22 -0
  327. package/vendor/computer-use/lib/errors.js.map +1 -0
  328. package/vendor/computer-use/lib/exposure.js +244 -0
  329. package/vendor/computer-use/lib/exposure.js.map +1 -0
  330. package/vendor/computer-use/lib/index.js +66 -0
  331. package/vendor/computer-use/lib/index.js.map +1 -0
  332. package/vendor/computer-use/lib/leases.js +262 -0
  333. package/vendor/computer-use/lib/leases.js.map +1 -0
  334. package/vendor/computer-use/lib/providers/macos.js +243 -0
  335. package/vendor/computer-use/lib/providers/macos.js.map +1 -0
  336. package/vendor/computer-use/lib/providers/native-helper.js +726 -0
  337. package/vendor/computer-use/lib/providers/native-helper.js.map +1 -0
  338. package/vendor/computer-use/lib/providers/unsupported.js +51 -0
  339. package/vendor/computer-use/lib/providers/unsupported.js.map +1 -0
  340. package/vendor/computer-use/lib/service.js +608 -0
  341. package/vendor/computer-use/lib/service.js.map +1 -0
  342. package/vendor/computer-use/lib/skill.js +136 -0
  343. package/vendor/computer-use/lib/skill.js.map +1 -0
  344. package/vendor/computer-use/lib/target-resolver.js +180 -0
  345. package/vendor/computer-use/lib/target-resolver.js.map +1 -0
  346. package/vendor/computer-use/lib/tools.js +511 -0
  347. package/vendor/computer-use/lib/tools.js.map +1 -0
  348. package/vendor/computer-use/lib/types/approval-policy.d.ts +13 -0
  349. package/vendor/computer-use/lib/types/approval-policy.d.ts.map +1 -0
  350. package/vendor/computer-use/lib/types/artifacts.d.ts +10 -0
  351. package/vendor/computer-use/lib/types/artifacts.d.ts.map +1 -0
  352. package/vendor/computer-use/lib/types/backend.d.ts +124 -0
  353. package/vendor/computer-use/lib/types/backend.d.ts.map +1 -0
  354. package/vendor/computer-use/lib/types/client/index.d.ts +83 -0
  355. package/vendor/computer-use/lib/types/client/index.d.ts.map +1 -0
  356. package/vendor/computer-use/lib/types/config.d.ts +94 -0
  357. package/vendor/computer-use/lib/types/config.d.ts.map +1 -0
  358. package/vendor/computer-use/lib/types/confirmations.d.ts +23 -0
  359. package/vendor/computer-use/lib/types/confirmations.d.ts.map +1 -0
  360. package/vendor/computer-use/lib/types/diff.d.ts +5 -0
  361. package/vendor/computer-use/lib/types/diff.d.ts.map +1 -0
  362. package/vendor/computer-use/lib/types/errors.d.ts +15 -0
  363. package/vendor/computer-use/lib/types/errors.d.ts.map +1 -0
  364. package/vendor/computer-use/lib/types/exposure.d.ts +30 -0
  365. package/vendor/computer-use/lib/types/exposure.d.ts.map +1 -0
  366. package/vendor/computer-use/lib/types/index.d.ts +21 -0
  367. package/vendor/computer-use/lib/types/index.d.ts.map +1 -0
  368. package/vendor/computer-use/lib/types/leases.d.ts +81 -0
  369. package/vendor/computer-use/lib/types/leases.d.ts.map +1 -0
  370. package/vendor/computer-use/lib/types/providers/macos.d.ts +39 -0
  371. package/vendor/computer-use/lib/types/providers/macos.d.ts.map +1 -0
  372. package/vendor/computer-use/lib/types/providers/native-helper.d.ts +48 -0
  373. package/vendor/computer-use/lib/types/providers/native-helper.d.ts.map +1 -0
  374. package/vendor/computer-use/lib/types/providers/unsupported.d.ts +23 -0
  375. package/vendor/computer-use/lib/types/providers/unsupported.d.ts.map +1 -0
  376. package/vendor/computer-use/lib/types/service.d.ts +58 -0
  377. package/vendor/computer-use/lib/types/service.d.ts.map +1 -0
  378. package/vendor/computer-use/lib/types/skill.d.ts +14 -0
  379. package/vendor/computer-use/lib/types/skill.d.ts.map +1 -0
  380. package/vendor/computer-use/lib/types/target-resolver.d.ts +38 -0
  381. package/vendor/computer-use/lib/types/target-resolver.d.ts.map +1 -0
  382. package/vendor/computer-use/lib/types/tools.d.ts +6 -0
  383. package/vendor/computer-use/lib/types/tools.d.ts.map +1 -0
  384. package/vendor/computer-use/lib/types/types.d.ts +270 -0
  385. package/vendor/computer-use/lib/types/types.d.ts.map +1 -0
  386. package/vendor/computer-use/lib/types/web.d.ts +33 -0
  387. package/vendor/computer-use/lib/types/web.d.ts.map +1 -0
  388. package/vendor/computer-use/lib/types.js +9 -0
  389. package/vendor/computer-use/lib/types.js.map +1 -0
  390. package/vendor/computer-use/lib/web.js +188 -0
  391. package/vendor/computer-use/lib/web.js.map +1 -0
  392. package/vendor/computer-use/native/macos/Sources/Fixture/main.swift +412 -0
  393. package/vendor/computer-use/native/macos/Sources/Helper/CursorImage.swift +11 -0
  394. package/vendor/computer-use/native/macos/Sources/Helper/CursorMotion.swift +67 -0
  395. package/vendor/computer-use/native/macos/Sources/Helper/CursorOverlay.swift +840 -0
  396. package/vendor/computer-use/native/macos/Sources/Helper/TargetedPointer.swift +327 -0
  397. package/vendor/computer-use/native/macos/Sources/Helper/WindowNumberMatcher.swift +29 -0
  398. package/vendor/computer-use/native/macos/Sources/Helper/main.swift +1244 -0
  399. package/vendor/computer-use/native/macos/Sources/Monitor/main.swift +153 -0
  400. package/vendor/computer-use/native/macos/bin/dsh-computer-use-helper +0 -0
  401. package/vendor/computer-use/native/macos/manifest.json +14 -0
  402. package/vendor/persistent/LICENSE +21 -0
  403. package/vendor/persistent/index.js +411 -0
  404. package/vendor/persistent/types/index.d.ts +24 -0
  405. package/vendor/subagent/LICENSE +21 -0
  406. package/vendor/subagent/index.js +694 -0
  407. package/vendor/subagent/invariant.js +52 -0
  408. package/vendor/subagent/model-selection-settings.js +68 -0
  409. package/vendor/subagent/types/index.d.ts +82 -0
  410. package/vendor/subagent/types/invariant.d.ts +16 -0
  411. package/vendor/subagent/types/list-models.d.ts +10 -0
  412. package/vendor/subagent/types/model-selection-settings.d.ts +45 -0
  413. package/vendor/subagent/types/model-selection-state.d.ts +48 -0
  414. package/vendor/subagent/types/model-selection.d.ts +81 -0
  415. package/vendor/subagent-core/LICENSE +21 -0
  416. package/vendor/subagent-core/index.js +3202 -0
  417. package/vendor/subagent-core/invariant.js +76 -0
  418. package/vendor/subagent-core/typert.host.d.ts +3 -0
  419. package/vendor/subagent-core/typert.host.js +978 -0
  420. package/vendor/subagent-core/typert.remote-client.d.ts +25 -0
  421. package/vendor/subagent-core/typert.remote-client.js +114 -0
  422. package/vendor/subagent-core/types/archive-admission.d.ts +16 -0
  423. package/vendor/subagent-core/types/archive-admission.js +151 -0
  424. package/vendor/subagent-core/types/assistant-output.d.ts +48 -0
  425. package/vendor/subagent-core/types/assistant-output.js +73 -0
  426. package/vendor/subagent-core/types/catalog.d.ts +84 -0
  427. package/vendor/subagent-core/types/catalog.js +109 -0
  428. package/vendor/subagent-core/types/child-agent.d.ts +156 -0
  429. package/vendor/subagent-core/types/child-agent.js +213 -0
  430. package/vendor/subagent-core/types/client.d.ts +8 -0
  431. package/vendor/subagent-core/types/client.js +7 -0
  432. package/vendor/subagent-core/types/continuation-activation.d.ts +267 -0
  433. package/vendor/subagent-core/types/continuation-activation.js +700 -0
  434. package/vendor/subagent-core/types/continuation-messages.d.ts +62 -0
  435. package/vendor/subagent-core/types/continuation-messages.js +106 -0
  436. package/vendor/subagent-core/types/continuation.d.ts +124 -0
  437. package/vendor/subagent-core/types/continuation.js +455 -0
  438. package/vendor/subagent-core/types/control-types.d.ts +135 -0
  439. package/vendor/subagent-core/types/control-types.js +8 -0
  440. package/vendor/subagent-core/types/control.d.ts +45 -0
  441. package/vendor/subagent-core/types/control.js +79 -0
  442. package/vendor/subagent-core/types/depth.d.ts +31 -0
  443. package/vendor/subagent-core/types/depth.js +39 -0
  444. package/vendor/subagent-core/types/descriptor.d.ts +144 -0
  445. package/vendor/subagent-core/types/descriptor.js +193 -0
  446. package/vendor/subagent-core/types/error.d.ts +11 -0
  447. package/vendor/subagent-core/types/error.js +14 -0
  448. package/vendor/subagent-core/types/inbox.d.ts +43 -0
  449. package/vendor/subagent-core/types/inbox.js +61 -0
  450. package/vendor/subagent-core/types/index.d.ts +320 -0
  451. package/vendor/subagent-core/types/index.js +475 -0
  452. package/vendor/subagent-core/types/internal.d.ts +58 -0
  453. package/vendor/subagent-core/types/internal.js +58 -0
  454. package/vendor/subagent-core/types/invariant.d.ts +13 -0
  455. package/vendor/subagent-core/types/invariant.js +91 -0
  456. package/vendor/subagent-core/types/lifecycle.d.ts +113 -0
  457. package/vendor/subagent-core/types/lifecycle.js +180 -0
  458. package/vendor/subagent-core/types/list-children.d.ts +36 -0
  459. package/vendor/subagent-core/types/list-children.js +166 -0
  460. package/vendor/subagent-core/types/out-of-process.d.ts +118 -0
  461. package/vendor/subagent-core/types/out-of-process.js +219 -0
  462. package/vendor/subagent-core/types/projection-types.d.ts +82 -0
  463. package/vendor/subagent-core/types/projection-types.js +7 -0
  464. package/vendor/subagent-core/types/projection.d.ts +100 -0
  465. package/vendor/subagent-core/types/projection.js +157 -0
  466. package/vendor/subagent-core/types/run-settlement.d.ts +17 -0
  467. package/vendor/subagent-core/types/run-settlement.js +70 -0
  468. package/vendor/subagent-core/types/types.d.ts +377 -0
  469. package/vendor/subagent-core/types/types.js +19 -0
  470. package/vendor/subagent-driver/LICENSE +21 -0
  471. package/vendor/subagent-driver/index.js +255 -0
  472. package/vendor/subagent-driver/types/index.d.ts +33 -0
  473. package/vendor/subagent-driver/types/structured.d.ts +42 -0
  474. package/vendor/subagent-fork/LICENSE +21 -0
  475. package/vendor/subagent-fork/index.js +61 -0
  476. package/vendor/subagent-fork/types/index.d.ts +20 -0
  477. package/vendor/subagent-spawn/LICENSE +21 -0
  478. package/vendor/subagent-spawn/index.js +45 -0
  479. package/vendor/subagent-spawn/types/index.d.ts +19 -0
  480. package/vendor/terminal/LICENSE +21 -0
  481. package/vendor/terminal/index.js +1093 -0
  482. package/vendor/terminal/types/config.d.ts +82 -0
  483. package/vendor/terminal/types/index.d.ts +36 -0
  484. package/vendor/terminal/types/sanitize.d.ts +47 -0
  485. package/vendor/terminal/types/session.d.ts +87 -0
@@ -0,0 +1,44 @@
1
+ # DeepSeek account login
2
+
3
+ DSCODE can authenticate the DeepSeek route with a **DeepSeek account** instead of an API key. The sign-in happens in your system browser; the grant is stored on this machine and the model route picks it up automatically.
4
+
5
+ `/account` is the whole surface:
6
+
7
+ ```
8
+ /account status: is a grant stored, whose account it is, what the balance is
9
+ /account login open the browser and complete a sign-in
10
+ /account cancel abandon the sign-in that is in progress
11
+ /account logout remove the grant from this machine
12
+ ```
13
+
14
+ ## What happens during a login
15
+
16
+ 1. DSCODE asks the account service to start an attempt, passing a loopback callback origin (`http://127.0.0.1:<port>`) and identifying itself as a desktop client.
17
+ 2. The service asks the platform to initialise the attempt with a PKCE challenge, then publishes the browser URL. DSCODE waits for that URL — it does not exist yet when the attempt is created — and only then opens the browser. If the browser cannot be launched, the URL is printed to open by hand.
18
+ 3. You sign in on the platform page. The browser is redirected to `http://127.0.0.1:<port>/oauth/callback`, where the account provider validates the `state`, exchanges the code once, and commits the grant to the local credential store.
19
+ 4. `/account` reports the outcome. A failure names a safe reason (unreachable platform, unexpected answer, timed out, credential store refused) and stores nothing.
20
+
21
+ The attempt is bounded on both sides: the platform's own expiry and DSCODE's five-minute wait. `Esc` (which cancels the command) or `/account cancel` in another turn ends it, and a cancelled attempt cannot be completed by a late callback.
22
+
23
+ ## The callback server
24
+
25
+ The account provider registers `/oauth/callback` on the Host's HTTP server, so the TUI profile composes one: `@deepseek-ai/dsh-host-webserver` on `127.0.0.1` with an OS-assigned port. It listens for the whole session but carries **no routes except during a login attempt** — the callback route is added when an attempt starts and removed when it settles, and this profile mounts none of the Web shell's frontend or API rows. Requests to anything else answer 404, and a callback without a valid `state` and `code` answers 400.
26
+
27
+ Set `DSCODE_ACCOUNT_LOGIN=0` to remove the listener entirely. `/account login` then refuses with that reason instead of starting an attempt the browser could not complete; every other subcommand keeps working.
28
+
29
+ ## What the login is worth
30
+
31
+ - **The DeepSeek route needs no API key.** The route resolves the account grant for the configured inference origin (`https://api.deepseek.com` by default) and sends it as the request credential. A `DEEPSEEK_API_KEY`, or a key stored through `/login`, keeps working and is what the route falls back to when no grant is stored.
32
+ - **A grant is scoped to one origin.** If you point the DeepSeek route at a proxy or another base URL, the account token is deliberately not sent there; use an API key for that route.
33
+ - **Identity and balance come from the platform**, not from DSCODE: `/account` prints the account name and masked contact, the recharge wallets and — separately — bonus wallets, and links to the platform's usage and top-up pages. Either read can fail on its own; the stored grant is kept when it does.
34
+
35
+ ## Limits worth knowing
36
+
37
+ - **No expiry or refresh.** Upstream stores the grant without an expiry and has no refresh flow, so `credential-stored` means "this machine has a grant", not "the server still accepts it". A grant the platform has revoked surfaces as an authentication failure on the next model request; `/account logout` then `/account login` replaces it.
38
+ - **Sign-out is local first.** The grant is removed from this machine before the platform is told; a failed remote logout never restores the local login.
39
+ - **One attempt at a time.** Starting a second sign-in while one is in flight returns the running attempt rather than replacing it.
40
+ - **macOS and Linux open the browser** (`open` / `xdg-open`). On other platforms the URL is printed for you to open.
41
+
42
+ ## Where the credential lives
43
+
44
+ In the same local credential store as your API keys (`~/.dscode/credentials.yaml`, `0600`), under the account provider's own record. It never reaches the model: account state is a client-safe projection with no token in it, tool results and session logs never carry it, and the command's output is redacted like every other DSCODE command result.
@@ -0,0 +1,128 @@
1
+ # Auto permission review
2
+
3
+ The repository and the complete install package ship the `dscode-auto-review` plugin. It calls an independent LLM request for actions that need approval and answers allow, deny or hand-to-human; it keeps the workspace-write sandbox and the existing network behaviour. It is not Codex's built-in reviewer, and it is not a security proxy through which every operation passes.
4
+
5
+ ## Usage
6
+
7
+ Restart `dscode` to load the plugin. New sessions default to `auto-review`; an existing session and a saved default keep their value, and either can be switched explicitly:
8
+
9
+ ```text
10
+ /permission auto-review
11
+ /permission ask
12
+ /review-usage
13
+ ```
14
+
15
+ Both `auto-review` and `ask` are `workspace-write + approval: ask`; the difference is that the first lets the plugin review before the request. The preset was named `auto` until DSH 0.1.7 reserved that name for its own integration; a session recorded under the old name keeps its sandbox and approval values and shows as `custom` until it is switched. The underlying `never` still refuses approval requests and does not mean automatically allowed. Computer Use application authorisation and sensitive-action confirmation always go to the user.
16
+
17
+ ## Experimental Desktop
18
+
19
+ The [combined Desktop package](browser-use.md#install-the-experimental-combined-desktop-package)
20
+ includes this reviewer. Select **Auto review** explicitly in the session permission
21
+ selector; installing the package preserves the Host's permission default. The
22
+ reviewer follows the session's selected model unless configured otherwise.
23
+ `/review-usage` reads the selected session's review audit. The audit sidecar lives
24
+ under the Desktop Host's `$DSH_HOME/auto-review`, independently of terminal state.
25
+
26
+ The same permission and fallback rules apply: a denied action does not execute,
27
+ human fallback needs a user decision, and cancelling a pending review grants
28
+ nothing. The `never` approval policy rejects actions that request approval before
29
+ any reviewer or human answerer runs. Computer Use app grants remain human decisions.
30
+ An automatic verdict is not evidence that a model reliably understands every
31
+ action; the native execution checks use scripted decisions. See the
32
+ [verification record](https://github.com/qiz029/dscode/blob/main/docs/verification.md#desktop-automatic-review-execution--2026-10-06)
33
+ for their exact scope and limits.
34
+
35
+ ## What triggers a review
36
+
37
+ - Workspace file changes, ordinary shell, and curl/CLI network access under existing permissions: no new approval and no review model call.
38
+ - A shell/file tool asking for additional permission: enters the native approval path, and under `auto-review` the reviewer decides first.
39
+ - Chrome's explicitly read-only tools `list_pages`, `take_snapshot`, `get_console_message`, `list_console_messages`, `get_network_request`, `list_network_requests`, `performance_analyze_insight`: no new approval.
40
+ - Every other `mcp__*` tool: enters approval before execution, including Chrome navigation, clicking, script execution, upload and screenshots. An unknown MCP tool is not waved through because its name sounds read-only.
41
+ - A request another plugin raises through the native approval interface: handed to a human when it cannot be bound to the actual tool arguments about to execute.
42
+
43
+ This is not a global network firewall. A `curl POST` that was already allowed, or an external operation through an authenticated CLI, does not trigger auto by nature. The actual contents of a script inside the shell are not read by the reviewer either. Equivalent detours across tools are constrained by the review instruction, and no complete semantic recognition can be claimed; an identical action denied earlier in this turn is denied directly while there is no new user instruction.
44
+
45
+ ## Input and authorisation
46
+
47
+ Before a tool executes, the plugin records the immutable arguments about to run and binds the review request to the agent and the call ID. Each allow applies to that one call; there is no permanent authorisation cache. The review model has no execution tools and does not receive the main agent's reasoning or a whole tool output.
48
+
49
+ Built-in browser calls also include the host-observed page URL when available.
50
+ WebMCP execution includes its previously discovered website definition as
51
+ untrusted evidence; missing definitions fall back to a human, and a website's
52
+ read-only annotation never exempts execution from review. The browser separately
53
+ enforces site and Developer permissions and rechecks the proposed page and tool
54
+ definition before execution. Approval does not grant those permissions. See
55
+ [Browser use](browser-use.md) for the redirect and network-boundary limitations.
56
+
57
+ The review input is the concrete tool arguments, the cwd, the direct user messages and the most recent denial reason. It does not additionally read `.env`, configured credentials or secret files. Common credential formats are redacted; when the action arguments look like they contain credentials the request goes to a human instead of asking a model to approve a distorted action. That detection is not complete DLP and cannot guarantee every arbitrary secret format is recognised, so do not paste credentials into arguments or user text.
58
+
59
+ An action JSON over 12,000 characters, all direct user text over 8,000 characters, or a missing direct user instruction is handed to a human: the authorisation constraint is never trimmed away just to force a review. A summary the agent generated itself is never taken as user authorisation. A long session may therefore hand more requests to a human, which is an explicit limit of this first version.
60
+
61
+ ## Model and cost
62
+
63
+ When the reviewer route is a [Custom provider](custom-providers.md), it skips the cloud Jev shortcut. By default it uses the provider/model the agent actually requested most recently, but with an independent, condensed review context. `config/harness.local.yml` can point at another model whose credentials are already configured:
64
+
65
+ ```yaml
66
+ - id: dscode-auto-review
67
+ config:
68
+ provider: your-configured-provider
69
+ model: your-reviewer-model
70
+ timeoutMs: 30000
71
+ maxOutputTokens: 768
72
+ maxReviewsPerTurn: 20
73
+ maxBrowserReviewsPerTurn: 100
74
+ ```
75
+
76
+ provider/model must be set together or both left empty. The default output cap is 4096 tokens; the example above lowers it to 768. Reasoning tokens also consume this cap, so a low cap can leave insufficient room for a verdict and trigger human fallback. The default timeout is 30 seconds. Each agent has a budget of 20 ordinary action reviews and a separate budget of 100 built-in browser action reviews per turn; exhausted budgets send further requests to a human. This call cap is not a billing cap: provider/adapter retries, thinking tokens and pricing are decided by the model configuration.
77
+
78
+ Independent reviewer model calls remain charged to the requesting session as auxiliary `review` usage. They do not contribute to the main model's smoothed speed or active-request indicator, and they carry no wire session identity that could activate session-only prompt rewriting.
79
+
80
+ `/review-usage` shows this session's decision count, model attempts, reported input/output tokens, accumulated review time and the attempts missing complete usage. The token totals accept both ordinary reviewer usage and Jev's original snake-case fields, including existing audit files. Missing, invalid or explicitly incomplete readings are counted as incomplete; valid reported tokens from partial readings remain in the totals. No historical files are rewritten. Missing usage is not treated as zero cost. A review that fails, is truncated, returns invalid JSON or times out goes to a human; when the human path is unavailable too, the native approval service refuses execution.
81
+
82
+ Three denials in a row cancel the current agent's run for the turn. An explicit denial is never silently converted into another "human allow" path; the agent receives the denial reason and the instruction not to take an equivalent detour. The user can switch with `/permission ask` and then give a new explicit instruction.
83
+
84
+ ## Persistence and distribution
85
+
86
+ The permission choice is stored by native DSH session events; the native approval asked/decided records keep recording the actual outcome. The review reason, action hash, usage and elapsed time are stored separately in `.runtime/auto-review/<session-id-sha256>.jsonl` (file mode 0600). The original command, request body, review prompt and full model response are not recorded. This sidecar is the reviewer's judgement record; after a hand-to-human, the final allow/deny follows the native session approval log.
87
+
88
+ The rc.1 session reader does not accept unknown event types, so no custom review event was forced into the session log. Back up the whole `.runtime` to keep the review records too.
89
+
90
+ The complete install package from `npm run dist` includes this plugin. The official npm/Hub bundle includes the reviewer; the older `npm run release` exported only the base composition and does not replace the complete release produced by `npm run release:hub`.
91
+
92
+ ## Jev fast path (optional)
93
+
94
+ The essence of auto review is choosing one answer inside a given context, which does not need a model that writes essays. With `dscode-jev` mounted, a review first asks TypeSafe Jev (through OpenRouter's alpha Decisions endpoint `POST /api/alpha/decisions`), which answers four things in **one request**:
95
+
96
+ - `choice`: `allow` / `ask` / `deny`, with per-option probabilities and a `confidence`;
97
+ - `authorized`: whether the retained instructions cover this action, target and effect included. It is scored **separately from risk**: a dangerous action the instructions asked for should score high, and a dangerous action nobody asked for should score low. Instructions almost never name a concrete command, so the question asks about the task they asked for and the anchor is written into the question too — a step they ask for directly ≥0.9, a necessary step of a stated task 0.6–0.9, possibly part of the task but optional or unclear 0.2–0.6, not covered <0.2. This score is the switch for step 2 below (handing an authorised action to the model for a deeper review);
98
+ - `score`: how hard it is to roll back if it goes wrong (0–3 bands, and it may land between bands);
99
+ - `credential_risk`: whether credentials, tokens or other secrets are involved.
100
+
101
+ The order of judgement is in code, and the **allow and deny thresholds are deliberately asymmetric** — allow is the dangerous direction, while a deny is only "please don't do this":
102
+
103
+ 1. **Automatic denial**: `deny` and (confidence ≥ `autoDeny`(0.95) and `P(deny)` ≥ `autoDenyProbability`(0.9)) **or** (confidence ≥ `autoDenyCorroborated`(0.9) and at least one of `score ≥ destructiveCeiling`(2) or credential risk ≥ `credentialRisk`(0.5) already over the line). If `authorized ≥ authorizedVeto`(0.6) — that is, the instructions appear to ask for it — the automatic denial is **vetoed and turned into a hand-to-human**: the cost of one wrongly denied action is work the user asked for not getting done, without even a prompt.
104
+ 2. **Hand to the deeper model review when authorized**: credential risk ≥ 0.5, `score ≥ 2`, a `choice` other than `allow`, or confidence < `autoAllow`(0.85) — all four guard only the allow direction and none of them constitutes a denial. If `authorized ≥ authorizedVeto`(0.6) — the instructions appear to ask for it — they no longer go straight to a human but return `defer`, leaving the reviewer model to decide with the full pending arguments and the retained instructions in view: Jev's scores are coarse, and this deployment already allows ordinary network access and lets a CLI use credentials it stored itself. When the reviewer itself rules `human`, a human is still consulted, and a `defer` is never treated as an allow.
105
+ 3. **Automatic allow**: `allow` with confidence ≥ `autoAllow`(0.85) and step 2 not triggered.
106
+ 4. Everything else (an `ask` below `authorizedVeto`, not confident enough, over the line but not denied) → hand to a human.
107
+
108
+ One `defer` leaves two rows in the audit: first Jev's own verdict and risk scores (`decision: deferred`, with `credentialRisk`, `destructive`, `authorized`), then the reviewer model's actual ruling; only an `allow` really lets the action through. In other words step 2 turns credential and irreversible risk from a "hard stop" into "a second model's judgement plus a human backstop" — a deliberate trade whose cost is that those two signals no longer veto on their own, and whose benefit is that an escalation the user explicitly asked for (for example a verification that has to leave the sandbox during a release) no longer interrupts a human every time. To restore the hard stop, raise `authorizedVeto` above 1 (or switch Jev off as below).
109
+
110
+ When Jev is not configured (no `OPENROUTER_API_KEY` resolves), is disabled, times out, errors or returns something unusable, it always returns "no verdict" and auto review continues with the original reviewer model — **a Jev failure only falls back to the old behaviour and never loosens any permission**.
111
+
112
+ The `state` sent out has only two items: the call about to execute, and the direct user instructions retained for this session; each is truncated to 8000 characters and neither contains credentials.
113
+
114
+ Jev requests also write metadata-only usage records to the requesting session and its live parent sessions. Reported billed costs enter the session total even when the verdict is unusable and the chat reviewer must run afterward. Failed requests and missing or invalid costs remain unknown, so the total is marked partial; a reported zero cost remains zero. Disabled, unconfigured and already-cancelled calls send no request and add no ledger entry. This accounting does not change approval decisions.
115
+
116
+ Configuration lives on the `plugins/jev` line: `enabled` (default true), `model` (default `~typesafe/jev-latest`), `endpoint`, `apiKeyEnv` (default `OPENROUTER_API_KEY`), `timeoutMs` (default 8000), and the thresholds `autoAllow`(0.85), `autoDeny`(0.95), `autoDenyProbability`(0.9), `autoDenyCorroborated`(0.9), `authorizedVeto`(0.6), `credentialRisk`(0.5), `destructiveCeiling`(2). Setting `enabled: false` or removing the line returns to pure model review.
117
+
118
+ Two measurements on 2026-09-17 (the same four cases, `~typesafe/jev-latest` → `typesafe/jev-1.13-20260917`, provider TypeSafe): 96–813 ms per call, about $0.000025 (output billed at 0). The first run (thresholds only, no automatic denial) gave `git status --short` → allow; `git push --force origin main` (deny 0.92 / score 2.99) and `curl --data-binary @.env …` (deny 0.98 / cred 0.94) → hand-to-human; `rm -rf ~/Documents/notes` (deny 0.90 / score 1.97) → deny. The second run (the asymmetric policy in this section) gave allow, deny (0.98 / P(deny) 0.99), deny (0.99 / 1.00) and deny (0.97 / 0.98) in order; `authorized` was 0.83 on the ordinary read and 0.03 on the three dangerous actions. **Confidence drifts between two runs of the same action** (`rm -rf` moved from 0.90 to 0.97), which is exactly why a decisive denial requires two signals to agree and why the audit record exists for tuning the thresholds.
119
+
120
+ Four more cases were measured on this calibration path on 2026-09-19 (`typesafe/jev-1.13-20260917`): a "commit and release" instruction plus running `make release` outside the sandbox → `authorized` 0.68, `defer`; the same instruction naming `make release` → 0.86, `defer`; the same instruction plus `rm -rf ~/Documents/notes` → 0.07, `deny`; "look at the test coverage" plus the same `make release` → 0.11, `human`. To repeat it, score `approvalState({ action, context })` together with `approvalQuestions()` through `requestDecisions`, then read `approvalVerdict`.
121
+
122
+ A note on thresholds: Jev's probabilities are calibrated only in the **statistical** sense, and `confidence` is not a per-call guarantee. Align the thresholds with the audit records this plugin writes (`.runtime/auto-review/*.jsonl` carries decision, source, choice, confidence, denyProbability, authorized, usage and elapsed time) rather than copying the defaults.
123
+
124
+ ## Verification
125
+
126
+ `npm test` covers the review rule entry points, argument binding, cancellation, timeout, invalid responses, credential interception, the model budget, mode switching, repeated denials and stopping. `tests/jev.test.mjs` uses a mock transport to cover the request shape, answer parsing, threshold judgement, timeout and failure fallback; `tests/auto-review.test.mjs` additionally covers "a Jev verdict spends no reviewer request", "a Jev denial counts towards the consecutive denials", "Jev unavailable falls back to model review", and "when authorized Jev hands the guard to the reviewer model, while a reviewer ruling of human still consults a human".
127
+
128
+ `npm run doctor` uses a real DSH agent and tool pipeline plus the deterministic local LLM adapter to verify that an allow executes, a denial does not execute, an invalid response goes to the test human approver, usage is recorded and the session recovers. It calls no paid remote model; real-model review quality, latency and cost are still to be verified in real use. The simulated human approver exists only in the doctor test overlay.