dsh-plugin-dev-kb 1.6.0 → 1.8.1

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 (622) hide show
  1. package/CHANGELOG.md +186 -141
  2. package/README.en.md +172 -155
  3. package/README.md +183 -163
  4. package/kb/INDEX.md +236 -234
  5. package/kb/README.md +88 -83
  6. package/kb/extra/AGENTS.md +77 -77
  7. package/kb/extra/cli-help.md +15 -7
  8. package/kb/extra/cli-help.zh.md +15 -7
  9. package/kb/extra/cookbook/adding-a-plugin-preview.md +18 -25
  10. package/kb/extra/cookbook/adding-a-plugin-preview.zh.md +18 -25
  11. package/kb/extra/cookbook/reviewing-persistence-type-changes.md +1 -1
  12. package/kb/extra/cookbook/reviewing-persistence-type-changes.zh.md +1 -1
  13. package/kb/extra/cookbook/reviewing-ui-design.md +166 -0
  14. package/kb/extra/cookbook/reviewing-ui-design.zh.md +166 -0
  15. package/kb/extra/deepseek-llm-api-wire-extensions.md +162 -162
  16. package/kb/extra/deepseek-llm-api-wire-extensions.zh.md +162 -162
  17. package/kb/extra/defensive-patterns/conversation-and-session.md +2 -2
  18. package/kb/extra/defensive-patterns/conversation-and-session.zh.md +2 -2
  19. package/kb/extra/defensive-patterns/general.md +2 -0
  20. package/kb/extra/defensive-patterns/general.zh.md +2 -0
  21. package/kb/extra/defensive-patterns/package-surface.md +233 -231
  22. package/kb/extra/defensive-patterns/package-surface.zh.md +233 -231
  23. package/kb/extra/defensive-patterns/remote-and-api.md +117 -115
  24. package/kb/extra/defensive-patterns/remote-and-api.zh.md +117 -115
  25. package/kb/extra/development.md +221 -214
  26. package/kb/extra/development.zh.md +228 -221
  27. package/kb/extra/event-producer-consumer.md +133 -110
  28. package/kb/extra/event-producer-consumer.zh.md +135 -112
  29. package/kb/extra/i18n/README.md +2 -0
  30. package/kb/extra/i18n/README.zh.md +2 -0
  31. package/kb/extra/module-graph.md +1961 -1776
  32. package/kb/extra/module-graph.zh.md +1963 -1778
  33. package/kb/extra/persistence-changes/2026-10-13-liveshare-share-viewer-principal.md +60 -0
  34. package/kb/extra/persistence-changes/2026-10-13-liveshare-share-viewer-principal.zh.md +60 -0
  35. package/kb/extra/persistence-changes/2026-10-19-session-team-mode.md +48 -0
  36. package/kb/extra/persistence-changes/2026-10-19-session-team-mode.zh.md +48 -0
  37. package/kb/extra/persistence-changes/2026-10-22-action-card-status.md +60 -0
  38. package/kb/extra/persistence-changes/2026-10-22-action-card-status.zh.md +60 -0
  39. package/kb/extra/persistence-changes/2026-10-25-skill-catalog-incomplete.md +60 -0
  40. package/kb/extra/persistence-changes/2026-10-25-skill-catalog-incomplete.zh.md +60 -0
  41. package/kb/extra/persistence-changes/2026-10-27-retry-control-input.md +60 -0
  42. package/kb/extra/persistence-changes/2026-10-27-retry-control-input.zh.md +60 -0
  43. package/kb/extra/persistence-changes/2026-10-27-subagent-settlement-attribution.md +60 -0
  44. package/kb/extra/persistence-changes/2026-10-27-subagent-settlement-attribution.zh.md +60 -0
  45. package/kb/extra/persistence-changes/2026-11-02-subagent-catalog-names.md +48 -0
  46. package/kb/extra/persistence-changes/2026-11-02-subagent-catalog-names.zh.md +48 -0
  47. package/kb/extra/persistence-changes/2026-11-02-team-task-owner-names.md +48 -0
  48. package/kb/extra/persistence-changes/2026-11-02-team-task-owner-names.zh.md +48 -0
  49. package/kb/extra/persistence-changes/2026-11-05-timeline-priority-notice.md +60 -0
  50. package/kb/extra/persistence-changes/2026-11-05-timeline-priority-notice.zh.md +60 -0
  51. package/kb/extra/persistence-changes/README.md +92 -90
  52. package/kb/extra/persistence-changes/README.zh.md +92 -90
  53. package/kb/extra/persistence-changes/historical-formats/README.md +75 -75
  54. package/kb/extra/persistence-changes/historical-formats/README.zh.md +75 -75
  55. package/kb/extra/persistence-changes/releases/README.md +103 -103
  56. package/kb/extra/persistence-changes/releases/README.zh.md +103 -103
  57. package/kb/extra/rescope.md +55 -53
  58. package/kb/extra/rescope.zh.md +55 -53
  59. package/kb/extra/subsystems/agent-team.md +38 -75
  60. package/kb/extra/subsystems/agent-team.zh.md +38 -75
  61. package/kb/extra/subsystems/attachment.md +36 -13
  62. package/kb/extra/subsystems/attachment.zh.md +36 -13
  63. package/kb/extra/subsystems/boot.md +631 -447
  64. package/kb/extra/subsystems/boot.zh.md +631 -447
  65. package/kb/extra/subsystems/computer-use.md +179 -59
  66. package/kb/extra/subsystems/computer-use.zh.md +179 -59
  67. package/kb/extra/subsystems/deliverables.md +2 -0
  68. package/kb/extra/subsystems/deliverables.zh.md +2 -0
  69. package/kb/extra/subsystems/extensions.md +387 -384
  70. package/kb/extra/subsystems/extensions.zh.md +387 -384
  71. package/kb/extra/subsystems/feedback.md +418 -400
  72. package/kb/extra/subsystems/feedback.zh.md +418 -400
  73. package/kb/extra/subsystems/forge.md +2169 -0
  74. package/kb/extra/subsystems/forge.zh.md +2171 -0
  75. package/kb/extra/subsystems/liveshare.md +167 -0
  76. package/kb/extra/subsystems/liveshare.zh.md +167 -0
  77. package/kb/extra/subsystems/mcp.md +237 -139
  78. package/kb/extra/subsystems/mcp.zh.md +237 -139
  79. package/kb/extra/subsystems/office-kit.md +122 -0
  80. package/kb/extra/subsystems/office-kit.zh.md +122 -0
  81. package/kb/extra/subsystems/working-directory.md +95 -64
  82. package/kb/extra/subsystems/working-directory.zh.md +95 -64
  83. package/kb/extra/subsystems/worktrees.md +187 -76
  84. package/kb/extra/subsystems/worktrees.zh.md +187 -76
  85. package/kb/extra/testing.md +1 -1
  86. package/kb/extra/testing.zh.md +1 -1
  87. package/kb/extra/ui-design-review-cases.md +445 -0
  88. package/kb/extra/ui-design-review-cases.zh.md +445 -0
  89. package/kb/extra/ui-radius.md +3 -1
  90. package/kb/extra/ui-radius.zh.md +3 -1
  91. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/python-ptc-sandbox/guide.md +21 -21
  92. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/python-ptc-sandbox/guide.zh.md +21 -21
  93. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.md +1 -1
  94. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.zh.md +1 -1
  95. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/cordis-timer-wrappers/guide.md +24 -0
  96. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/cordis-timer-wrappers/guide.zh.md +24 -0
  97. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/plugin-manager-view-fields/guide.md +25 -0
  98. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/plugin-manager-view-fields/guide.zh.md +25 -0
  99. package/kb/extra/upgrade-guide/v0.2.1-alpha.4/model-switch-compaction/guide.md +30 -0
  100. package/kb/extra/upgrade-guide/v0.2.1-alpha.4/model-switch-compaction/guide.zh.md +30 -0
  101. package/kb/extra/upgrade-guide/v0.2.1-alpha.4/session-model-selection/guide.md +28 -0
  102. package/kb/extra/upgrade-guide/v0.2.1-alpha.4/session-model-selection/guide.zh.md +28 -0
  103. package/kb/extra/upgrade-guide/v0.2.1-rc.1/agent-instructions-chain-budgets/guide.md +24 -0
  104. package/kb/extra/upgrade-guide/v0.2.1-rc.1/agent-instructions-chain-budgets/guide.zh.md +24 -0
  105. package/kb/extra/upgrade-guide/v0.2.1-rc.1/subagent-control-tools/guide.md +23 -0
  106. package/kb/extra/upgrade-guide/v0.2.1-rc.1/subagent-control-tools/guide.zh.md +23 -0
  107. package/kb/extra/upgrade-guide/v0.2.1-rc.2/agent-runtime-owner/guide.md +20 -0
  108. package/kb/extra/upgrade-guide/v0.2.1-rc.2/agent-runtime-owner/guide.zh.md +20 -0
  109. package/kb/extra/upgrade-guide/v0.2.1-rc.2/agent-team-subagents/guide.md +31 -0
  110. package/kb/extra/upgrade-guide/v0.2.1-rc.2/agent-team-subagents/guide.zh.md +31 -0
  111. package/kb/extra/upgrade-guide/v0.2.1-rc.2/approval-projection-dependency/guide.md +34 -0
  112. package/kb/extra/upgrade-guide/v0.2.1-rc.2/approval-projection-dependency/guide.zh.md +34 -0
  113. package/kb/extra/upgrade-guide/v0.2.1-rc.2/auto-review-shutdown/guide.md +20 -0
  114. package/kb/extra/upgrade-guide/v0.2.1-rc.2/auto-review-shutdown/guide.zh.md +20 -0
  115. package/kb/extra/upgrade-guide/v0.2.1-rc.2/auto-review-user-sources/guide.md +18 -0
  116. package/kb/extra/upgrade-guide/v0.2.1-rc.2/auto-review-user-sources/guide.zh.md +18 -0
  117. package/kb/extra/upgrade-guide/v0.2.1-rc.2/built-in-japanese/guide.md +18 -0
  118. package/kb/extra/upgrade-guide/v0.2.1-rc.2/built-in-japanese/guide.zh.md +18 -0
  119. package/kb/extra/upgrade-guide/v0.2.1-rc.2/conditional-tools/guide.md +25 -0
  120. package/kb/extra/upgrade-guide/v0.2.1-rc.2/conditional-tools/guide.zh.md +25 -0
  121. package/kb/extra/upgrade-guide/v0.2.1-rc.2/context-menu-services/guide.md +23 -0
  122. package/kb/extra/upgrade-guide/v0.2.1-rc.2/context-menu-services/guide.zh.md +23 -0
  123. package/kb/extra/upgrade-guide/v0.2.1-rc.2/cua-consent-storage/guide.md +22 -0
  124. package/kb/extra/upgrade-guide/v0.2.1-rc.2/cua-consent-storage/guide.zh.md +22 -0
  125. package/kb/extra/upgrade-guide/v0.2.1-rc.2/cua-preset-scope/guide.md +18 -0
  126. package/kb/extra/upgrade-guide/v0.2.1-rc.2/cua-preset-scope/guide.zh.md +18 -0
  127. package/kb/extra/upgrade-guide/v0.2.1-rc.2/cua-relative-coordinates/guide.md +17 -0
  128. package/kb/extra/upgrade-guide/v0.2.1-rc.2/cua-relative-coordinates/guide.zh.md +17 -0
  129. package/kb/extra/upgrade-guide/v0.2.1-rc.2/file-drag-callbacks/guide.md +19 -0
  130. package/kb/extra/upgrade-guide/v0.2.1-rc.2/file-drag-callbacks/guide.zh.md +19 -0
  131. package/kb/extra/upgrade-guide/v0.2.1-rc.2/headless-policy-composition/guide.md +27 -0
  132. package/kb/extra/upgrade-guide/v0.2.1-rc.2/headless-policy-composition/guide.zh.md +27 -0
  133. package/kb/extra/upgrade-guide/v0.2.1-rc.2/model-badge-package-removal/guide.md +18 -0
  134. package/kb/extra/upgrade-guide/v0.2.1-rc.2/model-badge-package-removal/guide.zh.md +18 -0
  135. package/kb/extra/upgrade-guide/v0.2.1-rc.2/new-session-blank-reuse/guide.md +22 -0
  136. package/kb/extra/upgrade-guide/v0.2.1-rc.2/new-session-blank-reuse/guide.zh.md +22 -0
  137. package/kb/extra/upgrade-guide/v0.2.1-rc.2/node-24/guide.md +17 -0
  138. package/kb/extra/upgrade-guide/v0.2.1-rc.2/node-24/guide.zh.md +17 -0
  139. package/kb/extra/upgrade-guide/v0.2.1-rc.2/official-bundle-lists/guide.md +18 -0
  140. package/kb/extra/upgrade-guide/v0.2.1-rc.2/official-bundle-lists/guide.zh.md +18 -0
  141. package/kb/extra/upgrade-guide/v0.2.1-rc.2/persistent-terminal-controls/guide.md +18 -0
  142. package/kb/extra/upgrade-guide/v0.2.1-rc.2/persistent-terminal-controls/guide.zh.md +18 -0
  143. package/kb/extra/upgrade-guide/v0.2.1-rc.2/pi-ai-default-capacities/guide.md +18 -0
  144. package/kb/extra/upgrade-guide/v0.2.1-rc.2/pi-ai-default-capacities/guide.zh.md +18 -0
  145. package/kb/extra/upgrade-guide/v0.2.1-rc.2/pi-ai-model-catalog/guide.md +53 -0
  146. package/kb/extra/upgrade-guide/v0.2.1-rc.2/pi-ai-model-catalog/guide.zh.md +53 -0
  147. package/kb/extra/upgrade-guide/v0.2.1-rc.2/pi-ai-protocol-replay/guide.md +30 -0
  148. package/kb/extra/upgrade-guide/v0.2.1-rc.2/pi-ai-protocol-replay/guide.zh.md +30 -0
  149. package/kb/extra/upgrade-guide/v0.2.1-rc.2/ptc-script-format/guide.md +20 -0
  150. package/kb/extra/upgrade-guide/v0.2.1-rc.2/ptc-script-format/guide.zh.md +20 -0
  151. package/kb/extra/upgrade-guide/v0.2.1-rc.2/sdk-desktop-context/guide.md +18 -0
  152. package/kb/extra/upgrade-guide/v0.2.1-rc.2/sdk-desktop-context/guide.zh.md +18 -0
  153. package/kb/extra/upgrade-guide/v0.2.1-rc.2/sdk-minimal-checkpoints/guide.md +18 -0
  154. package/kb/extra/upgrade-guide/v0.2.1-rc.2/sdk-minimal-checkpoints/guide.zh.md +18 -0
  155. package/kb/extra/upgrade-guide/v0.2.1-rc.2/session-projection-handles/guide.md +24 -0
  156. package/kb/extra/upgrade-guide/v0.2.1-rc.2/session-projection-handles/guide.zh.md +24 -0
  157. package/kb/extra/upgrade-guide/v0.2.1-rc.2/session-store-writes/guide.md +25 -0
  158. package/kb/extra/upgrade-guide/v0.2.1-rc.2/session-store-writes/guide.zh.md +25 -0
  159. package/kb/extra/upgrade-guide/v0.2.1-rc.2/session-team-mode/guide.md +22 -0
  160. package/kb/extra/upgrade-guide/v0.2.1-rc.2/session-team-mode/guide.zh.md +22 -0
  161. package/kb/extra/upgrade-guide/v0.2.1-rc.2/subagent-activation-options/guide.md +18 -0
  162. package/kb/extra/upgrade-guide/v0.2.1-rc.2/subagent-activation-options/guide.zh.md +18 -0
  163. package/kb/extra/upgrade-guide/v0.2.1-rc.2/subagent-service-methods/guide.md +19 -0
  164. package/kb/extra/upgrade-guide/v0.2.1-rc.2/subagent-service-methods/guide.zh.md +19 -0
  165. package/kb/extra/upgrade-guide/v0.2.1-rc.2/subagent-user-controls/guide.md +26 -0
  166. package/kb/extra/upgrade-guide/v0.2.1-rc.2/subagent-user-controls/guide.zh.md +26 -0
  167. package/kb/extra/upgrade-guide/v0.2.1-rc.2/tool-executor-plugins/guide.md +35 -0
  168. package/kb/extra/upgrade-guide/v0.2.1-rc.2/tool-executor-plugins/guide.zh.md +35 -0
  169. package/kb/extra/upgrade-guide/v0.2.1-rc.2/web-fetch-private-destinations/guide.md +21 -0
  170. package/kb/extra/upgrade-guide/v0.2.1-rc.2/web-fetch-private-destinations/guide.zh.md +21 -0
  171. package/kb/extra/upgrade-guide/v0.2.1-rc.2/webserver-index-peer/guide.md +17 -0
  172. package/kb/extra/upgrade-guide/v0.2.1-rc.2/webserver-index-peer/guide.zh.md +17 -0
  173. package/kb/extra/upgrade-guide/v0.2.1-rc.3/attachment-read-access/guide.md +23 -0
  174. package/kb/extra/upgrade-guide/v0.2.1-rc.3/attachment-read-access/guide.zh.md +23 -0
  175. package/kb/extra/upgrade-guide/v0.2.1-rc.3/computer-use-helper-permissions/guide.md +21 -0
  176. package/kb/extra/upgrade-guide/v0.2.1-rc.3/computer-use-helper-permissions/guide.zh.md +21 -0
  177. package/kb/extra/upgrade-guide/v0.2.1-rc.3/cua-bundle-id-consent/guide.md +20 -0
  178. package/kb/extra/upgrade-guide/v0.2.1-rc.3/cua-bundle-id-consent/guide.zh.md +20 -0
  179. package/kb/extra/upgrade-guide/v0.2.1-rc.3/generated-worktree-names/guide.md +20 -0
  180. package/kb/extra/upgrade-guide/v0.2.1-rc.3/generated-worktree-names/guide.zh.md +20 -0
  181. package/kb/extra/upgrade-guide/v0.2.1-rc.3/inbox-only-agent-wait/guide.md +19 -0
  182. package/kb/extra/upgrade-guide/v0.2.1-rc.3/inbox-only-agent-wait/guide.zh.md +19 -0
  183. package/kb/extra/upgrade-guide/v0.2.1-rc.3/independent-session-forks/guide.md +23 -0
  184. package/kb/extra/upgrade-guide/v0.2.1-rc.3/independent-session-forks/guide.zh.md +23 -0
  185. package/kb/extra/upgrade-guide/v0.2.1-rc.3/ptc-caller-cancellation/guide.md +20 -0
  186. package/kb/extra/upgrade-guide/v0.2.1-rc.3/ptc-caller-cancellation/guide.zh.md +20 -0
  187. package/kb/extra/upgrade-guide/v0.2.1-rc.3/session-follow-activation/guide.md +21 -0
  188. package/kb/extra/upgrade-guide/v0.2.1-rc.3/session-follow-activation/guide.zh.md +21 -0
  189. package/kb/extra/upgrade-guide/v0.2.1-rc.3/subagent-runtime-ownership/guide.md +21 -0
  190. package/kb/extra/upgrade-guide/v0.2.1-rc.3/subagent-runtime-ownership/guide.zh.md +21 -0
  191. package/kb/extra/upgrade-guide/v0.2.1-rc.3/team-mode-menu/guide.md +18 -0
  192. package/kb/extra/upgrade-guide/v0.2.1-rc.3/team-mode-menu/guide.zh.md +18 -0
  193. package/kb/extra/upgrade-guide/v0.2.1-rc.3/team-projection/guide.md +20 -0
  194. package/kb/extra/upgrade-guide/v0.2.1-rc.3/team-projection/guide.zh.md +20 -0
  195. package/kb/extra/upgrade-guide/v0.2.1-rc.3/web-file-downloads/guide.md +19 -0
  196. package/kb/extra/upgrade-guide/v0.2.1-rc.3/web-file-downloads/guide.zh.md +19 -0
  197. package/kb/extra/upgrade-guide/v0.2.1-rc.3/web-search-defaults/guide.md +18 -0
  198. package/kb/extra/upgrade-guide/v0.2.1-rc.3/web-search-defaults/guide.zh.md +18 -0
  199. package/kb/extra/upgrade-guide/v0.2.1-rc.4/model-listing-refresh/guide.md +22 -0
  200. package/kb/extra/upgrade-guide/v0.2.1-rc.4/model-listing-refresh/guide.zh.md +22 -0
  201. package/kb/extra/upgrade-guide/v0.2.1-rc.4/reasoning-body-props/guide.md +20 -0
  202. package/kb/extra/upgrade-guide/v0.2.1-rc.4/reasoning-body-props/guide.zh.md +20 -0
  203. package/kb/extra/upgrade-guide/v0.2.1-rc.4/sandbox-unsupported-policy-error/guide.md +18 -0
  204. package/kb/extra/upgrade-guide/v0.2.1-rc.4/sandbox-unsupported-policy-error/guide.zh.md +18 -0
  205. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/context-menu-target/guide.md +19 -0
  206. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/context-menu-target/guide.zh.md +19 -0
  207. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/cordis-loader-entry-trees/guide.md +24 -0
  208. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/cordis-loader-entry-trees/guide.zh.md +24 -0
  209. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/css-anchored-menus/guide.md +21 -0
  210. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/css-anchored-menus/guide.zh.md +21 -0
  211. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/cua-source-dev-helper/guide.md +19 -0
  212. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/cua-source-dev-helper/guide.zh.md +19 -0
  213. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/desktop-stable-channel/guide.md +18 -0
  214. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/desktop-stable-channel/guide.zh.md +18 -0
  215. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/forge-git-permissions/guide.md +21 -0
  216. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/forge-git-permissions/guide.zh.md +21 -0
  217. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/forge-worktree-entry/guide.md +29 -0
  218. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/forge-worktree-entry/guide.zh.md +29 -0
  219. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/fs-observation-policy-default-off/guide.md +29 -0
  220. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/fs-observation-policy-default-off/guide.zh.md +29 -0
  221. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/llm-error-builtin-codes/guide.md +18 -0
  222. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/llm-error-builtin-codes/guide.zh.md +18 -0
  223. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/llm-request-purpose-declarations/guide.md +29 -0
  224. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/llm-request-purpose-declarations/guide.zh.md +29 -0
  225. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/pi-ai-request-image-count/guide.md +18 -0
  226. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/pi-ai-request-image-count/guide.zh.md +18 -0
  227. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/projection-event-frames/guide.md +32 -0
  228. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/projection-event-frames/guide.zh.md +32 -0
  229. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/projection-released-checkpoint/guide.md +30 -0
  230. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/projection-released-checkpoint/guide.zh.md +30 -0
  231. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/projection-snapshot-scope/guide.md +19 -0
  232. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/projection-snapshot-scope/guide.zh.md +19 -0
  233. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/retained-ptc-timeout/guide.md +21 -0
  234. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/retained-ptc-timeout/guide.zh.md +21 -0
  235. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/schedule-agent-tools/guide.md +37 -0
  236. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/schedule-agent-tools/guide.zh.md +37 -0
  237. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/schedule-remote-host-tasks/guide.md +22 -0
  238. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/schedule-remote-host-tasks/guide.zh.md +22 -0
  239. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/sdk-run-commands/guide.md +24 -0
  240. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/sdk-run-commands/guide.zh.md +24 -0
  241. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/session-header-menu/guide.md +20 -0
  242. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/session-header-menu/guide.zh.md +20 -0
  243. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/subagent-explicit-reasoning/guide.md +20 -0
  244. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/subagent-explicit-reasoning/guide.zh.md +20 -0
  245. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/web-search-credential-modes/guide.md +17 -0
  246. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/web-search-credential-modes/guide.zh.md +17 -0
  247. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/web-search-default-provider/guide.md +19 -0
  248. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/web-search-default-provider/guide.zh.md +19 -0
  249. package/kb/extra/upgrade-guide/v0.2.2-alpha.3/chat-process-activity-context/guide.md +18 -0
  250. package/kb/extra/upgrade-guide/v0.2.2-alpha.3/chat-process-activity-context/guide.zh.md +18 -0
  251. package/kb/extra/upgrade-guide/v0.2.2-alpha.3/office-kit-package/guide.md +34 -0
  252. package/kb/extra/upgrade-guide/v0.2.2-alpha.3/office-kit-package/guide.zh.md +34 -0
  253. package/kb/extra/upgrade-guide/v0.2.2-alpha.3/office-operation-tools/guide.md +49 -0
  254. package/kb/extra/upgrade-guide/v0.2.2-alpha.3/office-operation-tools/guide.zh.md +49 -0
  255. package/kb/extra/upgrade-guide/v0.2.2-alpha.3/office-skill-resources/guide.md +36 -0
  256. package/kb/extra/upgrade-guide/v0.2.2-alpha.3/office-skill-resources/guide.zh.md +36 -0
  257. package/kb/extra/upgrade-guide/v0.2.2-alpha.3/subagent-names/guide.md +29 -0
  258. package/kb/extra/upgrade-guide/v0.2.2-alpha.3/subagent-names/guide.zh.md +29 -0
  259. package/kb/extra/upgrade-guide/v0.2.2-rc.1/account-notification-fields/guide.md +26 -0
  260. package/kb/extra/upgrade-guide/v0.2.2-rc.1/account-notification-fields/guide.zh.md +26 -0
  261. package/kb/extra/upgrade-guide/v0.2.2-rc.1/account-remote-provider/guide.md +22 -0
  262. package/kb/extra/upgrade-guide/v0.2.2-rc.1/account-remote-provider/guide.zh.md +22 -0
  263. package/kb/extra/upgrade-guide/v0.2.2-rc.1/archive-worktrees/guide.md +21 -0
  264. package/kb/extra/upgrade-guide/v0.2.2-rc.1/archive-worktrees/guide.zh.md +21 -0
  265. package/kb/extra/upgrade-guide/v0.2.2-rc.1/attachment-error-codes/guide.md +23 -0
  266. package/kb/extra/upgrade-guide/v0.2.2-rc.1/attachment-error-codes/guide.zh.md +23 -0
  267. package/kb/extra/upgrade-guide/v0.2.2-rc.1/cua-ax-read-limits/guide.md +20 -0
  268. package/kb/extra/upgrade-guide/v0.2.2-rc.1/cua-ax-read-limits/guide.zh.md +20 -0
  269. package/kb/extra/upgrade-guide/v0.2.2-rc.1/cua-hover-ax-only/guide.md +18 -0
  270. package/kb/extra/upgrade-guide/v0.2.2-rc.1/cua-hover-ax-only/guide.zh.md +18 -0
  271. package/kb/extra/upgrade-guide/v0.2.2-rc.1/cua-native-platform/guide.md +23 -0
  272. package/kb/extra/upgrade-guide/v0.2.2-rc.1/cua-native-platform/guide.zh.md +23 -0
  273. package/kb/extra/upgrade-guide/v0.2.2-rc.1/dsh-doc-skill/guide.md +35 -0
  274. package/kb/extra/upgrade-guide/v0.2.2-rc.1/dsh-doc-skill/guide.zh.md +35 -0
  275. package/kb/extra/upgrade-guide/v0.2.2-rc.1/forge-change-request-overview/guide.md +26 -0
  276. package/kb/extra/upgrade-guide/v0.2.2-rc.1/forge-change-request-overview/guide.zh.md +26 -0
  277. package/kb/extra/upgrade-guide/v0.2.2-rc.1/forge-pinned-diff/guide.md +26 -0
  278. package/kb/extra/upgrade-guide/v0.2.2-rc.1/forge-pinned-diff/guide.zh.md +26 -0
  279. package/kb/extra/upgrade-guide/v0.2.2-rc.1/forge-review-reads/guide.md +19 -0
  280. package/kb/extra/upgrade-guide/v0.2.2-rc.1/forge-review-reads/guide.zh.md +19 -0
  281. package/kb/extra/upgrade-guide/v0.2.2-rc.1/package-export-cleanup/guide.md +26 -0
  282. package/kb/extra/upgrade-guide/v0.2.2-rc.1/package-export-cleanup/guide.zh.md +26 -0
  283. package/kb/extra/upgrade-guide/v0.2.2-rc.1/plugin-update-method/guide.md +22 -0
  284. package/kb/extra/upgrade-guide/v0.2.2-rc.1/plugin-update-method/guide.zh.md +22 -0
  285. package/kb/extra/upgrade-guide/v0.2.2-rc.1/ptc-bootstrap-protocol/guide.md +25 -0
  286. package/kb/extra/upgrade-guide/v0.2.2-rc.1/ptc-bootstrap-protocol/guide.zh.md +25 -0
  287. package/kb/extra/upgrade-guide/v0.2.2-rc.1/ptc-inspect-output/guide.md +48 -0
  288. package/kb/extra/upgrade-guide/v0.2.2-rc.1/ptc-inspect-output/guide.zh.md +48 -0
  289. package/kb/extra/upgrade-guide/v0.2.2-rc.1/ptc-scoped-repl-default/guide.md +45 -0
  290. package/kb/extra/upgrade-guide/v0.2.2-rc.1/ptc-scoped-repl-default/guide.zh.md +45 -0
  291. package/kb/extra/upgrade-guide/v0.2.2-rc.1/runtime-context-reminders/guide.md +19 -0
  292. package/kb/extra/upgrade-guide/v0.2.2-rc.1/runtime-context-reminders/guide.zh.md +19 -0
  293. package/kb/extra/upgrade-guide/v0.2.2-rc.1/session-append-overloads/guide.md +17 -0
  294. package/kb/extra/upgrade-guide/v0.2.2-rc.1/session-append-overloads/guide.zh.md +17 -0
  295. package/kb/extra/upgrade-guide/v0.2.2-rc.1/subagent-interrupt-default/guide.md +27 -0
  296. package/kb/extra/upgrade-guide/v0.2.2-rc.1/subagent-interrupt-default/guide.zh.md +27 -0
  297. package/kb/extra/upgrade-guide/v0.2.2-rc.1/terminal-backend-cleanup-error/guide.md +20 -0
  298. package/kb/extra/upgrade-guide/v0.2.2-rc.1/terminal-backend-cleanup-error/guide.zh.md +20 -0
  299. package/kb/extra/upgrade-guide/v0.2.2-rc.1/terminal-bundle-sidebar-backend/guide.md +19 -0
  300. package/kb/extra/upgrade-guide/v0.2.2-rc.1/terminal-bundle-sidebar-backend/guide.zh.md +19 -0
  301. package/kb/extra/upgrade-guide/v0.2.2-rc.1/web-fetch-transport-error-codes/guide.md +18 -0
  302. package/kb/extra/upgrade-guide/v0.2.2-rc.1/web-fetch-transport-error-codes/guide.zh.md +18 -0
  303. package/kb/extra/upgrade-guide/v0.2.2-rc.1/web-search-billing/guide.md +41 -0
  304. package/kb/extra/upgrade-guide/v0.2.2-rc.1/web-search-billing/guide.zh.md +41 -0
  305. package/kb/extra/upgrade-guide/v0.2.2-rc.1/window-drag-regions/guide.md +21 -0
  306. package/kb/extra/upgrade-guide/v0.2.2-rc.1/window-drag-regions/guide.zh.md +21 -0
  307. package/kb/extra/upgrade-guide/v0.2.2-rc.2/client-module-metadata/guide.md +29 -0
  308. package/kb/extra/upgrade-guide/v0.2.2-rc.2/client-module-metadata/guide.zh.md +29 -0
  309. package/kb/extra/upgrade-guide/v0.2.2-rc.2/connection-page-peer/guide.md +25 -0
  310. package/kb/extra/upgrade-guide/v0.2.2-rc.2/connection-page-peer/guide.zh.md +25 -0
  311. package/kb/extra/upgrade-guide/v0.2.2-rc.2/cordis-root-and-intercept-metadata/guide.md +31 -0
  312. package/kb/extra/upgrade-guide/v0.2.2-rc.2/cordis-root-and-intercept-metadata/guide.zh.md +31 -0
  313. package/kb/extra/upgrade-guide/v0.2.2-rc.2/cua-agents-without-preset/guide.md +24 -0
  314. package/kb/extra/upgrade-guide/v0.2.2-rc.2/cua-agents-without-preset/guide.zh.md +24 -0
  315. package/kb/extra/upgrade-guide/v0.2.2-rc.2/cua-macos-provider/guide.md +24 -0
  316. package/kb/extra/upgrade-guide/v0.2.2-rc.2/cua-macos-provider/guide.zh.md +24 -0
  317. package/kb/extra/upgrade-guide/v0.2.2-rc.2/cua-partial-observations/guide.md +19 -0
  318. package/kb/extra/upgrade-guide/v0.2.2-rc.2/cua-partial-observations/guide.zh.md +19 -0
  319. package/kb/extra/upgrade-guide/v0.2.2-rc.2/deepseek-files-timeout/guide.md +15 -0
  320. package/kb/extra/upgrade-guide/v0.2.2-rc.2/deepseek-files-timeout/guide.zh.md +15 -0
  321. package/kb/extra/upgrade-guide/v0.2.2-rc.2/experimental-tool-error-codes/guide.md +28 -0
  322. package/kb/extra/upgrade-guide/v0.2.2-rc.2/experimental-tool-error-codes/guide.zh.md +28 -0
  323. package/kb/extra/upgrade-guide/v0.2.2-rc.2/package-export-cleanup/guide.md +36 -0
  324. package/kb/extra/upgrade-guide/v0.2.2-rc.2/package-export-cleanup/guide.zh.md +36 -0
  325. package/kb/extra/upgrade-guide/v0.2.2-rc.2/python-ptc-removal/guide.md +22 -0
  326. package/kb/extra/upgrade-guide/v0.2.2-rc.2/python-ptc-removal/guide.zh.md +22 -0
  327. package/kb/extra/upgrade-guide/v0.2.2-rc.2/session-status-package/guide.md +31 -0
  328. package/kb/extra/upgrade-guide/v0.2.2-rc.2/session-status-package/guide.zh.md +31 -0
  329. package/kb/extra/upgrade-guide/v0.2.2-rc.2/shared-search-filter/guide.md +18 -0
  330. package/kb/extra/upgrade-guide/v0.2.2-rc.2/shared-search-filter/guide.zh.md +18 -0
  331. package/kb/extra/upgrade-guide/v0.2.2-rc.2/shell-fs-tool-error-codes/guide.md +30 -0
  332. package/kb/extra/upgrade-guide/v0.2.2-rc.2/shell-fs-tool-error-codes/guide.zh.md +30 -0
  333. package/kb/extra/web-styling.md +57 -39
  334. package/kb/extra/web-styling.zh.md +57 -39
  335. package/kb/meta/search-index.json +4508 -3806
  336. package/kb/meta/source.json +18 -14
  337. package/kb/site/develop/cordis-tutorial/04-events.md +1 -1
  338. package/kb/site/develop/cordis-tutorial/07-into-the-harness.md +5 -4
  339. package/kb/site/develop/framework/events.md +1 -1
  340. package/kb/site/develop/practice/dynamic-cordis.md +1 -1
  341. package/kb/site/develop/practice/llm-adapter.md +192 -192
  342. package/kb/site/en/develop/cordis-tutorial/04-events.md +1 -1
  343. package/kb/site/en/develop/cordis-tutorial/07-into-the-harness.md +5 -4
  344. package/kb/site/en/develop/framework/events.md +1 -1
  345. package/kb/site/en/develop/practice/dynamic-cordis.md +1 -1
  346. package/kb/site/en/develop/practice/llm-adapter.md +192 -192
  347. package/kb/site/en/guide/desktop-uninstall-cleanup.md +63 -0
  348. package/kb/site/en/guide/network-proxy.md +1 -1
  349. package/kb/site/en/guide/plugin-market.md +153 -151
  350. package/kb/site/en/guide/providers.md +234 -230
  351. package/kb/site/en/guide/python-sdk.md +17 -2
  352. package/kb/site/en/guide/quickstart.md +35 -34
  353. package/kb/site/en/guide/schedule.md +45 -26
  354. package/kb/site/en/reference/agent-lifecycle.md +3 -1
  355. package/kb/site/en/reference/api-gateway.md +4 -4
  356. package/kb/site/en/reference/capability-seams.md +789 -719
  357. package/kb/site/en/reference/config-catalog.md +5432 -4806
  358. package/kb/site/en/reference/cookbook/adding-a-package.md +175 -173
  359. package/kb/site/en/reference/cookbook/adding-a-tool.md +105 -104
  360. package/kb/site/en/reference/cookbook/extension-cookbook.md +178 -135
  361. package/kb/site/en/reference/cordis-api/context.md +373 -369
  362. package/kb/site/en/reference/cordis-api/events.md +9 -9
  363. package/kb/site/en/reference/cordis-api/fiber.md +457 -380
  364. package/kb/site/en/reference/cordis-api/inherited.md +44 -43
  365. package/kb/site/en/reference/cordis-api/service.md +118 -107
  366. package/kb/site/en/reference/experimental-persistence-catalog.md +36 -20
  367. package/kb/site/en/reference/index.md +174 -168
  368. package/kb/site/en/reference/persistence-catalog.md +9453 -9146
  369. package/kb/site/en/reference/subsystems/client-modules.md +19 -11
  370. package/kb/site/en/reference/subsystems/compaction.md +288 -288
  371. package/kb/site/en/reference/subsystems/conversation.md +2 -0
  372. package/kb/site/en/reference/subsystems/core.md +1172 -1117
  373. package/kb/site/en/reference/subsystems/credentials.md +526 -497
  374. package/kb/site/en/reference/subsystems/filesystem.md +708 -534
  375. package/kb/site/en/reference/subsystems/index.md +82 -80
  376. package/kb/site/en/reference/subsystems/llm-streaming.md +1290 -1200
  377. package/kb/site/en/reference/subsystems/lsp.md +230 -206
  378. package/kb/site/en/reference/subsystems/persistence.md +451 -422
  379. package/kb/site/en/reference/subsystems/plan.md +91 -91
  380. package/kb/site/en/reference/subsystems/ptc-runtime.md +295 -254
  381. package/kb/site/en/reference/subsystems/sandbox.md +250 -225
  382. package/kb/site/en/reference/subsystems/schedule.md +194 -430
  383. package/kb/site/en/reference/subsystems/session-projection.md +186 -44
  384. package/kb/site/en/reference/subsystems/session-query.md +525 -515
  385. package/kb/site/en/reference/subsystems/session-reference.md +231 -228
  386. package/kb/site/en/reference/subsystems/session.md +1478 -1343
  387. package/kb/site/en/reference/subsystems/sidebar-right.md +165 -164
  388. package/kb/site/en/reference/subsystems/skills.md +356 -356
  389. package/kb/site/en/reference/subsystems/slots.md +235 -204
  390. package/kb/site/en/reference/subsystems/storage.md +26 -9
  391. package/kb/site/en/reference/subsystems/subagent.md +119 -102
  392. package/kb/site/en/reference/subsystems/system-prompt.md +13 -11
  393. package/kb/site/en/reference/subsystems/terminal.md +188 -188
  394. package/kb/site/en/reference/subsystems/token-meter.md +45 -0
  395. package/kb/site/en/reference/subsystems/tools.md +902 -751
  396. package/kb/site/en/reference/subsystems/typert.md +21 -11
  397. package/kb/site/en/reference/subsystems/user-questions.md +330 -311
  398. package/kb/site/en/reference/subsystems/web-client.md +161 -104
  399. package/kb/site/en/reference/subsystems/web-server.md +434 -306
  400. package/kb/site/en/reference/subsystems/web.md +268 -210
  401. package/kb/site/en/reference/subsystems/workflow.md +287 -282
  402. package/kb/site/en/reference/subsystems/workspace.md +743 -651
  403. package/kb/site/en/reference/tool-catalog.md +2867 -2829
  404. package/kb/site/en/reference/tool-execution-pipeline.md +5 -4
  405. package/kb/site/guide/desktop-uninstall-cleanup.md +63 -0
  406. package/kb/site/guide/network-proxy.md +1 -1
  407. package/kb/site/guide/plugin-market.md +153 -151
  408. package/kb/site/guide/providers.md +234 -230
  409. package/kb/site/guide/python-sdk.md +17 -2
  410. package/kb/site/guide/quickstart.md +35 -34
  411. package/kb/site/guide/schedule.md +45 -26
  412. package/kb/site/reference/agent-lifecycle.md +3 -1
  413. package/kb/site/reference/api-gateway.md +4 -4
  414. package/kb/site/reference/capability-seams.md +789 -719
  415. package/kb/site/reference/config-catalog.md +5432 -4806
  416. package/kb/site/reference/cookbook/adding-a-package.md +175 -173
  417. package/kb/site/reference/cookbook/adding-a-tool.md +107 -106
  418. package/kb/site/reference/cookbook/extension-cookbook.md +182 -139
  419. package/kb/site/reference/cordis-api/context.md +373 -369
  420. package/kb/site/reference/cordis-api/events.md +9 -9
  421. package/kb/site/reference/cordis-api/fiber.md +459 -380
  422. package/kb/site/reference/cordis-api/inherited.md +44 -43
  423. package/kb/site/reference/cordis-api/service.md +118 -107
  424. package/kb/site/reference/experimental-persistence-catalog.md +36 -20
  425. package/kb/site/reference/index.md +178 -172
  426. package/kb/site/reference/persistence-catalog.md +9453 -9146
  427. package/kb/site/reference/subsystems/client-modules.md +19 -11
  428. package/kb/site/reference/subsystems/compaction.md +288 -288
  429. package/kb/site/reference/subsystems/conversation.md +4 -0
  430. package/kb/site/reference/subsystems/core.md +1184 -1129
  431. package/kb/site/reference/subsystems/credentials.md +526 -497
  432. package/kb/site/reference/subsystems/filesystem.md +708 -534
  433. package/kb/site/reference/subsystems/index.md +82 -80
  434. package/kb/site/reference/subsystems/llm-streaming.md +1296 -1206
  435. package/kb/site/reference/subsystems/lsp.md +230 -206
  436. package/kb/site/reference/subsystems/persistence.md +451 -422
  437. package/kb/site/reference/subsystems/plan.md +91 -91
  438. package/kb/site/reference/subsystems/ptc-runtime.md +295 -254
  439. package/kb/site/reference/subsystems/sandbox.md +250 -225
  440. package/kb/site/reference/subsystems/schedule.md +197 -433
  441. package/kb/site/reference/subsystems/session-projection.md +186 -44
  442. package/kb/site/reference/subsystems/session-query.md +525 -515
  443. package/kb/site/reference/subsystems/session-reference.md +231 -228
  444. package/kb/site/reference/subsystems/session.md +1482 -1347
  445. package/kb/site/reference/subsystems/sidebar-right.md +165 -164
  446. package/kb/site/reference/subsystems/skills.md +356 -356
  447. package/kb/site/reference/subsystems/slots.md +239 -208
  448. package/kb/site/reference/subsystems/storage.md +26 -9
  449. package/kb/site/reference/subsystems/subagent.md +119 -102
  450. package/kb/site/reference/subsystems/system-prompt.md +13 -11
  451. package/kb/site/reference/subsystems/terminal.md +188 -188
  452. package/kb/site/reference/subsystems/token-meter.md +45 -0
  453. package/kb/site/reference/subsystems/tools.md +902 -751
  454. package/kb/site/reference/subsystems/typert.md +21 -11
  455. package/kb/site/reference/subsystems/user-questions.md +330 -311
  456. package/kb/site/reference/subsystems/web-client.md +161 -104
  457. package/kb/site/reference/subsystems/web-server.md +434 -306
  458. package/kb/site/reference/subsystems/web.md +268 -210
  459. package/kb/site/reference/subsystems/workflow.md +287 -282
  460. package/kb/site/reference/subsystems/workspace.md +743 -651
  461. package/kb/site/reference/tool-catalog.md +2872 -2835
  462. package/kb/site/reference/tool-execution-pipeline.md +4 -3
  463. package/lib/index.js +359 -244
  464. package/lib/kb-version.js +118 -0
  465. package/package.json +68 -66
  466. package/scripts/refresh-kb.mjs +153 -0
  467. package/scripts/selfcheck.mjs +18 -0
  468. package/scripts/smoke.mjs +77 -0
  469. package/skills/dsh-plugin-dev-kb.md +71 -69
  470. package/skills/dsh-plugin-starter.md +65 -0
  471. package/skills/dsh-upgrade-assistant.md +62 -0
  472. package/kb/extra/agent-lifecycle.md +0 -91
  473. package/kb/extra/agent-lifecycle.zh.md +0 -93
  474. package/kb/extra/api-gateway.md +0 -172
  475. package/kb/extra/api-gateway.zh.md +0 -178
  476. package/kb/extra/architecture.md +0 -165
  477. package/kb/extra/architecture.zh.md +0 -169
  478. package/kb/extra/capability-seams.md +0 -714
  479. package/kb/extra/capability-seams.zh.md +0 -716
  480. package/kb/extra/config-catalog.md +0 -4801
  481. package/kb/extra/config-catalog.zh.md +0 -4803
  482. package/kb/extra/cookbook/adding-a-package.md +0 -170
  483. package/kb/extra/cookbook/adding-a-package.zh.md +0 -170
  484. package/kb/extra/cookbook/adding-a-settings-card.md +0 -72
  485. package/kb/extra/cookbook/adding-a-settings-card.zh.md +0 -72
  486. package/kb/extra/cookbook/adding-a-tool.md +0 -101
  487. package/kb/extra/cookbook/adding-a-tool.zh.md +0 -103
  488. package/kb/extra/cookbook/adding-an-llm-adapter.md +0 -43
  489. package/kb/extra/cookbook/adding-an-llm-adapter.zh.md +0 -43
  490. package/kb/extra/cookbook/extension-cookbook.md +0 -132
  491. package/kb/extra/cookbook/extension-cookbook.zh.md +0 -136
  492. package/kb/extra/cordis-api/context.md +0 -364
  493. package/kb/extra/cordis-api/context.zh.md +0 -366
  494. package/kb/extra/cordis-api/events.md +0 -207
  495. package/kb/extra/cordis-api/events.zh.md +0 -209
  496. package/kb/extra/cordis-api/fiber.md +0 -375
  497. package/kb/extra/cordis-api/fiber.zh.md +0 -377
  498. package/kb/extra/cordis-api/inherited.md +0 -38
  499. package/kb/extra/cordis-api/registry.md +0 -152
  500. package/kb/extra/cordis-api/registry.zh.md +0 -154
  501. package/kb/extra/cordis-api/service.md +0 -102
  502. package/kb/extra/cordis-api/service.zh.md +0 -104
  503. package/kb/extra/cordis-tutorial/01-first-plugin.md +0 -95
  504. package/kb/extra/cordis-tutorial/01-first-plugin.zh.md +0 -95
  505. package/kb/extra/cordis-tutorial/02-lifecycle-and-effects.md +0 -98
  506. package/kb/extra/cordis-tutorial/02-lifecycle-and-effects.zh.md +0 -98
  507. package/kb/extra/cordis-tutorial/03-services.md +0 -98
  508. package/kb/extra/cordis-tutorial/03-services.zh.md +0 -98
  509. package/kb/extra/cordis-tutorial/04-events.md +0 -144
  510. package/kb/extra/cordis-tutorial/04-events.zh.md +0 -144
  511. package/kb/extra/cordis-tutorial/05-config.md +0 -111
  512. package/kb/extra/cordis-tutorial/05-config.zh.md +0 -111
  513. package/kb/extra/cordis-tutorial/06-composition-and-hmr.md +0 -113
  514. package/kb/extra/cordis-tutorial/06-composition-and-hmr.zh.md +0 -113
  515. package/kb/extra/cordis-tutorial/07-into-the-harness.md +0 -108
  516. package/kb/extra/cordis-tutorial/07-into-the-harness.zh.md +0 -108
  517. package/kb/extra/cordis-tutorial/index.md +0 -60
  518. package/kb/extra/cordis-tutorial/index.zh.md +0 -62
  519. package/kb/extra/experimental-persistence-catalog.md +0 -17
  520. package/kb/extra/experimental-persistence-catalog.zh.md +0 -17
  521. package/kb/extra/persistence-catalog.md +0 -9140
  522. package/kb/extra/persistence-catalog.zh.md +0 -9142
  523. package/kb/extra/subsystems/README.md +0 -76
  524. package/kb/extra/subsystems/README.zh.md +0 -76
  525. package/kb/extra/subsystems/approval.md +0 -170
  526. package/kb/extra/subsystems/approval.zh.md +0 -170
  527. package/kb/extra/subsystems/client-modules.md +0 -198
  528. package/kb/extra/subsystems/client-modules.zh.md +0 -198
  529. package/kb/extra/subsystems/client-resources.md +0 -92
  530. package/kb/extra/subsystems/client-resources.zh.md +0 -92
  531. package/kb/extra/subsystems/commands.md +0 -223
  532. package/kb/extra/subsystems/commands.zh.md +0 -223
  533. package/kb/extra/subsystems/compaction.md +0 -284
  534. package/kb/extra/subsystems/compaction.zh.md +0 -284
  535. package/kb/extra/subsystems/conversation.md +0 -301
  536. package/kb/extra/subsystems/conversation.zh.md +0 -303
  537. package/kb/extra/subsystems/core.md +0 -1113
  538. package/kb/extra/subsystems/core.zh.md +0 -1125
  539. package/kb/extra/subsystems/credentials.md +0 -493
  540. package/kb/extra/subsystems/credentials.zh.md +0 -493
  541. package/kb/extra/subsystems/filesystem.md +0 -530
  542. package/kb/extra/subsystems/filesystem.zh.md +0 -530
  543. package/kb/extra/subsystems/goal.md +0 -313
  544. package/kb/extra/subsystems/goal.zh.md +0 -313
  545. package/kb/extra/subsystems/jobs.md +0 -554
  546. package/kb/extra/subsystems/jobs.zh.md +0 -554
  547. package/kb/extra/subsystems/llm-streaming.md +0 -1196
  548. package/kb/extra/subsystems/llm-streaming.zh.md +0 -1202
  549. package/kb/extra/subsystems/lsp.md +0 -202
  550. package/kb/extra/subsystems/lsp.zh.md +0 -202
  551. package/kb/extra/subsystems/office-to-pdf.md +0 -87
  552. package/kb/extra/subsystems/office-to-pdf.zh.md +0 -87
  553. package/kb/extra/subsystems/permission-presets.md +0 -167
  554. package/kb/extra/subsystems/permission-presets.zh.md +0 -167
  555. package/kb/extra/subsystems/persistence.md +0 -418
  556. package/kb/extra/subsystems/persistence.zh.md +0 -418
  557. package/kb/extra/subsystems/plan.md +0 -87
  558. package/kb/extra/subsystems/plan.zh.md +0 -87
  559. package/kb/extra/subsystems/ptc-runtime.md +0 -250
  560. package/kb/extra/subsystems/ptc-runtime.zh.md +0 -250
  561. package/kb/extra/subsystems/sandbox.md +0 -221
  562. package/kb/extra/subsystems/sandbox.zh.md +0 -221
  563. package/kb/extra/subsystems/schedule.md +0 -550
  564. package/kb/extra/subsystems/schedule.zh.md +0 -550
  565. package/kb/extra/subsystems/scope.md +0 -59
  566. package/kb/extra/subsystems/scope.zh.md +0 -61
  567. package/kb/extra/subsystems/session-projection.md +0 -356
  568. package/kb/extra/subsystems/session-projection.zh.md +0 -356
  569. package/kb/extra/subsystems/session-query.md +0 -511
  570. package/kb/extra/subsystems/session-query.zh.md +0 -511
  571. package/kb/extra/subsystems/session-reference.md +0 -224
  572. package/kb/extra/subsystems/session-reference.zh.md +0 -224
  573. package/kb/extra/subsystems/session-telemetry.md +0 -212
  574. package/kb/extra/subsystems/session-telemetry.zh.md +0 -212
  575. package/kb/extra/subsystems/session-title.md +0 -213
  576. package/kb/extra/subsystems/session-title.zh.md +0 -213
  577. package/kb/extra/subsystems/session.md +0 -1339
  578. package/kb/extra/subsystems/session.zh.md +0 -1343
  579. package/kb/extra/subsystems/settings.md +0 -155
  580. package/kb/extra/subsystems/settings.zh.md +0 -155
  581. package/kb/extra/subsystems/shell.md +0 -314
  582. package/kb/extra/subsystems/shell.zh.md +0 -314
  583. package/kb/extra/subsystems/sidebar-right.md +0 -160
  584. package/kb/extra/subsystems/sidebar-right.zh.md +0 -160
  585. package/kb/extra/subsystems/skills.md +0 -352
  586. package/kb/extra/subsystems/skills.zh.md +0 -352
  587. package/kb/extra/subsystems/slots.md +0 -200
  588. package/kb/extra/subsystems/slots.zh.md +0 -204
  589. package/kb/extra/subsystems/spill.md +0 -124
  590. package/kb/extra/subsystems/spill.zh.md +0 -124
  591. package/kb/extra/subsystems/storage.md +0 -259
  592. package/kb/extra/subsystems/storage.zh.md +0 -259
  593. package/kb/extra/subsystems/subagent.md +0 -686
  594. package/kb/extra/subsystems/subagent.zh.md +0 -688
  595. package/kb/extra/subsystems/subprocess.md +0 -321
  596. package/kb/extra/subsystems/subprocess.zh.md +0 -321
  597. package/kb/extra/subsystems/system-prompt.md +0 -254
  598. package/kb/extra/subsystems/system-prompt.zh.md +0 -254
  599. package/kb/extra/subsystems/terminal.md +0 -184
  600. package/kb/extra/subsystems/terminal.zh.md +0 -184
  601. package/kb/extra/subsystems/token-meter.md +0 -106
  602. package/kb/extra/subsystems/token-meter.zh.md +0 -106
  603. package/kb/extra/subsystems/tools.md +0 -747
  604. package/kb/extra/subsystems/tools.zh.md +0 -747
  605. package/kb/extra/subsystems/typert.md +0 -690
  606. package/kb/extra/subsystems/typert.zh.md +0 -690
  607. package/kb/extra/subsystems/user-questions.md +0 -307
  608. package/kb/extra/subsystems/user-questions.zh.md +0 -307
  609. package/kb/extra/subsystems/web-client.md +0 -100
  610. package/kb/extra/subsystems/web-client.zh.md +0 -100
  611. package/kb/extra/subsystems/web-server.md +0 -302
  612. package/kb/extra/subsystems/web-server.zh.md +0 -302
  613. package/kb/extra/subsystems/web.md +0 -206
  614. package/kb/extra/subsystems/web.zh.md +0 -206
  615. package/kb/extra/subsystems/workflow.md +0 -278
  616. package/kb/extra/subsystems/workflow.zh.md +0 -278
  617. package/kb/extra/subsystems/workspace.md +0 -647
  618. package/kb/extra/subsystems/workspace.zh.md +0 -647
  619. package/kb/extra/tool-catalog.md +0 -2824
  620. package/kb/extra/tool-catalog.zh.md +0 -2832
  621. package/kb/extra/tool-execution-pipeline.md +0 -65
  622. package/kb/extra/tool-execution-pipeline.zh.md +0 -67
@@ -1,497 +1,526 @@
1
- ---
2
- editSource: "docs/subsystems/credentials.zh.md"
3
- rawMarkdownPath: "reference/subsystems/credentials.md"
4
- outline: [2,3]
5
- ---
6
-
7
- # 用户凭据
8
-
9
- [dsh-credentials](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/credentials/credentials) 的凭据 seam 把机密挡在配置之外:settings 分节与 `cordis.yml` 条目携带的是*引用*(环境变量名),值归 [dsh-credentials-local](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/credentials/credentials-local) 这类提供方所有,消费方每个操作解析一次引用——LLM(大语言模型)适配器每次模型请求解析一次,因此轮换后的凭据无需任何重启即可作用于紧随其后的下一次请求。一条 seam 级规则约束每个提供方:空的存储值在任何地方都视为不存在。
10
-
11
- 来源:[`packages/credentials/credentials/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/credentials/src/index.ts)
12
-
13
- ## 标识
14
-
15
- 引用以 POSIX 风格环境变量名命名一条凭据。brand 防止调用方将凭据引用与在包或进程之间传递的其他字符串混用;构造时校验 shell 标识符语法。
16
-
17
- ```ts type-equiv
18
- /** Nominal reference to one credential: a POSIX-style environment-variable name. */
19
- type CredentialRef = Branded<'CredentialRef'>
20
- ```
21
-
22
- <a id="resolution"></a>
23
- ## 解析
24
-
25
- `resolve(ref)` 返回值及提供该值的来源层(由提供方定义);未配置期间返回 `undefined`。消费方在每个操作中重新解析,绝不跨操作缓存——这种按操作进行的读取正是热更新机制。
26
-
27
- ```ts type-equiv
28
- /** One resolved credential value and the source layer that supplied it. */
29
- interface ResolvedCredential {
30
- /** The non-empty secret value. */
31
- value: string
32
- /** Provider-defined source layer id (the local provider uses `env`, `file`, `project-env`, and `user-env`). */
33
- source: string
34
- }
35
- ```
36
-
37
- ## 描述
38
-
39
- `describe(ref)` 在绝不暴露值的前提下回应配置界面:引用当前是否可解析、来自哪一层、`set` 当前能否成功。本地提供方将其管理的文件排在启动环境之前,因此保存值总会成为生效且可写的那一层;移除后会重新使用启动环境或 `.env` 后备值。
40
-
41
- ```ts type-equiv
42
- /**
43
- * Source and writability facts for one reference, safe for configuration UIs —
44
- * never the value. The view has no slot a value could ride in, which is what
45
- * lets the whole read half cross the Remote wire.
46
- */
47
- interface CredentialInfo {
48
- /** Whether resolving the reference would currently return a value. */
49
- configured: boolean
50
- /** Source layer currently supplying the value; absent while unconfigured. */
51
- source?: string
52
- /** Whether the active provider can write this reference. */
53
- writable: boolean
54
- }
55
- ```
56
-
57
- ## 已提交的变更
58
-
59
- `credentials/reference-updated (ref)` 在提供方管理的来源发生已提交变更后发出——`set`、`unset` 或在存储中观察到的外部编辑。进程环境自身的变化不可观测,永不发出事件。消费方不需要该事件(它们按操作重新解析);它服务于配置界面刷新「已配置」徽标。
60
-
61
- ## 内嵌 Platform 凭证
62
-
63
- PlatformSession 是 getPlatformSession 返回的仅限 Host 快照:origin 指定所配置的 Platform 签发来源,token 包含其已存账号凭证。userId 复制最近一次成功 getProfile 得到的稳定账号 ID;尚无一次成功读取或资料不含 ID 时为 null。快照复用该 ID,不自行发起资料请求,因此 ID 未知时只会让 userId 为 null,而不会延迟调用方;资料读取首次取得稳定 ID 或该 ID 变化时仅通知使用 `watch(signal, true)` 的 Host 订阅者,供标识使用方重新读取快照。使用方以 origin 和 userId 作为持久化浏览器存储的键,为 null 时退回临时存储。账号已退登或读取凭证期间凭证变化时不返回快照;签发来源不匹配时失败。原生使用方负责在凭证变化时使文档失效。账号控制器 RPC、AccountView 和 AccountDetails 均不包含此快照。
64
-
65
- AccountDetails.balance 将充值钱包投影为 value、赠送钱包投影为 bonusWallets,分别保留币种和十进制余额字符串。查询失败不包含钱包数组。
66
-
67
- 赠金通知查询返回 AccountBonusBatch,包含当前 Platform 账号 id 和按服务端顺序排列的可通知订单。AccountBonusNotification 保留服务端消息与到期时间,不投影凭证。确认请求携带预期账号 id 和订单 id;账号变化后 Host 拒绝该请求。两项通知操作都通过 x-client-locale 传递发起界面的语言,不使用语言查询参数。
68
-
69
- <!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
70
-
71
- <a id="cordis-surface"></a>
72
-
73
- ## Cordis API
74
-
75
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
76
-
77
- <a id="ctxauthorization--authorizationservice"></a>
78
-
79
- ### `ctx.authorization` — `AuthorizationService`
80
-
81
- `ctx.authorization`: a registry of credential-obtaining flows, one attempt at a time per key.
82
-
83
- ```ts cordis-catalog
84
- /**
85
- * Offer a way to obtain one credential. One flow per key: two plugins
86
- * claiming the same key would each write a record in their own format, and
87
- * whichever ran last would leave the other reading a payload it cannot parse.
88
- *
89
- * @param flow - the key it writes, its label, its methods, and its runner.
90
- * @returns Disposer that withdraws this flow.
91
- * @throws {AuthorizationError} code `DUPLICATE_FLOW` when the key is already claimed.
92
- */
93
- registerFlow(flow: AuthorizationFlow): () => void
94
-
95
- /**
96
- * Every registered flow, for a surface listing what can be authorized.
97
- * @returns one entry per flow, in registration order.
98
- */
99
- list(): readonly AuthorizationEntry[]
100
-
101
- /**
102
- * One registered flow.
103
- * @param key - the credential record to ask about.
104
- * @returns the entry, or undefined when no flow claims that key.
105
- */
106
- describe(key: CredentialKey): AuthorizationEntry | undefined
107
-
108
- /**
109
- * Withdraw the attempt running for a key, if any. Separate from the
110
- * request's own signal because a request/response transport answers a Cancel
111
- * button on a second call, with no handle on the first one's signal.
112
- * @param key - the credential record whose attempt should stop.
113
- */
114
- cancel(key: CredentialKey): void
115
-
116
- /**
117
- * Run one attempt to authorize a key, and report how it ended.
118
- *
119
- * One attempt per key at a time. A second caller is refused rather than
120
- * joined: the two would be prompting different humans through the same flow,
121
- * and the second would answer questions the first was asked.
122
- *
123
- * @param request - the key, the method, the surface, and the cancel signal.
124
- * @returns `authorized` once the flow's record is committed during this
125
- * attempt and observed, or `cancelled` when the human declined or the
126
- * caller withdrew.
127
- * @throws {AuthorizationError} code `NO_FLOW` when nothing claims the key,
128
- * `UNKNOWN_METHOD` when the named method is not one the flow offers,
129
- * `ALREADY_IN_FLIGHT` when an attempt is already running for the key, or
130
- * `NOT_COMMITTED` when the flow resolved without committing a record
131
- * during the attempt.
132
- */
133
- async begin(request: AuthorizationRequest): Promise<AuthorizationOutcome>
134
- ```
135
-
136
- Source: [`packages/credentials/authorization/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/authorization/src/index.ts)
137
-
138
- <a id="ctxcredentials--credentialprovider-abstract-seam"></a>
139
-
140
- ### `ctx.credentials` — `CredentialProvider` (abstract seam)
141
-
142
- Abstract credential service over two key spaces that answer two questions.
143
-
144
- A CredentialRef answers "what is behind this environment-variable name": the provider-managed store first, then ambient fallbacks such as the process environment and `.env` files. One seam-wide rule binds that half: an empty stored value is absent everywhere — `resolve` skips it, `describe` reports it unconfigured — so a blank never masquerades as a configured secret.
145
-
146
- A CredentialKey answers "what credential does this plugin hold for this id". Nothing can layer here — an authorization grant has no environment to be read from — so presence of the record is the whole fact, and modifyRecord is the only write path because a correct write depends on the current value (a token refresh is read-decide-replace under one lock).
147
-
148
- ```ts cordis-catalog
149
- /**
150
- * Resolve one reference to its current value. Resolution is per call:
151
- * consumers re-resolve at each operation and must not cache across
152
- * operations — that per-operation read is what makes a changed credential
153
- * reach the next operation without a restart.
154
- * @param ref - the reference to resolve.
155
- * @returns the value and its source, or `undefined` while unconfigured.
156
- */
157
- abstract resolve(ref: CredentialRef): Promise<ResolvedCredential | undefined>
158
-
159
- /**
160
- * Describe one reference for configuration surfaces without exposing the
161
- * value.
162
- * @param ref - the reference to describe.
163
- * @returns configured state, supplying source, and writability.
164
- */
165
- abstract describe(ref: CredentialRef): Promise<CredentialInfo>
166
-
167
- /**
168
- * Durably store one value in the provider-managed writable source. The stored
169
- * value takes precedence over ambient fallbacks, and empty values are
170
- * rejected (use {@link unset}).
171
- * @param ref - the reference to store.
172
- * @param value - the non-empty secret value.
173
- */
174
- abstract set(ref: CredentialRef, value: string): Promise<void>
175
-
176
- /**
177
- * Remove one reference from the provider-managed writable source; removing
178
- * an absent reference is a no-op. Ambient fallback layers may become
179
- * effective again after removal.
180
- * @param ref - the reference to remove.
181
- */
182
- abstract unset(ref: CredentialRef): Promise<void>
183
-
184
- /**
185
- * Read one stored record. The value is returned as its owner wrote it; a
186
- * {@link GrantRecord} payload is not interpreted on the way out.
187
- * @param key - the record to read.
188
- * @returns the record, or `undefined` while none is stored.
189
- */
190
- abstract readRecord(key: CredentialKey): Promise<CredentialRecord | undefined>
191
-
192
- /**
193
- * Describe one record for configuration surfaces without exposing its value.
194
- * @param key - the record to describe.
195
- * @returns presence, discriminant, and writability.
196
- */
197
- abstract describeRecord(key: CredentialKey): Promise<CredentialRecordInfo>
198
-
199
- /**
200
- * Enumerate every stored record's address and tag. Unlike the reference
201
- * half, which has no enumeration because configuration surfaces learn which
202
- * references exist from settings schemas, records have no such discovery
203
- * path: a surface that cannot list them cannot show what a user is
204
- * authorized for, nor find an orphan left by an uninstalled plugin.
205
- * @returns every stored record, values excluded.
206
- */
207
- abstract listRecords(): Promise<readonly CredentialRecordEntry[]>
208
-
209
- /**
210
- * Serialized read-modify-write over one record — the only write path.
211
- * `mutate` sees the record as it stands at the moment the write is
212
- * exclusive, and returning `undefined` leaves the entry untouched. Exclusion
213
- * holds across processes where the backing store supports it, which is what
214
- * makes a token refresh safe: two processes rotating one refresh token
215
- * concurrently would otherwise lose whichever wrote first.
216
- * @param key - the record to modify.
217
- * @param mutate - receives the current record and returns its replacement, or `undefined` to leave it.
218
- * @returns the record after the write, or the current one when `mutate` declined.
219
- */
220
- abstract modifyRecord( key: CredentialKey, mutate: (current: CredentialRecord | undefined) => Promise<CredentialRecord | undefined>, ): Promise<CredentialRecord | undefined>
221
-
222
- /**
223
- * Remove one record; removing an absent record is a no-op.
224
- * @param key - the record to remove.
225
- */
226
- abstract deleteRecord(key: CredentialKey): Promise<void>
227
- ```
228
-
229
- Source: [`packages/credentials/credentials/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/credentials/src/index.ts)
230
-
231
- <a id="ctxcredentialscontroller--credentialscontroller"></a>
232
-
233
- ### `ctx.credentialsController` — `CredentialsController`
234
-
235
- Host service backing the generated `ctx.remote.credentials` namespace. It carries every wire obligation the credential seam itself does not: the batch fan-out bound, the field-by-field view projection, the reference-grammar guard, and the refusal mapping. Secret values cross in one direction only — no method here returns one.
236
-
237
- ```ts cordis-catalog
238
- /**
239
- * Describe several references for one configuration surface. Batched because
240
- * a settings page describes every reference its rows name at once, and one
241
- * round trip keeps those rows from settling separately.
242
- * @param refs - reference names, at most {@link MAX_DESCRIBE_REFS}; a name outside the grammar
243
- * rejects the whole call as `gateway/bad-request`.
244
- * @returns one view per requested name, keyed by that name.
245
- * @throws RemoteError when the request is invalid or no credential provider is mounted.
246
- */
247
- @Remote async describe(refs: string[]): Promise<Record<string, CredentialInfo>>
248
-
249
- /**
250
- * Store one value from a configuration surface. The value crosses the wire in
251
- * this direction only: no read path returns it.
252
- * @param ref - reference name to store under.
253
- * @param value - the non-empty secret value.
254
- * @throws RemoteError when the request is invalid, no provider is mounted, or the provider refuses the write.
255
- */
256
- @Remote async set(ref: string, value: string): Promise<void>
257
-
258
- /**
259
- * Remove one reference from a configuration surface.
260
- * @param ref - reference name to remove.
261
- * @throws RemoteError when the request is invalid, no provider is mounted, or the provider refuses the write.
262
- */
263
- @Remote async unset(ref: string): Promise<void>
264
- ```
265
-
266
- Source: [`packages/api/settings-controller/src/credentials.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/api/settings-controller/src/credentials.ts)
267
-
268
- <a id="ctxdeepseekaccount--deepseekaccount-abstract-seam"></a>
269
-
270
- ### `ctx.deepseekAccount` — `DeepSeekAccount` (abstract seam)
271
-
272
- Account operations; only Host consumers can obtain a request credential.
273
-
274
- ```ts cordis-catalog
275
- /**
276
- * Read stored-account presence and the latest login attempt.
277
- * @returns a snapshot without credentials or PKCE secrets.
278
- */
279
- abstract getState(): Promise<AccountView>
280
-
281
- /**
282
- * Query Platform profile independently of wallet balances.
283
- * A ready result whose stable profile ID first becomes available or changes notifies identity-enabled watch
284
- * consumers, so they re-read getPlatformSession; repeated IDs stay silent.
285
- * @param client - identity of the requesting UI for this call.
286
- * @returns profile outcome, or null if signed out or the grant changed during the query.
287
- */
288
- abstract getProfile(client: AccountClientMetadata): Promise<AccountDetails['profile'] | null>
289
-
290
- /**
291
- * Query Platform recharge and bonus wallet balances independently of profile data.
292
- * @param client - identity of the requesting UI for this call.
293
- * @returns balance outcome, or null if signed out or the grant changed during the query.
294
- */
295
- abstract getBalance(client: AccountClientMetadata): Promise<AccountDetails['balance'] | null>
296
-
297
- /**
298
- * Query the granted bonuses Platform has not yet recorded as displayed.
299
- * @param client - identity of the requesting UI for this call; its language selects the server-authored message.
300
- * @returns bonuses with their account, or null if signed out or the grant changed during the query.
301
- */
302
- abstract getUnnotifiedBonuses(client: AccountClientMetadata): Promise<AccountBonusBatch | null>
303
-
304
- /**
305
- * Record one displayed bonus as notified for the account it belongs to.
306
- * @param accountId - account the notification was read for; a different current account is never acknowledged.
307
- * @param orderId - granted bonus order the user saw.
308
- * @param client - identity of the requesting UI for this call.
309
- * @returns true once Platform records the acknowledgement; false if signed out or the account changed.
310
- */
311
- abstract ackBonusNotified(accountId: AccountUserId, orderId: AccountBonusOrderId, client: AccountClientMetadata): Promise<boolean>
312
-
313
- /**
314
- * Join an active attempt or start browser authorization.
315
- * @param client - identity of the requesting UI; a new attempt captures it, and joining retains the original attempt's identity.
316
- * @param callbackOrigin - browser-accessible loopback HTTP origin, including any SSH local port.
317
- * @param loginSource - initiating UI, used to return from a failed exchange.
318
- * @returns the initial snapshot without waiting for browser approval.
319
- */
320
- abstract startSignIn(client: AccountClientMetadata, callbackOrigin: string, loginSource: 'web' | 'desktop'): Promise<AccountView>
321
-
322
- /**
323
- * Cancel only the named attempt; committing attempts settle before returning.
324
- * @param id - attempt identity from this Host.
325
- * @returns state after cancellation or an already-started commit.
326
- */
327
- abstract cancelSignIn(id: SignInAttemptId): Promise<AccountView>
328
-
329
- /**
330
- * Remove the local grant while retaining API keys; the provider revokes it in the background.
331
- * @param client - identity of the requesting UI, captured for the background revocation retries.
332
- * @returns the signed-out state after local removal; remote failures never restore the grant.
333
- */
334
- abstract signOut(client: AccountClientMetadata): Promise<AccountView>
335
-
336
- /**
337
- * Subscribe to snapshots including a complete initial state.
338
- * @param signal - subscription lifetime; ending it never cancels login.
339
- * @param includeIdentityChanges - also notify when cached Platform identity changes; defaults to false.
340
- * @returns complete snapshots as account state changes.
341
- */
342
- abstract watch(signal: AbortSignal, includeIdentityChanges?: boolean): AsyncIterable<AccountView>
343
-
344
- /**
345
- * Resolve a credential only for the inference origin allowed by the provider.
346
- * @param url - actual request destination or API base URL.
347
- * @returns stored token, or undefined for other origins or a signed-out account.
348
- */
349
- abstract resolveToken(url: string): Promise<string | undefined>
350
-
351
- /**
352
- * Remove an inference-rejected token only while it still matches the stored login.
353
- * @param token - token captured by the rejected inference request.
354
- * @returns after matching credentials are removed and the expiry notification is emitted.
355
- */
356
- abstract rejectToken(token: string): Promise<void>
357
-
358
- /**
359
- * Read credentials for the configured Platform origin, bound to their issuing environment, and
360
- * pair them with the account ID from the last successful profile read; no profile request is made.
361
- * @returns a Host-only snapshot, or null while signed out or when the credential changed during the read.
362
- */
363
- abstract getPlatformSession(): Promise<PlatformSession | null>
364
-
365
- /**
366
- * Read existing login identity without creating a device or returning credentials.
367
- * @returns optional device/account identifiers and the provider's OS version string.
368
- */
369
- abstract getDeviceIdentity(): Promise<{ deviceId?: string; userId?: AccountUserId; osVersion: string }>
370
- ```
371
-
372
- Source: [`packages/credentials/deepseek-account/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/deepseek-account/src/index.ts)
373
-
374
- <a id="authorization-events"></a>
375
-
376
- ### `authorization/*` events
377
-
378
- <a id="authorizationsettled--emit"></a>
379
-
380
- #### `authorization/settled` — emit
381
-
382
- One authorization attempt has finished and released its key. Fires for every terminal outcome, failures included, so a surface watching a key it did not start (a second browser tab) learns the attempt is over.
383
-
384
- ```ts cordis-catalog
385
- /**
386
- * One authorization attempt has finished and released its key. Fires for
387
- * every terminal outcome, failures included, so a surface watching a key it
388
- * did not start (a second browser tab) learns the attempt is over.
389
- * @mode emit
390
- * @param key - the credential record the finished attempt was authorizing.
391
- * @param settlement - how it ended, including the `failed` case its caller sees as a thrown error.
392
- */
393
- 'authorization/settled'(key: CredentialKey, settlement: AuthorizationSettlement): void
394
- ```
395
-
396
- Source: [`packages/credentials/authorization/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/authorization/src/index.ts)
397
-
398
- <a id="credentials-events"></a>
399
-
400
- ### `credentials/*` events
401
-
402
- <a id="credentialsrecord-updated--emit"></a>
403
-
404
- #### `credentials/record-updated` — emit
405
-
406
- Committed change to a stored credential record: a `modifyRecord` that wrote, a `deleteRecord` that removed, or an external edit observed in storage. Separate from `credentials/reference-updated` because the two key grammars are disjoint — a listener that received both on one event could not tell which space a subject belongs to. Listener failures are contained on the same terms as `credentials/reference-updated`.
407
-
408
- ```ts cordis-catalog
409
- /**
410
- * Committed change to a stored credential record: a `modifyRecord` that
411
- * wrote, a `deleteRecord` that removed, or an external edit observed in
412
- * storage. Separate from `credentials/reference-updated` because the two key
413
- * grammars are disjoint — a listener that received both on one event could
414
- * not tell which space a subject belongs to. Listener failures are
415
- * contained on the same terms as `credentials/reference-updated`.
416
- * @param key - the record whose stored value changed.
417
- * @mode emit
418
- */
419
- 'credentials/record-updated'(key: CredentialKey): void
420
- ```
421
-
422
- Source: [`packages/credentials/credentials/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/credentials/src/types.ts)
423
-
424
- <a id="credentialsreference-updated--emit"></a>
425
-
426
- #### `credentials/reference-updated` — emit
427
-
428
- Committed change to a provider-managed credential source: a `set`, an `unset`, or an external edit observed in storage. Ambient process-environment changes are not observable and never emit. Listener failures are contained and logged — a sync throw and an async rejection alike — without changing the committed operation's outcome.
429
-
430
- ```ts cordis-catalog
431
- /**
432
- * Committed change to a provider-managed credential source: a `set`, an
433
- * `unset`, or an external edit observed in storage. Ambient
434
- * process-environment changes are not observable and never emit. Listener
435
- * failures are contained and logged — a sync throw and an async rejection
436
- * alike — without changing the committed operation's outcome.
437
- * @param ref - the reference whose stored value changed.
438
- * @mode emit
439
- */
440
- 'credentials/reference-updated'(ref: CredentialRef): void
441
- ```
442
-
443
- Source: [`packages/credentials/credentials/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/credentials/src/types.ts)
444
-
445
- <a id="deepseek-account-events"></a>
446
-
447
- ### `deepseek-account/*` events
448
-
449
- <a id="deepseek-accountmodel-sign-in-required--emit"></a>
450
-
451
- #### `deepseek-account/model-sign-in-required` — emit
452
-
453
- An account model request requires the user to sign in.
454
-
455
- ```ts cordis-catalog
456
- /** An account model request requires the user to sign in.
457
- * @mode emit
458
- */
459
- 'deepseek-account/model-sign-in-required'(): void
460
- ```
461
-
462
- Source: [`packages/credentials/deepseek-account/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/deepseek-account/src/types.ts)
463
-
464
- <a id="deepseek-accountsession-expired--emit"></a>
465
-
466
- #### `deepseek-account/session-expired` — emit
467
-
468
- Server rejection removed the current account credential; this notification is not replayed.
469
-
470
- ```ts cordis-catalog
471
- /** Server rejection removed the current account credential; this notification is not replayed.
472
- * @mode emit
473
- */
474
- 'deepseek-account/session-expired'(): void
475
- ```
476
-
477
- Source: [`packages/credentials/deepseek-account/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/deepseek-account/src/types.ts)
478
-
479
- <a id="deepseek-accountsigned-out--emit"></a>
480
-
481
- #### `deepseek-account/signed-out` — emit
482
-
483
- Local grant removal has completed.
484
-
485
- ```ts cordis-catalog
486
- /** Local grant removal has completed.
487
- * @mode emit
488
- */
489
- 'deepseek-account/signed-out'(): void
490
- ```
491
-
492
- Source: [`packages/credentials/deepseek-account/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/deepseek-account/src/index.ts)
493
- <!-- END GENERATED cordis-surface -->
494
-
495
- 账号服务定义提供 getState、getProfile、getBalance、getUnnotifiedBonuses、ackBonusNotified、startSignIn、cancelSignIn、signOut、watch 及仅限 Host 的 resolveToken 和 getPlatformSession。平台提供者使用 AuthorizationFlow 和私有 GrantRecord 实现这些操作。AccountView 区分本地存在与服务器验证;尝试 ID 将取消绑定到单次本地流程。参见[账号包](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/deepseek-account/README.zh.md)。
496
-
497
- `AccountClientMetadata` 携带调用方 `DSH_CLIENT_VERSION` 提供的 `version`、当前界面 `locale`,以及操作发起时采样的 `timezoneOffsetSeconds`。偏移为本地时间减 UTC 的秒数:UTC+8 对应 `28800`。其中不含凭证。登录申请在兑换及取消期间保留发起时的元数据;退出操作为撤销重试保留其元数据。
1
+ ---
2
+ editSource: "docs/subsystems/credentials.zh.md"
3
+ rawMarkdownPath: "reference/subsystems/credentials.md"
4
+ outline: [2,3]
5
+ ---
6
+
7
+ # 用户凭据
8
+
9
+ [dsh-credentials](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/credentials/credentials) 的凭据 seam 把机密挡在配置之外:settings 分节与 `cordis.yml` 条目携带的是*引用*(环境变量名),值归 [dsh-credentials-local](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/credentials/credentials-local) 这类提供方所有,消费方每个操作解析一次引用——LLM(大语言模型)适配器每次模型请求解析一次,因此轮换后的凭据无需任何重启即可作用于紧随其后的下一次请求。一条 seam 级规则约束每个提供方:空的存储值在任何地方都视为不存在。
10
+
11
+ 来源:[`packages/credentials/credentials/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/credentials/src/index.ts)
12
+
13
+ ## 标识
14
+
15
+ 引用以 POSIX 风格环境变量名命名一条凭据。brand 防止调用方将凭据引用与在包或进程之间传递的其他字符串混用;构造时校验 shell 标识符语法。
16
+
17
+ ```ts type-equiv
18
+ /** Nominal reference to one credential: a POSIX-style environment-variable name. */
19
+ type CredentialRef = Branded<'CredentialRef'>
20
+ ```
21
+
22
+ <a id="resolution"></a>
23
+ ## 解析
24
+
25
+ `resolve(ref)` 返回值及提供该值的来源层(由提供方定义);未配置期间返回 `undefined`。消费方在每个操作中重新解析,绝不跨操作缓存——这种按操作进行的读取正是热更新机制。
26
+
27
+ ```ts type-equiv
28
+ /** One resolved credential value and the source layer that supplied it. */
29
+ interface ResolvedCredential {
30
+ /** The non-empty secret value. */
31
+ value: string
32
+ /** Provider-defined source layer id (the local provider uses `env`, `file`, `project-env`, and `user-env`). */
33
+ source: string
34
+ }
35
+ ```
36
+
37
+ ## 描述
38
+
39
+ `describe(ref)` 在绝不暴露值的前提下回应配置界面:引用当前是否可解析、来自哪一层、`set` 当前能否成功。可选的 `masked` 字段携带提供方生成的脱敏预览,不包含完整凭据。本地提供方将其管理的文件排在启动环境之前,因此保存值总会成为生效且可写的那一层;移除后会重新使用启动环境或 `.env` 后备值。
40
+
41
+ ```ts type-equiv
42
+ /**
43
+ * Configuration facts and an optional provider-masked preview for one
44
+ * reference. The full credential is never part of this view.
45
+ */
46
+ interface CredentialInfo {
47
+ /** Whether resolving the reference would currently return a value. */
48
+ configured: boolean
49
+ /** Source layer currently supplying the value; absent while unconfigured. */
50
+ source?: string
51
+ /** Whether the active provider can write this reference. */
52
+ writable: boolean
53
+ /** Provider-generated masked preview of a stored value; never the full value. */
54
+ masked?: string
55
+ }
56
+ ```
57
+
58
+ ## 已提交的变更
59
+
60
+ `credentials/reference-updated (ref)` 在提供方管理的来源发生已提交变更后发出——`set`、`unset` 或在存储中观察到的外部编辑。进程环境自身的变化不可观测,永不发出事件。消费方不需要该事件(它们按操作重新解析);它服务于配置界面刷新「已配置」徽标。
61
+
62
+ ## 内嵌 Platform 凭证
63
+
64
+ PlatformSession 是 getPlatformSession 返回的仅限 Host 快照:origin 指定所配置的 Platform 签发来源,token 包含其已存账号凭证。userId 复制最近一次成功 getProfile 得到的稳定账号 ID;尚无一次成功读取或资料不含 ID 时为 null。快照复用该 ID,不自行发起资料请求,因此 ID 未知时只会让 userId 为 null,而不会延迟调用方;资料读取首次取得稳定 ID 或该 ID 变化时仅通知使用 `watch(signal, true)` 的 Host 订阅者,供标识使用方重新读取快照。使用方以 origin 和 userId 作为持久化浏览器存储的键,为 null 时退回临时存储。账号已退登或读取凭证期间凭证变化时不返回快照;签发来源不匹配时失败。原生使用方负责在凭证变化时使文档失效。账号 Remote API、AccountView 和 AccountDetails 均不包含此快照。
65
+
66
+ AccountDetails.balance 将充值钱包投影为 value、赠送钱包投影为 bonusWallets,分别保留币种和十进制余额字符串。查询失败不包含钱包数组。
67
+
68
+ 赠金通知查询返回 AccountBonusBatch,包含当前 Platform 账号 id 和按服务端顺序排列的可通知订单。AccountBonusNotification 保留服务端消息与到期时间,不投影凭证。确认请求携带预期账号 id 和订单 id;账号变化后 Host 拒绝该请求。两项通知操作都通过 x-client-locale 传递发起界面的语言,不使用语言查询参数。
69
+
70
+ <!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
71
+
72
+ <a id="cordis-surface"></a>
73
+
74
+ ## Cordis API
75
+
76
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
77
+
78
+ <a id="ctxauthorization--authorizationservice"></a>
79
+
80
+ ### `ctx.authorization` — `AuthorizationService`
81
+
82
+ `ctx.authorization`: a registry of credential-obtaining flows, one attempt at a time per key.
83
+
84
+ ```ts cordis-catalog
85
+ /**
86
+ * Offer a way to obtain one credential. One flow per key: two plugins
87
+ * claiming the same key would each write a record in their own format, and
88
+ * whichever ran last would leave the other reading a payload it cannot parse.
89
+ *
90
+ * @param flow - the key it writes, its label, its methods, and its runner.
91
+ * @returns Disposer that withdraws this flow.
92
+ * @throws {AuthorizationError} code `DUPLICATE_FLOW` when the key is already claimed.
93
+ */
94
+ registerFlow(flow: AuthorizationFlow): () => void
95
+
96
+ /**
97
+ * Every registered flow, for a surface listing what can be authorized.
98
+ * @returns one entry per flow, in registration order.
99
+ */
100
+ list(): readonly AuthorizationEntry[]
101
+
102
+ /**
103
+ * One registered flow.
104
+ * @param key - the credential record to ask about.
105
+ * @returns the entry, or undefined when no flow claims that key.
106
+ */
107
+ describe(key: CredentialKey): AuthorizationEntry | undefined
108
+
109
+ /**
110
+ * Withdraw the attempt running for a key, if any. Separate from the
111
+ * request's own signal because a request/response transport answers a Cancel
112
+ * button on a second call, with no handle on the first one's signal.
113
+ * @param key - the credential record whose attempt should stop.
114
+ */
115
+ cancel(key: CredentialKey): void
116
+
117
+ /**
118
+ * Run one attempt to authorize a key, and report how it ended.
119
+ *
120
+ * One attempt per key at a time. A second caller is refused rather than
121
+ * joined: the two would be prompting different humans through the same flow,
122
+ * and the second would answer questions the first was asked.
123
+ *
124
+ * @param request - the key, the method, the surface, and the cancel signal.
125
+ * @returns `authorized` once the flow's record is committed during this
126
+ * attempt and observed, or `cancelled` when the human declined or the
127
+ * caller withdrew.
128
+ * @throws {AuthorizationError} code `NO_FLOW` when nothing claims the key,
129
+ * `UNKNOWN_METHOD` when the named method is not one the flow offers,
130
+ * `ALREADY_IN_FLIGHT` when an attempt is already running for the key, or
131
+ * `NOT_COMMITTED` when the flow resolved without committing a record
132
+ * during the attempt.
133
+ */
134
+ async begin(request: AuthorizationRequest): Promise<AuthorizationOutcome>
135
+ ```
136
+
137
+ Source: [`packages/credentials/authorization/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/authorization/src/index.ts)
138
+
139
+ <a id="ctxcredentials--credentialprovider-abstract-seam"></a>
140
+
141
+ ### `ctx.credentials` — `CredentialProvider` (abstract seam)
142
+
143
+ Abstract credential service over two key spaces that answer two questions.
144
+
145
+ A CredentialRef answers "what is behind this environment-variable name": the provider-managed store first, then ambient fallbacks such as the process environment and `.env` files. One seam-wide rule binds that half: an empty stored value is absent everywhere — `resolve` skips it, `describe` reports it unconfigured — so a blank never masquerades as a configured secret.
146
+
147
+ A CredentialKey answers "what credential does this plugin hold for this id". Nothing can layer here — an authorization grant has no environment to be read from — so presence of the record is the whole fact, and modifyRecord is the only write path because a correct write depends on the current value (a token refresh is read-decide-replace under one lock).
148
+
149
+ ```ts cordis-catalog
150
+ /**
151
+ * Resolve one reference to its current value. Resolution is per call:
152
+ * consumers re-resolve at each operation and must not cache across
153
+ * operations — that per-operation read is what makes a changed credential
154
+ * reach the next operation without a restart.
155
+ * @param ref - the reference to resolve.
156
+ * @returns the value and its source, or `undefined` while unconfigured.
157
+ */
158
+ abstract resolve(ref: CredentialRef): Promise<ResolvedCredential | undefined>
159
+
160
+ /**
161
+ * Describe one reference for configuration surfaces without exposing the
162
+ * full value.
163
+ * @param ref - the reference to describe.
164
+ * @returns configured state, supplying source, writability, and optional masked preview.
165
+ */
166
+ abstract describe(ref: CredentialRef): Promise<CredentialInfo>
167
+
168
+ /**
169
+ * Durably store one value in the provider-managed writable source. The stored
170
+ * value takes precedence over ambient fallbacks, and empty values are
171
+ * rejected (use {@link unset}).
172
+ * @param ref - the reference to store.
173
+ * @param value - the non-empty secret value.
174
+ */
175
+ abstract set(ref: CredentialRef, value: string): Promise<void>
176
+
177
+ /**
178
+ * Remove one reference from the provider-managed writable source; removing
179
+ * an absent reference is a no-op. Ambient fallback layers may become
180
+ * effective again after removal.
181
+ * @param ref - the reference to remove.
182
+ */
183
+ abstract unset(ref: CredentialRef): Promise<void>
184
+
185
+ /**
186
+ * Read one stored record. The value is returned as its owner wrote it; a
187
+ * {@link GrantRecord} payload is not interpreted on the way out.
188
+ * @param key - the record to read.
189
+ * @returns the record, or `undefined` while none is stored.
190
+ */
191
+ abstract readRecord(key: CredentialKey): Promise<CredentialRecord | undefined>
192
+
193
+ /**
194
+ * Describe one record for configuration surfaces without exposing its value.
195
+ * @param key - the record to describe.
196
+ * @returns presence, discriminant, and writability.
197
+ */
198
+ abstract describeRecord(key: CredentialKey): Promise<CredentialRecordInfo>
199
+
200
+ /**
201
+ * Enumerate every stored record's address and tag. Unlike the reference
202
+ * half, which has no enumeration because configuration surfaces learn which
203
+ * references exist from settings schemas, records have no such discovery
204
+ * path: a surface that cannot list them cannot show what a user is
205
+ * authorized for, nor find an orphan left by an uninstalled plugin.
206
+ * @returns every stored record, values excluded.
207
+ */
208
+ abstract listRecords(): Promise<readonly CredentialRecordEntry[]>
209
+
210
+ /**
211
+ * Serialized read-modify-write over one record — the only write path.
212
+ * `mutate` sees the record as it stands at the moment the write is
213
+ * exclusive, and returning `undefined` leaves the entry untouched. Exclusion
214
+ * holds across processes where the backing store supports it, which is what
215
+ * makes a token refresh safe: two processes rotating one refresh token
216
+ * concurrently would otherwise lose whichever wrote first.
217
+ * @param key - the record to modify.
218
+ * @param mutate - receives the current record and returns its replacement, or `undefined` to leave it.
219
+ * @returns the record after the write, or the current one when `mutate` declined.
220
+ */
221
+ abstract modifyRecord( key: CredentialKey, mutate: (current: CredentialRecord | undefined) => Promise<CredentialRecord | undefined>, ): Promise<CredentialRecord | undefined>
222
+
223
+ /**
224
+ * Remove one record; removing an absent record is a no-op.
225
+ * @param key - the record to remove.
226
+ */
227
+ abstract deleteRecord(key: CredentialKey): Promise<void>
228
+ ```
229
+
230
+ Source: [`packages/credentials/credentials/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/credentials/src/index.ts)
231
+
232
+ <a id="ctxcredentialscontroller--credentialscontroller"></a>
233
+
234
+ ### `ctx.credentialsController` — `CredentialsController`
235
+
236
+ Host service backing the generated `ctx.remote.credentials` namespace. It carries every wire obligation the credential seam itself does not: the batch fan-out bound, the field-by-field view projection, the reference-grammar guard, and the refusal mapping. Full secret values cross in one direction only — no method here returns one.
237
+
238
+ ```ts cordis-catalog
239
+ /**
240
+ * Describe several references for one configuration surface. Batched because
241
+ * a settings page describes every reference its rows name at once, and one
242
+ * round trip keeps those rows from settling separately.
243
+ * @param refs - reference names, at most {@link MAX_DESCRIBE_REFS}; a name outside the grammar
244
+ * rejects the whole call as `gateway/bad-request`.
245
+ * @returns one view per requested name, keyed by that name.
246
+ * @throws RemoteError when the request is invalid or no credential provider is mounted.
247
+ */
248
+ @Remote async describe(refs: string[]): Promise<Record<string, CredentialInfo>>
249
+
250
+ /**
251
+ * Store one value from a configuration surface. The value crosses the wire in
252
+ * this direction only: no read path returns it.
253
+ * @param ref - reference name to store under.
254
+ * @param value - the non-empty secret value.
255
+ * @throws RemoteError when the request is invalid, no provider is mounted, or the provider refuses the write.
256
+ */
257
+ @Remote async set(ref: string, value: string): Promise<void>
258
+
259
+ /**
260
+ * Remove one reference from a configuration surface.
261
+ * @param ref - reference name to remove.
262
+ * @throws RemoteError when the request is invalid, no provider is mounted, or the provider refuses the write.
263
+ */
264
+ @Remote async unset(ref: string): Promise<void>
265
+ ```
266
+
267
+ Source: [`packages/api/settings-controller/src/credentials.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/api/settings-controller/src/credentials.ts)
268
+
269
+ <a id="ctxdeepseekaccount--deepseekaccount"></a>
270
+
271
+ ### `ctx.deepseekAccount` — `DeepSeekAccount`
272
+
273
+ Account login, credentials, and client-safe Remote operations.
274
+
275
+ ```ts cordis-catalog
276
+ /**
277
+ * Read stored-account presence and the latest login attempt.
278
+ * @returns a snapshot without credentials or PKCE secrets.
279
+ */
280
+ @Remote async getState(): Promise<AccountView>
281
+
282
+ /**
283
+ * Query Platform profile independently of wallet balances.
284
+ * A ready result whose stable profile ID first becomes available or changes notifies identity-enabled watch
285
+ * consumers, so they re-read getPlatformSession; repeated IDs stay silent.
286
+ * @param client - identity of the requesting UI for this call.
287
+ * @returns profile outcome, or null if signed out or the grant changed during the query.
288
+ */
289
+ @Remote async getProfile(client: AccountClientMetadata): Promise<AccountDetails['profile'] | null>
290
+
291
+ /**
292
+ * Query Platform recharge and bonus wallet balances independently of profile data.
293
+ * @param client - identity of the requesting UI for this call.
294
+ * @returns balance outcome, or null if signed out or the grant changed during the query.
295
+ */
296
+ @Remote getBalance(client: AccountClientMetadata): Promise<AccountDetails['balance'] | null>
297
+
298
+ /**
299
+ * Query unconsumed account notifications in server order without reading profile data.
300
+ * @param client - identity of the requesting UI for this call; its language selects the server-authored message.
301
+ * @returns notifications with their next query delay, or null if signed out or the grant changed during the query.
302
+ */
303
+ @Remote async getNotifications(client: AccountClientMetadata): Promise<AccountNotificationBatch | null>
304
+
305
+ /**
306
+ * Query localized content of a notification, including one already consumed.
307
+ * @param id - notification whose content is requested.
308
+ * @param client - identity of the requesting UI; its language selects the localized content.
309
+ * @returns content without changing consumption, or null if signed out or the grant changed.
310
+ */
311
+ @Remote async getNotificationContent(id: AccountNotificationId, client: AccountClientMetadata): Promise<AccountNotification | null>
312
+
313
+ /**
314
+ * Report a notification interaction; the backend decides consumption.
315
+ * @param id - notification the user interacted with.
316
+ * @param event - displayed frame, non-dismiss action click, or explicit dismissal.
317
+ * @param client - identity of the requesting UI for this call.
318
+ * @returns true once the server accepts the event; false if signed out or credentials changed during the call.
319
+ */
320
+ @Remote async reportNotificationEvent(id: AccountNotificationId, event: AccountNotificationEvent, client: AccountClientMetadata): Promise<boolean>
321
+
322
+ /**
323
+ * Remove an inference-rejected token only while it still matches the stored login.
324
+ * @param token - token captured by the rejected inference request.
325
+ * @returns after matching credentials are removed and the expiry notification is emitted.
326
+ */
327
+ async rejectToken(token: string): Promise<void>
328
+
329
+ /**
330
+ * Read existing login identity without creating a device or returning credentials.
331
+ * @returns optional device/account identifiers and the provider's OS version string.
332
+ */
333
+ async getDeviceIdentity(): Promise<{ deviceId?: string; userId?: AccountUserId; osVersion: string }>
334
+
335
+ /**
336
+ * Read credentials for the configured embedded-page origin, bound to their account environment, and
337
+ * pair them with the account ID from the last successful profile read; no profile request is made.
338
+ * @returns a Host-only snapshot, or null while signed out or when the credential changed during the read.
339
+ */
340
+ async getPlatformSession(): Promise<PlatformSession | null>
341
+
342
+ /**
343
+ * Resolve a credential only for the inference origin allowed by the provider.
344
+ * @param url - actual request destination or API base URL.
345
+ * @returns stored token, or undefined for other origins or a signed-out account.
346
+ */
347
+ async resolveToken(url: string): Promise<string | undefined>
348
+
349
+ /**
350
+ * Join an active attempt or start browser authorization.
351
+ * @param client - identity of the requesting UI; a new attempt captures it, and joining retains the original attempt's identity.
352
+ * @param callbackOrigin - browser-accessible loopback HTTP origin, including any SSH local port.
353
+ * @param loginSource - initiating UI, used to return from a failed exchange.
354
+ * @returns the initial snapshot without waiting for browser approval.
355
+ */
356
+ @Remote async startSignIn(client: AccountClientMetadata, callbackOrigin: string, loginSource: 'web' | 'desktop'): Promise<AccountView>
357
+
358
+ /**
359
+ * Cancel only the named attempt; committing attempts settle before returning.
360
+ * @param attemptId - attempt identity from this Host.
361
+ * @returns state after cancellation or an already-started commit.
362
+ */
363
+ @Remote async cancelSignIn(attemptId: SignInAttemptId): Promise<AccountView>
364
+
365
+ /**
366
+ * Remove the local grant while retaining API keys; the provider revokes it in the background.
367
+ * @param client - identity of the requesting UI, captured for the background revocation retries.
368
+ * @returns the signed-out state after local removal; remote failures never restore the grant.
369
+ */
370
+ @Remote signOut(client: AccountClientMetadata): Promise<AccountView>
371
+
372
+ /**
373
+ * Inspect running work before sign-out.
374
+ * @returns whether a running task's latest request uses the account route; false when the optional agents service is absent.
375
+ */
376
+ @Remote hasRunningAccountTasks(): boolean
377
+
378
+ /**
379
+ * Subscribe to live credential expiry without replay.
380
+ * @param signal - subscription lifetime; provider disposal also ends it.
381
+ * @returns expiry notifications emitted during the subscription.
382
+ */
383
+ @Remote({ mode: 'stream' }) async *watchExpiry(signal: AbortSignal): AsyncIterable<'session-expired'>
384
+
385
+ /**
386
+ * Subscribe to ordered updates including a complete initial snapshot.
387
+ * @param signal - subscription lifetime; ending it never cancels login.
388
+ * @param includeIdentityChanges - also notify when cached Platform identity changes; defaults to false.
389
+ * @returns complete state with snapshot or credentials-changed event type; credential changes take priority when updates coalesce.
390
+ */
391
+ watch(signal: AbortSignal, includeIdentityChanges: boolean = false): AsyncIterable<AccountUpdate>
392
+
393
+ /**
394
+ * Stream account state without the Host-only identity subscription option.
395
+ * @param signal - subscription lifetime.
396
+ * @returns initial state, login progress, and credential-change updates.
397
+ */
398
+ @Remote({ name: 'watch', mode: 'stream' }) watchState(signal: AbortSignal): AsyncIterable<AccountUpdate>
399
+ ```
400
+
401
+ Source: [`packages/credentials/deepseek-account/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/deepseek-account/src/index.ts)
402
+
403
+ <a id="authorization-events"></a>
404
+
405
+ ### `authorization/*` events
406
+
407
+ <a id="authorizationsettled--emit"></a>
408
+
409
+ #### `authorization/settled` — emit
410
+
411
+ One authorization attempt has finished and released its key. Fires for every terminal outcome, failures included, so a surface watching a key it did not start (a second browser tab) learns the attempt is over.
412
+
413
+ ```ts cordis-catalog
414
+ /**
415
+ * One authorization attempt has finished and released its key. Fires for
416
+ * every terminal outcome, failures included, so a surface watching a key it
417
+ * did not start (a second browser tab) learns the attempt is over.
418
+ * @mode emit
419
+ * @param key - the credential record the finished attempt was authorizing.
420
+ * @param settlement - how it ended, including the `failed` case its caller sees as a thrown error.
421
+ */
422
+ 'authorization/settled'(key: CredentialKey, settlement: AuthorizationSettlement): void
423
+ ```
424
+
425
+ Source: [`packages/credentials/authorization/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/authorization/src/index.ts)
426
+
427
+ <a id="credentials-events"></a>
428
+
429
+ ### `credentials/*` events
430
+
431
+ <a id="credentialsrecord-updated--emit"></a>
432
+
433
+ #### `credentials/record-updated` — emit
434
+
435
+ Committed change to a stored credential record: a `modifyRecord` that wrote, a `deleteRecord` that removed, or an external edit observed in storage. Separate from `credentials/reference-updated` because the two key grammars are disjoint — a listener that received both on one event could not tell which space a subject belongs to. Listener failures are contained on the same terms as `credentials/reference-updated`.
436
+
437
+ ```ts cordis-catalog
438
+ /**
439
+ * Committed change to a stored credential record: a `modifyRecord` that
440
+ * wrote, a `deleteRecord` that removed, or an external edit observed in
441
+ * storage. Separate from `credentials/reference-updated` because the two key
442
+ * grammars are disjoint — a listener that received both on one event could
443
+ * not tell which space a subject belongs to. Listener failures are
444
+ * contained on the same terms as `credentials/reference-updated`.
445
+ * @param key - the record whose stored value changed.
446
+ * @mode emit
447
+ */
448
+ 'credentials/record-updated'(key: CredentialKey): void
449
+ ```
450
+
451
+ Source: [`packages/credentials/credentials/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/credentials/src/types.ts)
452
+
453
+ <a id="credentialsreference-updated--emit"></a>
454
+
455
+ #### `credentials/reference-updated` — emit
456
+
457
+ Committed change to a provider-managed credential source: a `set`, an `unset`, or an external edit observed in storage. Ambient process-environment changes are not observable and never emit. Listener failures are contained and logged — a sync throw and an async rejection alike — without changing the committed operation's outcome.
458
+
459
+ ```ts cordis-catalog
460
+ /**
461
+ * Committed change to a provider-managed credential source: a `set`, an
462
+ * `unset`, or an external edit observed in storage. Ambient
463
+ * process-environment changes are not observable and never emit. Listener
464
+ * failures are contained and logged — a sync throw and an async rejection
465
+ * alike — without changing the committed operation's outcome.
466
+ * @param ref - the reference whose stored value changed.
467
+ * @mode emit
468
+ */
469
+ 'credentials/reference-updated'(ref: CredentialRef): void
470
+ ```
471
+
472
+ Source: [`packages/credentials/credentials/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/credentials/src/types.ts)
473
+
474
+ <a id="deepseek-account-events"></a>
475
+
476
+ ### `deepseek-account/*` events
477
+
478
+ <a id="deepseek-accountmodel-sign-in-required--emit"></a>
479
+
480
+ #### `deepseek-account/model-sign-in-required` — emit
481
+
482
+ An account model request requires the user to sign in.
483
+
484
+ ```ts cordis-catalog
485
+ /** An account model request requires the user to sign in.
486
+ * @mode emit
487
+ */
488
+ 'deepseek-account/model-sign-in-required'(): void
489
+ ```
490
+
491
+ Source: [`packages/credentials/deepseek-account/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/deepseek-account/src/types.ts)
492
+
493
+ <a id="deepseek-accountsession-expired--emit"></a>
494
+
495
+ #### `deepseek-account/session-expired` — emit
496
+
497
+ Server rejection removed the current account credential; this notification is not replayed.
498
+
499
+ ```ts cordis-catalog
500
+ /** Server rejection removed the current account credential; this notification is not replayed.
501
+ * @mode emit
502
+ */
503
+ 'deepseek-account/session-expired'(): void
504
+ ```
505
+
506
+ Source: [`packages/credentials/deepseek-account/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/deepseek-account/src/types.ts)
507
+
508
+ <a id="deepseek-accountsigned-out--emit"></a>
509
+
510
+ #### `deepseek-account/signed-out` — emit
511
+
512
+ Local grant removal has completed.
513
+
514
+ ```ts cordis-catalog
515
+ /** Local grant removal has completed.
516
+ * @mode emit
517
+ */
518
+ 'deepseek-account/signed-out'(): void
519
+ ```
520
+
521
+ Source: [`packages/credentials/deepseek-account/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/deepseek-account/src/index.ts)
522
+ <!-- END GENERATED cordis-surface -->
523
+
524
+ 账号服务定义提供 getState、getProfile、getBalance、getNotifications、getNotificationContent、reportNotificationEvent、startSignIn、cancelSignIn、signOut、watch 及仅限 Host 的 resolveToken 和 getPlatformSession。平台提供者使用 AuthorizationFlow 和私有 GrantRecord 实现这些操作。AccountView 区分本地存在与服务器验证;尝试 ID 将取消绑定到单次本地流程。AccountUpdate 的 state 携带完整 AccountView,type 为 snapshot 时表示首次或进度更新,为 credentials-changed 时表示凭据写入或删除。待发送的凭据变化优先于进度更新。参见[账号包](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/credentials/deepseek-account/README.zh.md)。
525
+
526
+ `AccountClientMetadata` 携带调用方 `DSH_CLIENT_VERSION` 提供的 `version`、当前界面 `locale`,以及操作发起时采样的 `timezoneOffsetSeconds`。偏移为本地时间减 UTC 的秒数:UTC+8 对应 `28800`。其中不含凭证。登录申请在兑换及取消期间保留发起时的元数据;退出操作为撤销重试保留其元数据。