dsh-plugin-dev-kb 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (500) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.en.md +23 -6
  3. package/README.md +28 -8
  4. package/kb/INDEX.md +3 -3
  5. package/kb/README.md +9 -4
  6. package/kb/extra/AGENTS.md +1 -1
  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 +2 -2
  16. package/kb/extra/deepseek-llm-api-wire-extensions.zh.md +2 -2
  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 +1 -0
  22. package/kb/extra/defensive-patterns/package-surface.zh.md +1 -0
  23. package/kb/extra/defensive-patterns/remote-and-api.md +5 -3
  24. package/kb/extra/defensive-patterns/remote-and-api.zh.md +5 -3
  25. package/kb/extra/development.md +16 -9
  26. package/kb/extra/development.zh.md +16 -9
  27. package/kb/extra/event-producer-consumer.md +64 -51
  28. package/kb/extra/event-producer-consumer.zh.md +64 -51
  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 +204 -92
  32. package/kb/extra/module-graph.zh.md +204 -92
  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/README.md +2 -0
  50. package/kb/extra/persistence-changes/README.zh.md +2 -0
  51. package/kb/extra/persistence-changes/historical-formats/README.md +1 -1
  52. package/kb/extra/persistence-changes/historical-formats/README.zh.md +1 -1
  53. package/kb/extra/rescope.md +7 -5
  54. package/kb/extra/rescope.zh.md +7 -5
  55. package/kb/extra/subsystems/agent-team.md +38 -75
  56. package/kb/extra/subsystems/agent-team.zh.md +38 -75
  57. package/kb/extra/subsystems/attachment.md +36 -13
  58. package/kb/extra/subsystems/attachment.zh.md +36 -13
  59. package/kb/extra/subsystems/boot.md +179 -5
  60. package/kb/extra/subsystems/boot.zh.md +179 -5
  61. package/kb/extra/subsystems/computer-use.md +78 -0
  62. package/kb/extra/subsystems/computer-use.zh.md +78 -0
  63. package/kb/extra/subsystems/deliverables.md +2 -0
  64. package/kb/extra/subsystems/deliverables.zh.md +2 -0
  65. package/kb/extra/subsystems/forge.md +1226 -0
  66. package/kb/extra/subsystems/forge.zh.md +1226 -0
  67. package/kb/extra/subsystems/liveshare.md +158 -0
  68. package/kb/extra/subsystems/liveshare.zh.md +158 -0
  69. package/kb/extra/subsystems/mcp.md +96 -1
  70. package/kb/extra/subsystems/mcp.zh.md +96 -1
  71. package/kb/extra/subsystems/worktrees.md +54 -3
  72. package/kb/extra/subsystems/worktrees.zh.md +54 -3
  73. package/kb/extra/testing.md +1 -1
  74. package/kb/extra/testing.zh.md +1 -1
  75. package/kb/extra/ui-design-review-cases.md +445 -0
  76. package/kb/extra/ui-design-review-cases.zh.md +445 -0
  77. package/kb/extra/ui-radius.md +3 -1
  78. package/kb/extra/ui-radius.zh.md +3 -1
  79. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.md +1 -1
  80. package/kb/extra/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.zh.md +1 -1
  81. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/cordis-timer-wrappers/guide.md +24 -0
  82. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/cordis-timer-wrappers/guide.zh.md +24 -0
  83. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/plugin-manager-view-fields/guide.md +25 -0
  84. package/kb/extra/upgrade-guide/v0.2.1-alpha.2/plugin-manager-view-fields/guide.zh.md +25 -0
  85. package/kb/extra/upgrade-guide/v0.2.1-alpha.4/model-switch-compaction/guide.md +30 -0
  86. package/kb/extra/upgrade-guide/v0.2.1-alpha.4/model-switch-compaction/guide.zh.md +30 -0
  87. package/kb/extra/upgrade-guide/v0.2.1-alpha.4/session-model-selection/guide.md +28 -0
  88. package/kb/extra/upgrade-guide/v0.2.1-alpha.4/session-model-selection/guide.zh.md +28 -0
  89. package/kb/extra/upgrade-guide/v0.2.1-rc.1/agent-instructions-chain-budgets/guide.md +24 -0
  90. package/kb/extra/upgrade-guide/v0.2.1-rc.1/agent-instructions-chain-budgets/guide.zh.md +24 -0
  91. package/kb/extra/upgrade-guide/v0.2.1-rc.1/subagent-control-tools/guide.md +23 -0
  92. package/kb/extra/upgrade-guide/v0.2.1-rc.1/subagent-control-tools/guide.zh.md +23 -0
  93. package/kb/extra/upgrade-guide/v0.2.1-rc.2/agent-runtime-owner/guide.md +20 -0
  94. package/kb/extra/upgrade-guide/v0.2.1-rc.2/agent-runtime-owner/guide.zh.md +20 -0
  95. package/kb/extra/upgrade-guide/v0.2.1-rc.2/agent-team-subagents/guide.md +31 -0
  96. package/kb/extra/upgrade-guide/v0.2.1-rc.2/agent-team-subagents/guide.zh.md +31 -0
  97. package/kb/extra/upgrade-guide/v0.2.1-rc.2/approval-projection-dependency/guide.md +34 -0
  98. package/kb/extra/upgrade-guide/v0.2.1-rc.2/approval-projection-dependency/guide.zh.md +34 -0
  99. package/kb/extra/upgrade-guide/v0.2.1-rc.2/auto-review-shutdown/guide.md +20 -0
  100. package/kb/extra/upgrade-guide/v0.2.1-rc.2/auto-review-shutdown/guide.zh.md +20 -0
  101. package/kb/extra/upgrade-guide/v0.2.1-rc.2/auto-review-user-sources/guide.md +18 -0
  102. package/kb/extra/upgrade-guide/v0.2.1-rc.2/auto-review-user-sources/guide.zh.md +18 -0
  103. package/kb/extra/upgrade-guide/v0.2.1-rc.2/built-in-japanese/guide.md +18 -0
  104. package/kb/extra/upgrade-guide/v0.2.1-rc.2/built-in-japanese/guide.zh.md +18 -0
  105. package/kb/extra/upgrade-guide/v0.2.1-rc.2/conditional-tools/guide.md +25 -0
  106. package/kb/extra/upgrade-guide/v0.2.1-rc.2/conditional-tools/guide.zh.md +25 -0
  107. package/kb/extra/upgrade-guide/v0.2.1-rc.2/context-menu-services/guide.md +23 -0
  108. package/kb/extra/upgrade-guide/v0.2.1-rc.2/context-menu-services/guide.zh.md +23 -0
  109. package/kb/extra/upgrade-guide/v0.2.1-rc.2/cua-consent-storage/guide.md +22 -0
  110. package/kb/extra/upgrade-guide/v0.2.1-rc.2/cua-consent-storage/guide.zh.md +22 -0
  111. package/kb/extra/upgrade-guide/v0.2.1-rc.2/cua-preset-scope/guide.md +18 -0
  112. package/kb/extra/upgrade-guide/v0.2.1-rc.2/cua-preset-scope/guide.zh.md +18 -0
  113. package/kb/extra/upgrade-guide/v0.2.1-rc.2/cua-relative-coordinates/guide.md +17 -0
  114. package/kb/extra/upgrade-guide/v0.2.1-rc.2/cua-relative-coordinates/guide.zh.md +17 -0
  115. package/kb/extra/upgrade-guide/v0.2.1-rc.2/file-drag-callbacks/guide.md +19 -0
  116. package/kb/extra/upgrade-guide/v0.2.1-rc.2/file-drag-callbacks/guide.zh.md +19 -0
  117. package/kb/extra/upgrade-guide/v0.2.1-rc.2/headless-policy-composition/guide.md +27 -0
  118. package/kb/extra/upgrade-guide/v0.2.1-rc.2/headless-policy-composition/guide.zh.md +27 -0
  119. package/kb/extra/upgrade-guide/v0.2.1-rc.2/model-badge-package-removal/guide.md +18 -0
  120. package/kb/extra/upgrade-guide/v0.2.1-rc.2/model-badge-package-removal/guide.zh.md +18 -0
  121. package/kb/extra/upgrade-guide/v0.2.1-rc.2/new-session-blank-reuse/guide.md +22 -0
  122. package/kb/extra/upgrade-guide/v0.2.1-rc.2/new-session-blank-reuse/guide.zh.md +22 -0
  123. package/kb/extra/upgrade-guide/v0.2.1-rc.2/node-24/guide.md +17 -0
  124. package/kb/extra/upgrade-guide/v0.2.1-rc.2/node-24/guide.zh.md +17 -0
  125. package/kb/extra/upgrade-guide/v0.2.1-rc.2/official-bundle-lists/guide.md +18 -0
  126. package/kb/extra/upgrade-guide/v0.2.1-rc.2/official-bundle-lists/guide.zh.md +18 -0
  127. package/kb/extra/upgrade-guide/v0.2.1-rc.2/persistent-terminal-controls/guide.md +18 -0
  128. package/kb/extra/upgrade-guide/v0.2.1-rc.2/persistent-terminal-controls/guide.zh.md +18 -0
  129. package/kb/extra/upgrade-guide/v0.2.1-rc.2/pi-ai-default-capacities/guide.md +18 -0
  130. package/kb/extra/upgrade-guide/v0.2.1-rc.2/pi-ai-default-capacities/guide.zh.md +18 -0
  131. package/kb/extra/upgrade-guide/v0.2.1-rc.2/pi-ai-model-catalog/guide.md +53 -0
  132. package/kb/extra/upgrade-guide/v0.2.1-rc.2/pi-ai-model-catalog/guide.zh.md +53 -0
  133. package/kb/extra/upgrade-guide/v0.2.1-rc.2/pi-ai-protocol-replay/guide.md +30 -0
  134. package/kb/extra/upgrade-guide/v0.2.1-rc.2/pi-ai-protocol-replay/guide.zh.md +30 -0
  135. package/kb/extra/upgrade-guide/v0.2.1-rc.2/ptc-script-format/guide.md +20 -0
  136. package/kb/extra/upgrade-guide/v0.2.1-rc.2/ptc-script-format/guide.zh.md +20 -0
  137. package/kb/extra/upgrade-guide/v0.2.1-rc.2/sdk-desktop-context/guide.md +18 -0
  138. package/kb/extra/upgrade-guide/v0.2.1-rc.2/sdk-desktop-context/guide.zh.md +18 -0
  139. package/kb/extra/upgrade-guide/v0.2.1-rc.2/sdk-minimal-checkpoints/guide.md +18 -0
  140. package/kb/extra/upgrade-guide/v0.2.1-rc.2/sdk-minimal-checkpoints/guide.zh.md +18 -0
  141. package/kb/extra/upgrade-guide/v0.2.1-rc.2/session-projection-handles/guide.md +24 -0
  142. package/kb/extra/upgrade-guide/v0.2.1-rc.2/session-projection-handles/guide.zh.md +24 -0
  143. package/kb/extra/upgrade-guide/v0.2.1-rc.2/session-store-writes/guide.md +25 -0
  144. package/kb/extra/upgrade-guide/v0.2.1-rc.2/session-store-writes/guide.zh.md +25 -0
  145. package/kb/extra/upgrade-guide/v0.2.1-rc.2/session-team-mode/guide.md +22 -0
  146. package/kb/extra/upgrade-guide/v0.2.1-rc.2/session-team-mode/guide.zh.md +22 -0
  147. package/kb/extra/upgrade-guide/v0.2.1-rc.2/subagent-activation-options/guide.md +18 -0
  148. package/kb/extra/upgrade-guide/v0.2.1-rc.2/subagent-activation-options/guide.zh.md +18 -0
  149. package/kb/extra/upgrade-guide/v0.2.1-rc.2/subagent-service-methods/guide.md +19 -0
  150. package/kb/extra/upgrade-guide/v0.2.1-rc.2/subagent-service-methods/guide.zh.md +19 -0
  151. package/kb/extra/upgrade-guide/v0.2.1-rc.2/subagent-user-controls/guide.md +26 -0
  152. package/kb/extra/upgrade-guide/v0.2.1-rc.2/subagent-user-controls/guide.zh.md +26 -0
  153. package/kb/extra/upgrade-guide/v0.2.1-rc.2/tool-executor-plugins/guide.md +35 -0
  154. package/kb/extra/upgrade-guide/v0.2.1-rc.2/tool-executor-plugins/guide.zh.md +35 -0
  155. package/kb/extra/upgrade-guide/v0.2.1-rc.2/web-fetch-private-destinations/guide.md +21 -0
  156. package/kb/extra/upgrade-guide/v0.2.1-rc.2/web-fetch-private-destinations/guide.zh.md +21 -0
  157. package/kb/extra/upgrade-guide/v0.2.1-rc.2/webserver-index-peer/guide.md +17 -0
  158. package/kb/extra/upgrade-guide/v0.2.1-rc.2/webserver-index-peer/guide.zh.md +17 -0
  159. package/kb/extra/upgrade-guide/v0.2.1-rc.3/attachment-read-access/guide.md +23 -0
  160. package/kb/extra/upgrade-guide/v0.2.1-rc.3/attachment-read-access/guide.zh.md +23 -0
  161. package/kb/extra/upgrade-guide/v0.2.1-rc.3/computer-use-helper-permissions/guide.md +21 -0
  162. package/kb/extra/upgrade-guide/v0.2.1-rc.3/computer-use-helper-permissions/guide.zh.md +21 -0
  163. package/kb/extra/upgrade-guide/v0.2.1-rc.3/cua-bundle-id-consent/guide.md +20 -0
  164. package/kb/extra/upgrade-guide/v0.2.1-rc.3/cua-bundle-id-consent/guide.zh.md +20 -0
  165. package/kb/extra/upgrade-guide/v0.2.1-rc.3/generated-worktree-names/guide.md +20 -0
  166. package/kb/extra/upgrade-guide/v0.2.1-rc.3/generated-worktree-names/guide.zh.md +20 -0
  167. package/kb/extra/upgrade-guide/v0.2.1-rc.3/inbox-only-agent-wait/guide.md +19 -0
  168. package/kb/extra/upgrade-guide/v0.2.1-rc.3/inbox-only-agent-wait/guide.zh.md +19 -0
  169. package/kb/extra/upgrade-guide/v0.2.1-rc.3/independent-session-forks/guide.md +23 -0
  170. package/kb/extra/upgrade-guide/v0.2.1-rc.3/independent-session-forks/guide.zh.md +23 -0
  171. package/kb/extra/upgrade-guide/v0.2.1-rc.3/ptc-caller-cancellation/guide.md +20 -0
  172. package/kb/extra/upgrade-guide/v0.2.1-rc.3/ptc-caller-cancellation/guide.zh.md +20 -0
  173. package/kb/extra/upgrade-guide/v0.2.1-rc.3/session-follow-activation/guide.md +21 -0
  174. package/kb/extra/upgrade-guide/v0.2.1-rc.3/session-follow-activation/guide.zh.md +21 -0
  175. package/kb/extra/upgrade-guide/v0.2.1-rc.3/subagent-runtime-ownership/guide.md +21 -0
  176. package/kb/extra/upgrade-guide/v0.2.1-rc.3/subagent-runtime-ownership/guide.zh.md +21 -0
  177. package/kb/extra/upgrade-guide/v0.2.1-rc.3/team-mode-menu/guide.md +18 -0
  178. package/kb/extra/upgrade-guide/v0.2.1-rc.3/team-mode-menu/guide.zh.md +18 -0
  179. package/kb/extra/upgrade-guide/v0.2.1-rc.3/team-projection/guide.md +20 -0
  180. package/kb/extra/upgrade-guide/v0.2.1-rc.3/team-projection/guide.zh.md +20 -0
  181. package/kb/extra/upgrade-guide/v0.2.1-rc.3/web-file-downloads/guide.md +19 -0
  182. package/kb/extra/upgrade-guide/v0.2.1-rc.3/web-file-downloads/guide.zh.md +19 -0
  183. package/kb/extra/upgrade-guide/v0.2.1-rc.3/web-search-defaults/guide.md +18 -0
  184. package/kb/extra/upgrade-guide/v0.2.1-rc.3/web-search-defaults/guide.zh.md +18 -0
  185. package/kb/extra/upgrade-guide/v0.2.1-rc.4/model-listing-refresh/guide.md +22 -0
  186. package/kb/extra/upgrade-guide/v0.2.1-rc.4/model-listing-refresh/guide.zh.md +22 -0
  187. package/kb/extra/upgrade-guide/v0.2.1-rc.4/reasoning-body-props/guide.md +20 -0
  188. package/kb/extra/upgrade-guide/v0.2.1-rc.4/reasoning-body-props/guide.zh.md +20 -0
  189. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/context-menu-target/guide.md +19 -0
  190. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/context-menu-target/guide.zh.md +19 -0
  191. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/cordis-loader-entry-trees/guide.md +24 -0
  192. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/cordis-loader-entry-trees/guide.zh.md +24 -0
  193. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/css-anchored-menus/guide.md +21 -0
  194. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/css-anchored-menus/guide.zh.md +21 -0
  195. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/cua-source-dev-helper/guide.md +19 -0
  196. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/cua-source-dev-helper/guide.zh.md +19 -0
  197. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/desktop-stable-channel/guide.md +18 -0
  198. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/desktop-stable-channel/guide.zh.md +18 -0
  199. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/forge-git-permissions/guide.md +21 -0
  200. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/forge-git-permissions/guide.zh.md +21 -0
  201. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/forge-worktree-entry/guide.md +29 -0
  202. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/forge-worktree-entry/guide.zh.md +29 -0
  203. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/fs-observation-policy-default-off/guide.md +29 -0
  204. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/fs-observation-policy-default-off/guide.zh.md +29 -0
  205. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/llm-request-purpose-declarations/guide.md +29 -0
  206. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/llm-request-purpose-declarations/guide.zh.md +29 -0
  207. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/pi-ai-request-image-count/guide.md +18 -0
  208. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/pi-ai-request-image-count/guide.zh.md +18 -0
  209. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/projection-event-frames/guide.md +32 -0
  210. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/projection-event-frames/guide.zh.md +32 -0
  211. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/projection-released-checkpoint/guide.md +30 -0
  212. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/projection-released-checkpoint/guide.zh.md +30 -0
  213. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/projection-snapshot-scope/guide.md +19 -0
  214. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/projection-snapshot-scope/guide.zh.md +19 -0
  215. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/retained-ptc-timeout/guide.md +21 -0
  216. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/retained-ptc-timeout/guide.zh.md +21 -0
  217. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/schedule-agent-tools/guide.md +37 -0
  218. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/schedule-agent-tools/guide.zh.md +37 -0
  219. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/schedule-remote-host-tasks/guide.md +22 -0
  220. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/schedule-remote-host-tasks/guide.zh.md +22 -0
  221. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/sdk-run-commands/guide.md +24 -0
  222. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/sdk-run-commands/guide.zh.md +24 -0
  223. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/session-header-menu/guide.md +20 -0
  224. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/session-header-menu/guide.zh.md +20 -0
  225. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/subagent-explicit-reasoning/guide.md +20 -0
  226. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/subagent-explicit-reasoning/guide.zh.md +20 -0
  227. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/web-search-credential-modes/guide.md +17 -0
  228. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/web-search-credential-modes/guide.zh.md +17 -0
  229. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/web-search-default-provider/guide.md +19 -0
  230. package/kb/extra/upgrade-guide/v0.2.2-alpha.2/web-search-default-provider/guide.zh.md +19 -0
  231. package/kb/extra/upgrade-guide/v0.2.2-alpha.3/chat-process-activity-context/guide.md +18 -0
  232. package/kb/extra/upgrade-guide/v0.2.2-alpha.3/chat-process-activity-context/guide.zh.md +18 -0
  233. package/kb/extra/upgrade-guide/v0.2.2-alpha.3/subagent-names/guide.md +29 -0
  234. package/kb/extra/upgrade-guide/v0.2.2-alpha.3/subagent-names/guide.zh.md +29 -0
  235. package/kb/extra/web-styling.md +19 -1
  236. package/kb/extra/web-styling.zh.md +19 -1
  237. package/kb/meta/search-index.json +1272 -1098
  238. package/kb/meta/source.json +8 -4
  239. package/kb/site/develop/cordis-tutorial/04-events.md +1 -1
  240. package/kb/site/develop/cordis-tutorial/07-into-the-harness.md +5 -4
  241. package/kb/site/develop/framework/events.md +1 -1
  242. package/kb/site/develop/practice/dynamic-cordis.md +1 -1
  243. package/kb/site/en/develop/cordis-tutorial/04-events.md +1 -1
  244. package/kb/site/en/develop/cordis-tutorial/07-into-the-harness.md +5 -4
  245. package/kb/site/en/develop/framework/events.md +1 -1
  246. package/kb/site/en/develop/practice/dynamic-cordis.md +1 -1
  247. package/kb/site/en/guide/network-proxy.md +1 -1
  248. package/kb/site/en/guide/plugin-market.md +10 -10
  249. package/kb/site/en/guide/providers.md +5 -1
  250. package/kb/site/en/guide/python-sdk.md +17 -2
  251. package/kb/site/en/guide/schedule.md +45 -26
  252. package/kb/site/en/reference/agent-lifecycle.md +3 -1
  253. package/kb/site/en/reference/api-gateway.md +4 -4
  254. package/kb/site/en/reference/capability-seams.md +65 -17
  255. package/kb/site/en/reference/config-catalog.md +560 -238
  256. package/kb/site/en/reference/cookbook/adding-a-package.md +4 -2
  257. package/kb/site/en/reference/cookbook/extension-cookbook.md +1 -1
  258. package/kb/site/en/reference/cordis-api/context.md +1 -1
  259. package/kb/site/en/reference/cordis-api/events.md +9 -9
  260. package/kb/site/en/reference/cordis-api/fiber.md +85 -32
  261. package/kb/site/en/reference/cordis-api/inherited.md +10 -9
  262. package/kb/site/en/reference/experimental-persistence-catalog.md +3 -0
  263. package/kb/site/en/reference/index.md +14 -8
  264. package/kb/site/en/reference/persistence-catalog.md +532 -246
  265. package/kb/site/en/reference/subsystems/client-modules.md +19 -11
  266. package/kb/site/en/reference/subsystems/compaction.md +1 -1
  267. package/kb/site/en/reference/subsystems/conversation.md +2 -0
  268. package/kb/site/en/reference/subsystems/core.md +119 -65
  269. package/kb/site/en/reference/subsystems/filesystem.md +202 -28
  270. package/kb/site/en/reference/subsystems/index.md +3 -1
  271. package/kb/site/en/reference/subsystems/llm-streaming.md +92 -4
  272. package/kb/site/en/reference/subsystems/persistence.md +17 -7
  273. package/kb/site/en/reference/subsystems/plan.md +4 -4
  274. package/kb/site/en/reference/subsystems/ptc-runtime.md +12 -5
  275. package/kb/site/en/reference/subsystems/sandbox.md +11 -4
  276. package/kb/site/en/reference/subsystems/schedule.md +194 -430
  277. package/kb/site/en/reference/subsystems/session-projection.md +186 -44
  278. package/kb/site/en/reference/subsystems/session-reference.md +4 -3
  279. package/kb/site/en/reference/subsystems/session.md +119 -31
  280. package/kb/site/en/reference/subsystems/sidebar-right.md +12 -11
  281. package/kb/site/en/reference/subsystems/skills.md +4 -4
  282. package/kb/site/en/reference/subsystems/slots.md +30 -3
  283. package/kb/site/en/reference/subsystems/storage.md +26 -9
  284. package/kb/site/en/reference/subsystems/subagent.md +119 -102
  285. package/kb/site/en/reference/subsystems/system-prompt.md +13 -11
  286. package/kb/site/en/reference/subsystems/token-meter.md +45 -0
  287. package/kb/site/en/reference/subsystems/tools.md +222 -82
  288. package/kb/site/en/reference/subsystems/typert.md +21 -11
  289. package/kb/site/en/reference/subsystems/user-questions.md +22 -6
  290. package/kb/site/en/reference/subsystems/web-client.md +1 -1
  291. package/kb/site/en/reference/subsystems/web-server.md +68 -23
  292. package/kb/site/en/reference/subsystems/web.md +79 -21
  293. package/kb/site/en/reference/tool-catalog.md +270 -395
  294. package/kb/site/en/reference/tool-execution-pipeline.md +5 -4
  295. package/kb/site/guide/network-proxy.md +1 -1
  296. package/kb/site/guide/plugin-market.md +10 -10
  297. package/kb/site/guide/providers.md +5 -1
  298. package/kb/site/guide/python-sdk.md +17 -2
  299. package/kb/site/guide/schedule.md +45 -26
  300. package/kb/site/reference/agent-lifecycle.md +3 -1
  301. package/kb/site/reference/api-gateway.md +4 -4
  302. package/kb/site/reference/capability-seams.md +65 -17
  303. package/kb/site/reference/config-catalog.md +560 -238
  304. package/kb/site/reference/cookbook/adding-a-package.md +4 -2
  305. package/kb/site/reference/cookbook/extension-cookbook.md +1 -1
  306. package/kb/site/reference/cordis-api/context.md +1 -1
  307. package/kb/site/reference/cordis-api/events.md +9 -9
  308. package/kb/site/reference/cordis-api/fiber.md +87 -32
  309. package/kb/site/reference/cordis-api/inherited.md +10 -9
  310. package/kb/site/reference/experimental-persistence-catalog.md +3 -0
  311. package/kb/site/reference/index.md +14 -8
  312. package/kb/site/reference/persistence-catalog.md +532 -246
  313. package/kb/site/reference/subsystems/client-modules.md +19 -11
  314. package/kb/site/reference/subsystems/compaction.md +1 -1
  315. package/kb/site/reference/subsystems/conversation.md +4 -0
  316. package/kb/site/reference/subsystems/core.md +119 -65
  317. package/kb/site/reference/subsystems/filesystem.md +202 -28
  318. package/kb/site/reference/subsystems/index.md +3 -1
  319. package/kb/site/reference/subsystems/llm-streaming.md +92 -4
  320. package/kb/site/reference/subsystems/persistence.md +17 -7
  321. package/kb/site/reference/subsystems/plan.md +4 -4
  322. package/kb/site/reference/subsystems/ptc-runtime.md +12 -5
  323. package/kb/site/reference/subsystems/sandbox.md +11 -4
  324. package/kb/site/reference/subsystems/schedule.md +197 -433
  325. package/kb/site/reference/subsystems/session-projection.md +186 -44
  326. package/kb/site/reference/subsystems/session-reference.md +4 -3
  327. package/kb/site/reference/subsystems/session.md +119 -31
  328. package/kb/site/reference/subsystems/sidebar-right.md +12 -11
  329. package/kb/site/reference/subsystems/skills.md +4 -4
  330. package/kb/site/reference/subsystems/slots.md +30 -3
  331. package/kb/site/reference/subsystems/storage.md +26 -9
  332. package/kb/site/reference/subsystems/subagent.md +119 -102
  333. package/kb/site/reference/subsystems/system-prompt.md +13 -11
  334. package/kb/site/reference/subsystems/token-meter.md +45 -0
  335. package/kb/site/reference/subsystems/tools.md +222 -82
  336. package/kb/site/reference/subsystems/typert.md +21 -11
  337. package/kb/site/reference/subsystems/user-questions.md +22 -6
  338. package/kb/site/reference/subsystems/web-client.md +1 -1
  339. package/kb/site/reference/subsystems/web-server.md +68 -23
  340. package/kb/site/reference/subsystems/web.md +79 -21
  341. package/kb/site/reference/tool-catalog.md +273 -399
  342. package/kb/site/reference/tool-execution-pipeline.md +4 -3
  343. package/lib/index.js +123 -8
  344. package/lib/kb-version.js +118 -0
  345. package/package.json +4 -2
  346. package/scripts/refresh-kb.mjs +153 -0
  347. package/scripts/selfcheck.mjs +18 -0
  348. package/scripts/smoke.mjs +77 -0
  349. package/skills/dsh-plugin-dev-kb.md +7 -6
  350. package/skills/dsh-plugin-starter.md +65 -0
  351. package/skills/dsh-upgrade-assistant.md +62 -0
  352. package/kb/extra/agent-lifecycle.md +0 -91
  353. package/kb/extra/agent-lifecycle.zh.md +0 -93
  354. package/kb/extra/api-gateway.md +0 -172
  355. package/kb/extra/api-gateway.zh.md +0 -178
  356. package/kb/extra/architecture.md +0 -165
  357. package/kb/extra/architecture.zh.md +0 -169
  358. package/kb/extra/capability-seams.md +0 -714
  359. package/kb/extra/capability-seams.zh.md +0 -716
  360. package/kb/extra/config-catalog.md +0 -4801
  361. package/kb/extra/config-catalog.zh.md +0 -4803
  362. package/kb/extra/cookbook/adding-a-package.md +0 -170
  363. package/kb/extra/cookbook/adding-a-package.zh.md +0 -170
  364. package/kb/extra/cookbook/adding-a-settings-card.md +0 -72
  365. package/kb/extra/cookbook/adding-a-settings-card.zh.md +0 -72
  366. package/kb/extra/cookbook/adding-a-tool.md +0 -101
  367. package/kb/extra/cookbook/adding-a-tool.zh.md +0 -103
  368. package/kb/extra/cookbook/adding-an-llm-adapter.md +0 -43
  369. package/kb/extra/cookbook/adding-an-llm-adapter.zh.md +0 -43
  370. package/kb/extra/cookbook/extension-cookbook.md +0 -132
  371. package/kb/extra/cookbook/extension-cookbook.zh.md +0 -136
  372. package/kb/extra/cordis-api/context.md +0 -364
  373. package/kb/extra/cordis-api/context.zh.md +0 -366
  374. package/kb/extra/cordis-api/events.md +0 -207
  375. package/kb/extra/cordis-api/events.zh.md +0 -209
  376. package/kb/extra/cordis-api/fiber.md +0 -375
  377. package/kb/extra/cordis-api/fiber.zh.md +0 -377
  378. package/kb/extra/cordis-api/inherited.md +0 -38
  379. package/kb/extra/cordis-api/registry.md +0 -152
  380. package/kb/extra/cordis-api/registry.zh.md +0 -154
  381. package/kb/extra/cordis-api/service.md +0 -102
  382. package/kb/extra/cordis-api/service.zh.md +0 -104
  383. package/kb/extra/cordis-tutorial/01-first-plugin.md +0 -95
  384. package/kb/extra/cordis-tutorial/01-first-plugin.zh.md +0 -95
  385. package/kb/extra/cordis-tutorial/02-lifecycle-and-effects.md +0 -98
  386. package/kb/extra/cordis-tutorial/02-lifecycle-and-effects.zh.md +0 -98
  387. package/kb/extra/cordis-tutorial/03-services.md +0 -98
  388. package/kb/extra/cordis-tutorial/03-services.zh.md +0 -98
  389. package/kb/extra/cordis-tutorial/04-events.md +0 -144
  390. package/kb/extra/cordis-tutorial/04-events.zh.md +0 -144
  391. package/kb/extra/cordis-tutorial/05-config.md +0 -111
  392. package/kb/extra/cordis-tutorial/05-config.zh.md +0 -111
  393. package/kb/extra/cordis-tutorial/06-composition-and-hmr.md +0 -113
  394. package/kb/extra/cordis-tutorial/06-composition-and-hmr.zh.md +0 -113
  395. package/kb/extra/cordis-tutorial/07-into-the-harness.md +0 -108
  396. package/kb/extra/cordis-tutorial/07-into-the-harness.zh.md +0 -108
  397. package/kb/extra/cordis-tutorial/index.md +0 -60
  398. package/kb/extra/cordis-tutorial/index.zh.md +0 -62
  399. package/kb/extra/experimental-persistence-catalog.md +0 -17
  400. package/kb/extra/experimental-persistence-catalog.zh.md +0 -17
  401. package/kb/extra/persistence-catalog.md +0 -9140
  402. package/kb/extra/persistence-catalog.zh.md +0 -9142
  403. package/kb/extra/subsystems/README.md +0 -76
  404. package/kb/extra/subsystems/README.zh.md +0 -76
  405. package/kb/extra/subsystems/approval.md +0 -170
  406. package/kb/extra/subsystems/approval.zh.md +0 -170
  407. package/kb/extra/subsystems/client-modules.md +0 -198
  408. package/kb/extra/subsystems/client-modules.zh.md +0 -198
  409. package/kb/extra/subsystems/client-resources.md +0 -92
  410. package/kb/extra/subsystems/client-resources.zh.md +0 -92
  411. package/kb/extra/subsystems/commands.md +0 -223
  412. package/kb/extra/subsystems/commands.zh.md +0 -223
  413. package/kb/extra/subsystems/compaction.md +0 -284
  414. package/kb/extra/subsystems/compaction.zh.md +0 -284
  415. package/kb/extra/subsystems/conversation.md +0 -301
  416. package/kb/extra/subsystems/conversation.zh.md +0 -303
  417. package/kb/extra/subsystems/core.md +0 -1113
  418. package/kb/extra/subsystems/core.zh.md +0 -1125
  419. package/kb/extra/subsystems/credentials.md +0 -493
  420. package/kb/extra/subsystems/credentials.zh.md +0 -493
  421. package/kb/extra/subsystems/filesystem.md +0 -530
  422. package/kb/extra/subsystems/filesystem.zh.md +0 -530
  423. package/kb/extra/subsystems/goal.md +0 -313
  424. package/kb/extra/subsystems/goal.zh.md +0 -313
  425. package/kb/extra/subsystems/jobs.md +0 -554
  426. package/kb/extra/subsystems/jobs.zh.md +0 -554
  427. package/kb/extra/subsystems/llm-streaming.md +0 -1196
  428. package/kb/extra/subsystems/llm-streaming.zh.md +0 -1202
  429. package/kb/extra/subsystems/lsp.md +0 -202
  430. package/kb/extra/subsystems/lsp.zh.md +0 -202
  431. package/kb/extra/subsystems/permission-presets.md +0 -167
  432. package/kb/extra/subsystems/permission-presets.zh.md +0 -167
  433. package/kb/extra/subsystems/persistence.md +0 -418
  434. package/kb/extra/subsystems/persistence.zh.md +0 -418
  435. package/kb/extra/subsystems/plan.md +0 -87
  436. package/kb/extra/subsystems/plan.zh.md +0 -87
  437. package/kb/extra/subsystems/ptc-runtime.md +0 -250
  438. package/kb/extra/subsystems/ptc-runtime.zh.md +0 -250
  439. package/kb/extra/subsystems/sandbox.md +0 -221
  440. package/kb/extra/subsystems/sandbox.zh.md +0 -221
  441. package/kb/extra/subsystems/schedule.md +0 -550
  442. package/kb/extra/subsystems/schedule.zh.md +0 -550
  443. package/kb/extra/subsystems/scope.md +0 -59
  444. package/kb/extra/subsystems/scope.zh.md +0 -61
  445. package/kb/extra/subsystems/session-projection.md +0 -356
  446. package/kb/extra/subsystems/session-projection.zh.md +0 -356
  447. package/kb/extra/subsystems/session-query.md +0 -511
  448. package/kb/extra/subsystems/session-query.zh.md +0 -511
  449. package/kb/extra/subsystems/session-reference.md +0 -224
  450. package/kb/extra/subsystems/session-reference.zh.md +0 -224
  451. package/kb/extra/subsystems/session-telemetry.md +0 -212
  452. package/kb/extra/subsystems/session-telemetry.zh.md +0 -212
  453. package/kb/extra/subsystems/session-title.md +0 -213
  454. package/kb/extra/subsystems/session-title.zh.md +0 -213
  455. package/kb/extra/subsystems/session.md +0 -1339
  456. package/kb/extra/subsystems/session.zh.md +0 -1343
  457. package/kb/extra/subsystems/settings.md +0 -155
  458. package/kb/extra/subsystems/settings.zh.md +0 -155
  459. package/kb/extra/subsystems/shell.md +0 -314
  460. package/kb/extra/subsystems/shell.zh.md +0 -314
  461. package/kb/extra/subsystems/sidebar-right.md +0 -160
  462. package/kb/extra/subsystems/sidebar-right.zh.md +0 -160
  463. package/kb/extra/subsystems/skills.md +0 -352
  464. package/kb/extra/subsystems/skills.zh.md +0 -352
  465. package/kb/extra/subsystems/slots.md +0 -200
  466. package/kb/extra/subsystems/slots.zh.md +0 -204
  467. package/kb/extra/subsystems/spill.md +0 -124
  468. package/kb/extra/subsystems/spill.zh.md +0 -124
  469. package/kb/extra/subsystems/storage.md +0 -259
  470. package/kb/extra/subsystems/storage.zh.md +0 -259
  471. package/kb/extra/subsystems/subagent.md +0 -686
  472. package/kb/extra/subsystems/subagent.zh.md +0 -688
  473. package/kb/extra/subsystems/subprocess.md +0 -321
  474. package/kb/extra/subsystems/subprocess.zh.md +0 -321
  475. package/kb/extra/subsystems/system-prompt.md +0 -254
  476. package/kb/extra/subsystems/system-prompt.zh.md +0 -254
  477. package/kb/extra/subsystems/terminal.md +0 -184
  478. package/kb/extra/subsystems/terminal.zh.md +0 -184
  479. package/kb/extra/subsystems/token-meter.md +0 -106
  480. package/kb/extra/subsystems/token-meter.zh.md +0 -106
  481. package/kb/extra/subsystems/tools.md +0 -747
  482. package/kb/extra/subsystems/tools.zh.md +0 -747
  483. package/kb/extra/subsystems/typert.md +0 -690
  484. package/kb/extra/subsystems/typert.zh.md +0 -690
  485. package/kb/extra/subsystems/user-questions.md +0 -307
  486. package/kb/extra/subsystems/user-questions.zh.md +0 -307
  487. package/kb/extra/subsystems/web-client.md +0 -100
  488. package/kb/extra/subsystems/web-client.zh.md +0 -100
  489. package/kb/extra/subsystems/web-server.md +0 -302
  490. package/kb/extra/subsystems/web-server.zh.md +0 -302
  491. package/kb/extra/subsystems/web.md +0 -206
  492. package/kb/extra/subsystems/web.zh.md +0 -206
  493. package/kb/extra/subsystems/workflow.md +0 -278
  494. package/kb/extra/subsystems/workflow.zh.md +0 -278
  495. package/kb/extra/subsystems/workspace.md +0 -647
  496. package/kb/extra/subsystems/workspace.zh.md +0 -647
  497. package/kb/extra/tool-catalog.md +0 -2824
  498. package/kb/extra/tool-catalog.zh.md +0 -2832
  499. package/kb/extra/tool-execution-pipeline.md +0 -65
  500. package/kb/extra/tool-execution-pipeline.zh.md +0 -67
@@ -6,440 +6,140 @@ outline: [2,3]
6
6
 
7
7
  # 宿主级 Schedule
8
8
 
9
- Schedule 独立于 Session 的加载状态存储提醒,并将其投递到原 Session。本页记录 [`types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/schedule/src/types.ts) 中的持久与模型可见类型;[包 README](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/schedule/README.zh.md) 负责组合方式与提醒文本格式。
10
-
11
- ## 持久记录
12
-
13
- `ScheduleId` 是全局唯一的[品牌化 ID](./core.md#branded-ids)。版本 1 的 `schedule` storage domain 的 `tasks` 表将每条 `ScheduleRecord` 与原始 `sessionId` 绑定,并存储 `status: 'active' | 'inactive'` 和可选的 `lastDelivery`。缺少状态的记录规范化为 `active`,不扫描或重建历史 Session。创建时将目标规范化为 RFC 3339 UTC `scheduledAt`;`after` 保留提交的延迟,`every` 保留固定间隔,`daily` 与 `weekly` 保留规范化后的本地 `time` 及显式 `timeZone`,`cron` 保留规范化后的五字段 `expression` 及显式 `timeZone`。每日、每周与 cron 记录解码保留已提交时点及已存储的时区拼写。已存储的任务记录声明必填的 `title`,即任务界面显示的短名称;创建时必须提供该字段,且绝不从指令派生。任何已存储记录都不得缺少标题:`title` 缺失、去除首尾空白后为空、带首尾空白或超过 120 个字符的已存储记录都会以 `ScheduleLogError` 拒绝持久化解码;schedule domain 未声明备份并跳过的策略,因此一条这样的已存储任务会拒绝整个 domain 的打开,而不是被丢弃。仅显式删除会移除任务;此前已物理删除的任务不会被恢复或虚构。
14
-
15
- ```ts type-equiv
16
- /** Durable one-shot reminder created from a positive delay. */
17
- interface AfterScheduleRecord {
18
- /** Globally unique task identity. */
19
- readonly id: ScheduleId
20
- /** Rule discriminator for a delayed one-shot reminder. */
21
- readonly kind: 'after'
22
- /** Required stored task name; already trimmed, non-empty, and at most 120 characters. */
23
- readonly title: string
24
- /** Trimmed reminder content supplied at creation. */
25
- readonly prompt: string
26
- /** Positive safe-integer delay accepted at creation. */
27
- readonly afterSeconds: number
28
- /** Four-digit-year RFC 3339 UTC target. */
29
- readonly scheduledAt: string
30
- }
31
- ```
9
+ Schedule 独立于 Session 的激活状态存储宿主任务。同一管理 API 按 id 操作任务,同一求值器处理七种权威时间类型:`after`、`at`、`every`、`daily`、`weekly`、`cron` 和 `rrule`。目标可以复用已有 Session、创建一个 Session 后复用,或每次投递创建 Session。[包 README](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/schedule/README.zh.md) 负责组合与提醒格式;完整值类型和请求类型以 [`types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/schedule/src/types.ts) 为准。
32
10
 
33
- ```ts type-equiv
34
- /** Durable one-shot reminder created from an absolute instant. */
35
- interface AtScheduleRecord {
36
- /** Globally unique task identity. */
37
- readonly id: ScheduleId
38
- /** Rule discriminator for an absolute one-shot reminder. */
39
- readonly kind: 'at'
40
- /** Required stored task name; already trimmed, non-empty, and at most 120 characters. */
41
- readonly title: string
42
- /** Trimmed reminder content supplied at creation. */
43
- readonly prompt: string
44
- /** Four-digit-year RFC 3339 UTC target. */
45
- readonly scheduledAt: string
46
- }
47
- ```
11
+ <a id="durable-tasks"></a>
12
+ ## 持久任务
48
13
 
49
- ```ts type-equiv
50
- /** Durable fixed-rate reminder aligned to creation or its most recent interval edit. */
51
- interface EveryScheduleRecord {
52
- /** Globally unique task identity. */
53
- readonly id: ScheduleId
54
- /** Rule discriminator for a fixed-rate recurring reminder. */
55
- readonly kind: 'every'
56
- /** Required stored task name; already trimmed, non-empty, and at most 120 characters. */
57
- readonly title: string
58
- /** Trimmed reminder content supplied at creation. */
59
- readonly prompt: string
60
- /** Fixed safe-integer interval, never below one minute. */
61
- readonly everySeconds: number
62
- /** Next anchor-aligned occurrence while active, or final occurrence when inactive. */
63
- readonly scheduledAt: string
64
- }
65
- ```
14
+ 插件 README 拥有当前 [v2 任务 schema、v1 默认值与持久 JSON 示例](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/schedule/README.zh.md#storage-format)。领域保留名称、路由和整单元布局。七种时间类型均保持权威性;规范化保留已提交发生时点,不将 Cron 转为 RRULE。
66
15
 
67
- ```ts type-equiv
68
- /** Durable daily wall-clock reminder; gaps skip a date and overlaps use the earlier instant. */
69
- interface DailyScheduleRecord {
70
- /** Globally unique task identity. */
71
- readonly id: ScheduleId
72
- /** Rule discriminator for a daily wall-clock reminder. */
73
- readonly kind: 'daily'
74
- /** Required stored task name; already trimmed, non-empty, and at most 120 characters. */
75
- readonly title: string
76
- /** Trimmed reminder content supplied at creation. */
77
- readonly prompt: string
78
- /** Local time normalized to HH:mm:ss.SSS. */
79
- readonly time: string
80
- /** Explicit IANA zone; equivalent timing edits retain the stored spelling. */
81
- readonly timeZone: string
82
- /** Committed next UTC instant while active, or final occurrence when inactive. */
83
- readonly scheduledAt: string
84
- }
85
- ```
16
+ 损坏的存储、无效行、与任务身份不一致的键及不支持的版本在任务激活前拒绝。打开失败不改变介质。文件不存在时从空域开始。目标 Session 缺失的任务仍在管理界面中可见;读取任务从不激活其 Session。
86
17
 
87
- ```ts type-equiv
88
- /** One-shot task variants. */
89
- type OneShotScheduleRecord = AfterScheduleRecord | AtScheduleRecord
90
- ```
18
+ <a id="storage-versioning"></a>
19
+ ## 存储版本
91
20
 
92
- ```ts type-equiv
93
- /** Recurring Host task variants. */
94
- type RecurringScheduleRecord = EveryScheduleRecord | DailyScheduleRecord | WeeklyScheduleRecord | CronScheduleRecord
95
- ```
21
+ README 定义[任务何时升级](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/schedule/README.zh.md#storage-format)、SQLite 不变的物理 schema、修改成本以及未来兼容 v3。`compatibleVersions` 允许旧单元版本戳进入当前解码;正常编辑与投递持久化当前行。读取保持存储不变。共享的[领域版本策略](./storage.md#domain-versioning)同时适用于 JSON 和 SQLite。
96
22
 
97
- ```ts type-equiv
98
- /** Reminder rule and target, stored with its original Session binding. */
99
- type ScheduleRecord = OneShotScheduleRecord | RecurringScheduleRecord
100
- ```
23
+ <a id="recurrence-rules"></a>
24
+ ## 重复规则
101
25
 
102
- ## 绝对时间输入
103
-
104
- `at` 选择器可以是严格且带偏移量的 RFC 3339 字符串,也可以是精确的本地日历对象。本地形式让这种解释在工具边界保持显式:
105
-
106
- ```ts type-equiv
107
- /** Structured local-calendar input accepted by creation and timing edits. */
108
- interface LocalAtInput {
109
- /** Four-digit ISO calendar date. */
110
- readonly date: string
111
- /** Local wall-clock time with optional one-to-three digit milliseconds. */
112
- readonly time: string
113
- /** Explicit UTC or IANA Area/Location zone. */
114
- readonly time_zone: string
115
- }
116
- ```
26
+ [`dsh-util-time`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/util/time/README.zh.md) 负责可复用的 `Cron`、`RRule` 解析及有界发生时点计算。两种解析值均暴露其权威表达式、时区、`next(after)` 和 `resolve(scheduledAt, acceptedAt)`。解析器返回接受值或拒绝原因;Schedule 将原因映射为自身输入错误,并负责记录验证、准入限制、持久化与投递。
117
27
 
118
- ```ts type-equiv
119
- /** Absolute selector accepted by creation and timing edits. */
120
- type AtInput = string | LocalAtInput
121
- ```
28
+ 每个已存 `scheduledAt` 都是带毫秒精度、年份为 0001 至 9999 的规范 RFC 3339 UTC 时刻。解码不会根据当前时区数据重新计算它。只追赶最新一次的策略保留该已提交下界,投递最新到期时点一次,再提交第一个未来时点。规则耗尽后任务以 `ended` 状态保留。
122
29
 
123
- 随发行版交付的 Web 组合挂载 `schedule` 服务与 `ui-schedule` 任务页面。时钟读数与四个提醒工具归 preset 所有:`standard`、`cordis` 与 `ptc` 一同声明 `time-context` 与 `@deepseek-ai/dsh-tool-schedule`,`minimal` 两者都不声明。这三个 preset 中的 `tool-subagent` 与 `tool-subagent-fork` 两行都 deny 这四个工具,且每个工具都以 `subagent_session` 拒绝被委派的调用方,因此被委派的子 agent 既看不到这些工具,其调用也不会被接受。当 open turn 只有一个无歧义的浏览器时区时,Time-context 会告诉模型按该请求本地时区解释未明确限定时区的自然语言日期和时间;浏览器时区记录混合或缺失时,则告诉模型询问用户。该指引不是持久 Session 默认值:模型仍必须在字符串形式中传入偏移量,或在本地形式中传入 `time_zone`;Schedule 绝不会读取浏览器、Session、进程或模型上下文。
30
+ | 类型 | 权威时间字段 |
31
+ |---|---|
32
+ | `after` | 正整数 `afterSeconds` 和已提交的一次性 UTC 目标。 |
33
+ | `at` | 已提交的一次性 UTC 目标。输入接受显式偏移时刻,或本地日期、时间与显式时区。 |
34
+ | `every` | 不小于 60 的整数 `everySeconds`;发生时点始终对齐已提交的间隔锚点。 |
35
+ | `daily` | `HH:mm:ss.SSS` 形式的本地 `time` 与显式 `timeZone`。 |
36
+ | `weekly` | Daily 字段加非空、唯一、升序的 ISO `weekdays` 集合,周一为 1、周日为 7。 |
37
+ | `cron` | 规范五字段 `expression` 与显式 `timeZone`。 |
38
+ | `rrule` | `rrule` 中一条规范 `DTSTART` 和一条 `RRULE` 行;`DTSTART` 提供锚点与时区。 |
124
39
 
125
- Schedule 会拒绝无效偏移量与时区、不带偏移量的字符串、非未来目标,以及落在夏令时缺口内的本地时间。遇到夏令时重叠时,会选择第一次出现的较早时点。创建成功后只存储规范化后的 UTC `scheduledAt`,因此回放绝不依赖环境时区状态。
40
+ 本地日历规则跳过不存在的墙钟时间,并在重叠时选择较早的时刻。固定间隔保留经过时间的含义。一次性延迟可短于一分钟;首次投递之后仍适用单任务最小投递间隔。
126
41
 
127
- <a id="daily-wall-clock-input"></a>
128
- ## 每日本地钟表时间输入
129
-
130
- `daily` 是与 `after_seconds`、`at`、`every_seconds`、`weekly` 和 `cron` 互斥的创建选择器之一。例如,`daily: { time: '23:00:00', time_zone: 'Asia/Shanghai' }` 选择该时区每个符合条件的本地日期的 23:00。对象必须精确包含以下字段,不包含日期、偏移量或间隔:
131
-
132
- ```ts type-equiv
133
- /** Daily local-time selector accepted by creation and timing edits. */
134
- interface DailyInput {
135
- /** Local HH:mm:ss time with optional one-to-three fractional digits. */
136
- readonly time: string
137
- /** Explicit UTC or IANA Area/Location zone. */
138
- readonly time_zone: string
139
- }
140
- ```
141
-
142
- 创建时要求 `HH:mm:ss` 及可选的一至三位小数秒,拒绝闰秒和 `24:00`,将显式 IANA 时区规范化,并以 `HH:mm:ss.SSS` 存储 `time`。首个 `scheduledAt` 严格晚于创建时刻。不存在的本地时间或整个日期被跳过;重叠时间选择较早时点,每个本地日期一次。若较早时点已过去,较晚的重复时点不符合条件。仅 UTC 目标年份受 0001–9999 范围约束;UTC 范围边缘的本地日期可以落在第 0 年或第 10000 年。
42
+ <a id="absolute-time-input"></a>
43
+ ## 绝对时间输入
143
44
 
144
- 已保存的下一目标是已提交的 UTC 时点。宿主解码器与重启保留该时点,不依据时区规则重新解析;规范名称变化后,有效的已存储时区别名仍可读取。后续目标使用宿主当前的 IANA 数据。下一目标必须晚于投递判断时刻,并且其本地日期晚于所选发生时点的日期。没有可表示的未来 UTC 目标时,创建以 `time_out_of_range` 失败。
45
+ `at` 选择器接受带显式 `Z` 或数字偏移的 RFC 3339 时刻,或 `{ date, time, time_zone }`。本地日期使用 `YYYY-MM-DD`;本地时间使用 `HH:mm:ss`,可带一至三位小数秒。歧义或不存在的日历值通过共享时间工具验证。新的绝对目标必须严格位于未来且可表示。
145
46
 
146
- ## 固定速率输入与补偿
47
+ <a id="daily-wall-clock-input"></a>
48
+ ## 每日与每周输入
147
49
 
148
- `every_seconds` 是至少 60 秒的安全整数间隔,与创建时间对齐。它衡量经过的时间,而不是每日本地钟表时间:发生偏移量变化时,`every_seconds: 86400` 不能替代 `daily`。协议不提供共享冷却时间或跨记录准入规则;下文描述的 cron 选择器是钟表时间语义,不是固定速率间隔。
50
+ Daily 输入提供 `{ time, time_zone }`;Weekly 另加显式 `weekdays`。创建时选择第一个严格位于未来的实际发生时点。追赶选择最新实际到期时点,并推进到之后匹配的本地日期。等价编辑保留已存 IANA 别名和固定 UTC 目标,包括毫秒。
149
51
 
150
- 宿主启动时若 Every、Daily、Weekly 或 Cron 记录已逾期,只发送最新一次到期发生时点。Every 推进到投递判断时刻之后第一个与当前间隔起算点对齐的目标;Daily、Weekly 和 Cron 遵循上文与下文的本地日期规则。错过的发生时点不会累积。若没有可表示的下一 UTC 目标,投递后保留未运行记录及最近一次回执。
52
+ <a id="fixed-rate-input-and-catch-up"></a>
53
+ ## 固定频率输入与追赶
151
54
 
152
- 一次性提醒各自产生一条 follow-up。同一次扫描中属于同一 Session 的到期重复记录共用由 `renderRecurringReminderBatchFraming` 渲染的一条 follow-up,每条记录各包含最新一次触发。一分钟下限仅适用于固定速率间隔;投递不等待目标 Agent 空闲。
55
+ Every 输入提供 `every_seconds`。新间隔从接受时间开始;修改间隔会在编辑被接受时建立新锚点。不变的间隔或名称/指令编辑保留原锚点。停机后合并错过的间隔,而非逐次重放。
153
56
 
154
57
  <a id="cron-wall-clock-input"></a>
155
- ## Cron 钟表时间输入
58
+ ## Cron 输入
156
59
 
157
- `cron` 是互斥的创建选择器之一。它的对象只携带严格的标准五字段 Vixie 表达式 `minute hour day-of-month month day-of-week` 和显式 IANA 时区,例如 `cron: { expression: '*/15 9-17 * * 1-5', time_zone: 'Asia/Shanghai' }`。字段取值范围如下:
60
+ Cron 输入提供 `{ expression, time_zone }`。五个数字字段依次为分钟、小时、月内日期、月份和星期。支持的原子形式为 `*`、单值、闭区间、星号或区间步长,以及逗号分隔列表。周日接受 0 或 7,规范为 0。拒绝名称、宏、秒字段和单值后跟步长的形式。
158
61
 
159
- | 字段 | 取值范围 | 说明 |
160
- |---|---|---|
161
- | minute | 0-59 | |
162
- | hour | 0-23 | |
163
- | day-of-month | 1-31 | |
164
- | month | 1-12 | |
165
- | day-of-week | 0-7 | `0` 和 `7` 都表示周日。 |
62
+ Cron 保留 Vixie 的日期匹配方式:两个日期字段都受限时,月内日期**或**星期任意一个匹配即可;任一字段以 `*` 开头(包括带步长的星号)时,两组匹配值均须匹配。规范化保留此差异。搜索受一个 400 年公历周期和四位 UTC 年份范围约束。启用时拒绝没有可表示未来时点的规则。
166
63
 
167
- 每个字段接受 `*`、单个值、`a-b` 范围、`n >= 1` 的 `*/n` 与 `a-b/n` 步长,以及由这些形式组成的逗号分隔列表。其他写法一律以 `invalid_rule` 拒绝,且错误信息会指出违规字段:`L`、`W`、`#` 运算符,`JAN`/`MON` 名称,`@daily` 风格宏,带秒字段的六字段表达式,超出范围的值、反向范围、零步长和空字段。由于该方言只有五个字段,最小间隔为一分钟;亚分钟级调度仍然不受支持。
64
+ Cron 记录从不转换为 RRULE。读取、描述性编辑、重新指定目标和重启均保留其已存表达式与时区作为权威来源。自定义编辑器接受五字段 Cron 表达式,并显示显式时区选择器。
168
65
 
169
- 创建时会先规范化表达式再存储。规范化会把每个字段展开为匹配值集合,再确定性地重新编码该集合:重复值合并,相邻的值与范围合并,均匀步长写为 `a-b/n`,而以 `*` 开头的字段写为星号步长(匹配全部取值时写 `*`,否则写最宽的星号步长并追加其余取值),步长 `1` 被移除,周日统一写为 `0`。不以 `*` 开头的字段绝不会变成星号步长。保留每个字段的星号标志,正是下文 day-of-month/day-of-week 规则在存储的表达式上仍与 Vixie 一致的原因。持久化解码器会拒绝非规范化的已存储表达式。
66
+ <a id="rrule-input"></a>
67
+ ## RRULE 输入
170
68
 
171
- 首个目标是该时区内本地日期与时间匹配的第一个严格未来时点。它复用 Daily 与 Weekly 的本地时间解析:不存在的本地时间被跳过,重叠时间每个日期只取较早一次。已提交的 UTC `scheduledAt` 在重启时绝不重新计算。
69
+ RRULE 接受有界的 RFC 5545 子集,以共享的 [`rrule.ts` 解析器](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/util/time/src/rrule.ts)为准。输入恰好包含两条非空内容行:先 `DTSTART`,再 `RRULE`。开始时间为真实的 `YYYYMMDDTHHMMSS` 日期时间,使用 UTC `Z` 或显式 IANA `TZID`;拒绝浮动本地时间、数字偏移、仅日期值及额外内容行。引擎使用 `rrule` 2.8.1,支持 `MINUTELY`、`HOURLY`、`DAILY`、`WEEKLY`、`MONTHLY` 和 `YEARLY`。一次性投递使用 `COUNT=1`。
172
70
 
173
- day-of-month 与 day-of-week 遵循 Vixie 语义。字段文本以 `*` 开头即为星号字段,与它匹配的取值集合无关,因此 `*/1` 与 `*/2` 都是星号字段,而 `1-31` 与 `0-7` 受限。任一字段为星号字段时,本地日期只有在两个字段都匹配时才算匹配;两个字段都不是星号字段时,匹配任一字段即算匹配。
71
+ 只接受 `FREQ`、`INTERVAL`、`COUNT`、`UNTIL`、`WKST`、`BYSECOND`、`BYMINUTE`、`BYHOUR`、`BYDAY`、`BYMONTHDAY`、`BYYEARDAY`、`BYWEEKNO`、`BYMONTH` 和 `BYSETPOS`;字段名和列表值必须唯一。`INTERVAL` 为正安全整数。`WKST` 为 `MO` 至 `SU` 中的星期,默认 `MO`。数字列表须在解析器规定的范围内。分钟/小时规则不接受 `BY` 部分。`BYMONTHDAY` 和带序数的 `BYDAY` 仅用于每月或每年;`BYYEARDAY` 和 `BYWEEKNO` 仅用于每年。带序数的 `BYDAY` 不能与 `BYWEEKNO` 组合,`BYSETPOS` 必须搭配另一项 `BY`。
174
72
 
175
- cron 解码保留已提交时点及已存储的时区拼写,并拒绝非规范化的已存储表达式。cron 仅属于当前宿主的 `ScheduleRecord`;冻结的历史 Session 解码器不接受它。
73
+ 验证发生在枚举之前。拒绝 `SECONDLY`、多个 `BYSECOND` 值及一个频率周期中超过 10,080 个可能候选时点的规则。`COUNT` 为 1 至 1,000,不能与 `UNTIL` 共存;`UNTIL` 为以 `Z` 结尾的绝对 UTC 日期时间。开始与截止年份为 0100 至 9999。集合位置至多 31 个,每个位置为 −366 至 −1 或 1 至 366,且必须在有界周期内。较严格的新规则编写检查还会在周期至多有一个候选时点时拒绝 `BYSETPOS`;解码和恢复未改变的受支持规则仍使用正常求值器。
176
74
 
177
- ## 历史 Session 变更
75
+ 不存在的本地 `DTSTART` 会被拒绝。后续不存在的本地发生时点会跳过,且不消耗 `COUNT`;重叠时间选择较早时刻。即使正负集合位置选中同一时点,`COUNT` 也仅计数一次。
178
76
 
179
- 版本 1 的 `schedule/change` 事件仍可作为历史 Session 数据解码。其 create 和 fold 类型使用 `LegacyScheduleRecord`,仅接受 After、At 和 Every;Daily、Weekly 与 Cron 仅属于当前宿主的 `ScheduleRecord`。宿主记录解码器独立于冻结的历史解码器。在 title 出现之前写入的 create 记录不含 `title`,因此历史解码器接受该缺失成员,而宿主解码器仍要求它。历史事件不会填充 storage domain 或触发投递。这些事件中的已有提醒需要显式通过 `schedule_create` 重新创建;不会隐式迁移 Session 或转换旧 `at` 记录。
77
+ 自定义 RRULE 文本保留其 `DTSTART` 时区。面向模型的工具继续指导并接受 RRULE;共享管理 API 则显式接受每种时间类型。
180
78
 
181
- ```ts type-equiv
182
- /**
183
- * Frozen Session event and fold vocabulary; daily rules belong only to Host storage.
184
- *
185
- * A version-1 event written before titles existed persists no `title` member, so
186
- * `after`, `at`, and `every` decode without one and stay readable. The Host task
187
- * record requires the member and never persists a record without it.
188
- */
189
- type LegacyScheduleRecord =
190
- | LegacyAfterScheduleRecord
191
- | LegacyAtScheduleRecord
192
- | LegacyEveryScheduleRecord
193
- ```
79
+ <a id="delivery-targets"></a>
80
+ ## 投递目标
194
81
 
195
- ```ts type-equiv
196
- /** Creates one durable reminder record. */
197
- interface ScheduleCreateChange {
198
- readonly version: 1
199
- readonly operation: 'create'
200
- readonly schedule: LegacyScheduleRecord
201
- }
202
- ```
82
+ | 目标 | 投递行为 |
83
+ |---|---|
84
+ | `session` | 投递到一个已有 Session。启用时在管理 FIFO 内检查其存在、未归档且不属于委托子 Agent。投递时再次检查归档状态。 |
85
+ | `new_once` | 首次投递前预留 Session id,需要时创建该 Session,然后保存为 `session` 并复用。重试和重启保留该预留标识。 |
86
+ | `new` | 每次投递创建 Session。创建前持久化 `pendingDelivery.targetSessionId`,使失败尝试重用同一 Session。 |
203
87
 
204
- ```ts type-equiv
205
- /** Deletes one currently active reminder. */
206
- interface ScheduleDeleteChange {
207
- readonly version: 1
208
- readonly operation: 'delete'
209
- readonly id: ScheduleId
210
- }
211
- ```
88
+ 创建时省略目标则默认 `new_once`。新增或替换 `new`、`new_once` 目标需要嵌入环境提供 Session 创建能力。SDK 组合缺少该能力时,在保存前以 `invalid_rule` 拒绝这些请求;已有 `session` 目标仍可使用。创建值 `cwd` 和 `agentPreset` 可省略,使用 Host 默认值。创建的 Session 会加入其目录已注册的 Workspace(如有),且尚无标题时使用任务标题;`new` 另加该规则时区中的创建分钟。加入或重命名失败会记录日志,但不阻断投递。
212
89
 
213
- ```ts type-equiv
214
- /** Records that one active one-shot reminder entered the durable dispatch history. */
215
- interface OneShotScheduleDispatchChange {
216
- readonly version: 1
217
- readonly operation: 'dispatch'
218
- readonly id: ScheduleId
219
- }
220
- ```
90
+ <a id="task-management"></a>
91
+ ## 任务管理
221
92
 
222
- ```ts type-equiv
223
- /** Records one fixed-rate decision and advances directly past missed occurrences. */
224
- interface EveryScheduleDispatchChange {
225
- readonly version: 1
226
- readonly operation: 'dispatch'
227
- readonly id: ScheduleId
228
- /** Wall-clock decision time used to select the latest due occurrence. */
229
- readonly acceptedAt: string
230
- }
231
- ```
93
+ 所有调用方使用相同的 `ScheduleCreateRequest`、`ScheduleCatalogEntry`、`ScheduleTiming` 和 `ScheduleEditRequest`。浏览器安全类型来自 `@deepseek-ai/dsh-schedule/client`。不存在 Session 绑定的管理入口或第二套类型别名。
232
94
 
233
- ```ts type-equiv
234
- /** Durable dispatch shapes supported by the current rule set. */
235
- type ScheduleDispatchChange = OneShotScheduleDispatchChange | EveryScheduleDispatchChange
236
- ```
237
-
238
- ```ts type-equiv
239
- /** Strict version-1 durable Schedule mutation union. */
240
- type ScheduleChange = ScheduleCreateChange | ScheduleDeleteChange | ScheduleDispatchChange
241
- ```
242
-
243
- 历史 decoder 与 fold 拒绝未知版本、额外字段、复用 ID 和无效转换。该事件仍编入[持久化目录](../persistence-catalog.md#schedulechange--log-only)。Session 历史不负责决定当前活动任务。
244
-
245
- ## 活动视图与管理
246
-
247
- 工具值将存储记录与当前墙钟派生的时间状态组合。宿主在投递需要时恢复原 Session;列出和删除任务不会激活该 Session。
248
-
249
- ```ts type-equiv
250
- /** Current delivery timing derived from the durable record and wall clock. */
251
- type ScheduleState = 'scheduled' | 'overdue'
252
- ```
253
-
254
- ```ts type-equiv
255
- /** Host-driven delivery resumes the original Session when needed. */
256
- type ScheduleDeliveryMode = 'host'
257
- ```
258
-
259
- ```ts type-equiv
260
- /** Complete model-facing view of one active reminder. */
261
- type ScheduleView = ScheduleRecord & {
262
- /** Whether the target remains in the future. */
263
- readonly state: ScheduleState
264
- /** Reminder delivery never leaves the owning session. */
265
- readonly deliveryMode: ScheduleDeliveryMode
266
- }
267
- ```
95
+ | 操作 | 行为 |
96
+ |---|---|
97
+ | `create(request, actorSessionId?, signal?)` | 分配 id 并保存标题、指令、带类型的 `timing` 及可选目标。 |
98
+ | `list(request?)` | 分页读取;默认 100、最多 500,可选 `active` 过滤及非负 `offset`。 |
99
+ | `catalog()` / `view({ id })` | 无分页上限读取所有任务,或读取一个任务。 |
100
+ | `history({ id, limit, before? })` | 不激活 Session 地读取已保存投递;limit 为 1 至 100。 |
101
+ | `edit(request, actorSessionId?, signal?)` | 按 id 原子应用 `update` patch 或 `delete`。 |
102
+ | `deleteInactive()` | 一次批量写入仅删除 `ended` 任务,保留活动和暂停任务,返回 `{ deleted }`。空集合不写入。 |
103
+ | `run({ id }, signal?)` | 经正常准入立即投递,不改变已计划发生时点或生命周期。 |
104
+ | `deliveryLimits()` | 读取 `new` 目标的配置最小间隔。 |
268
105
 
269
- [工具目录](../tool-catalog.md#deepseek-aidsh-tool-schedule) 负责 `schedule_create`、`schedule_list`、`schedule_delete` 和 `schedule_update` 的 schema,这四个工具由 [`@deepseek-ai/dsh-tool-schedule`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/tool-schedule/README.zh.md) 在挂载它的每个 preset 中贡献;宿主服务拥有存储与投递。创建、删除和更新在 storage domain 写入确认后返回成功。宿主级队列将这些变更与到期投递串行化;删除任务不会移除已入队消息。模型工具操作当前 Session,共享宿主的 create、list、update 和 delete 方法接受显式 Session 绑定。`create` 与 `update` 在其委派深度大于零时以 `subagent_session` 拒绝被委派子 agent 拥有的 Session,且投递无法到达这样的 Session。四个模型工具在工具层拒绝被委派的调用方,而 `list`、`catalog`、`history` 与 `delete` 仍服务该 Session。创建必须提供 `title`,其去除首尾空白后必须非空且不超过 120 个字符;缺失、空白或过长的标题以 `invalid_prompt` 拒绝,且创建过程绝不从指令派生标题。create 和 list 视图在指令之外同时携带已存储的 `title`,且 `title` 缺失或非法的已存储记录在解码时被拒绝。
270
-
271
- ```ts type-equiv
272
- /** Reminder creation selector, shared by the model consumer and Host service. */
273
- interface ScheduleCreateRequest {
274
- /** Non-empty reminder text. */
275
- prompt: string
276
- /** Required task name of at most 120 characters, non-empty after trimming; names the card, detail heading, and task lists. */
277
- title: string
278
- /** Relative one-shot delay in seconds. */
279
- after_seconds?: number
280
- /** Absolute one-shot target. */
281
- at?: AtInput
282
- /** Fixed recurrence interval in seconds. */
283
- every_seconds?: number
284
- /** Daily wall-clock time in an explicit IANA zone. */
285
- daily?: DailyInput
286
- /** Weekly wall-clock time and explicit ISO weekday set in an IANA zone. */
287
- weekly?: WeeklyInput
288
- /** Five-field cron expression evaluated in an explicit IANA zone. */
289
- cron?: CronInput
290
- }
291
- ```
292
-
293
- ```ts type-equiv
294
- /** Session-scoped task list, without Agent activation. */
295
- interface ScheduleListRequest {
296
- /** Original Session binding. */
297
- sessionId: SessionId
298
- }
299
- ```
300
-
301
- ```ts type-equiv
302
- /** Delete request identifying a task within its original Session binding. */
303
- interface ScheduleDeleteRequest extends ScheduleListRequest {
304
- /** Task to remove. */
305
- id: ScheduleId
306
- }
307
- ```
308
-
309
- ```ts type-equiv
310
- /** Successful `schedule_delete` value, including the non-mutating not-found result. */
311
- type ScheduleDeleteResult =
312
- | { readonly id: ScheduleId; readonly deleted: true }
313
- | { readonly id: ScheduleId; readonly deleted: false; readonly code: 'schedule_not_found' }
314
- ```
315
-
316
- ## Web 目录
106
+ Remote 路由提供 `create`、`list`、`catalog`、`view`、`history`、`edit`、`deleteInactive`、`run` 和 `deliveryLimits`;传输包装器委托给相同管理方法。Remote 验证失败使用带 Schedule 输入码的 `schedule/input-invalid`。原生调用方收到 `ScheduleInputError`。
317
107
 
318
- Remote 方法 `schedule.catalog()` 返回活动和未运行的宿主任务及其原始 Session 绑定,先按 `scheduledAt` 升序排列,再按 `id` 字典序排列。它只读取 Schedule domain,不激活 Session 或读取其历史。浏览器消费方接收以下可安全用于浏览器的类型:
108
+ 非空的 `deleteInactive` 批量写入成功后发出 `schedule/changed`,供读取方刷新;不向 Agent 排入通知。批量写入被拒绝时也发出该事件,让读取方丢弃旧状态。正常失败保留全部行;`unknown-state` 失败可能已移除行,并隔离领域直到重新打开。失败调用以拒绝结束,不返回删除数量。
319
109
 
320
- ```ts type-equiv
321
- /** Durable Session inbox delivery acknowledgment, not model execution completion. */
322
- interface ScheduleDeliveryReceipt {
323
- /** Canonical UTC target of the delivered occurrence. */
324
- readonly scheduledAt: string
325
- /** Canonical UTC time sampled after Session persistence acknowledged delivery. */
326
- readonly deliveredAt: string
327
- /** Identity of the delivered message, shared by tasks in one recurring batch. */
328
- readonly messageId: MessageId
329
- }
330
- ```
110
+ 更新可以替换标题、指令、带类型时间、目标或活动状态。省略字段保留原值。规则改变或显式恢复时,在 FIFO 接受时刻计算未来时点;等价时间及描述性编辑保留已提交目标。已投递的一次性任务需要新的未来时间才能恢复。重新指定目标不要求转换时间类型。
331
111
 
332
- ```ts type-equiv
333
- /** Browser-safe retained reminder with its original Session binding. */
334
- type ScheduleCatalogEntry = ScheduleRecord & {
335
- /** Session receiving this reminder when it becomes due. */
336
- readonly sessionId: SessionId
337
- /** Inactive reminders remain visible but never schedule another delivery. */
338
- readonly status: 'active' | 'inactive'
339
- /** Most recent durably acknowledged inbox delivery, when available. */
340
- readonly lastDelivery?: ScheduleDeliveryReceipt
341
- }
342
- ```
112
+ `expectedUpdatedAt` 是可选的乐观比较。字符串与已存修订比较;显式 `null` 与缺失的修订比较。不一致时返回 `schedule_conflict`。编辑没有修订的行会创建修订;即使时钟回拨,后续修订仍单调递增。开始写入前检查取消,已经开始的持久写入不回滚。
343
113
 
344
- Remote 方法 `schedule.list({ sessionId })`、模型 `schedule_list` 和 Session 页头目录仅返回活动任务。模型视图派生的时间 `state` 与存储的生命周期 `status` 仍是不同概念。删除通过 `schedule.delete({ sessionId, id })` 使用条目的原始绑定;绑定不匹配时返回未找到。模型工具传入当前 Agent 的 Session,全局用户界面则传入所选任务的绑定。仅校验绑定并不构成调用者鉴权。无 payload 的 `schedule/changed` 事件通知客户端刷新列表;重新连接后,客户端再次获取当前状态。
114
+ <a id="timing-edits"></a>
115
+ ## 时间编辑
345
116
 
346
- 随发行版交付的 Web 组合把 `ui-schedule` 与宿主能力一起挂载。[客户端包](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/client/ui-schedule/README.zh.md) 负责目录、空状态与删除控件。页面单独筛选全部、活动和未运行任务,保留未运行任务详情及详情页签条内的原 Session 入口,并要求显式确认删除。“规则”和“任务运行记录”页签将任务设置与按需分页加载的已保存回执分开。回执与未运行状态均不确认模型执行。
117
+ `timing` 判别字段只选择其匹配的载荷,例如 `{ kind: "cron", cron: { expression: "0 9 * * 1-5", time_zone: "Asia/Shanghai" } }` 或 `{ kind: "rrule", rrule: "DTSTART:20990101T090000Z\nRRULE:FREQ=DAILY" }`。其他选择器使用 `after_seconds`、`at`、`every_seconds`、`daily` 或 `weekly`。持久化前拒绝无效组合。UI 经相同 API 保存带类型的 Cron/RRULE 输入,并保留未修改的时间规则。
347
118
 
348
- ## 修改时间
119
+ <a id="saved-delivery-records"></a>
120
+ ## 已保存投递记录
349
121
 
350
- `schedule.update({ sessionId, id, expected, change })` 修改活动任务,不激活其 Session。`expected` 是完整的已观察 `ScheduleRecord`,不是附带额外元数据的目录条目。Host 在投递和删除共用的 FIFO 内将它与当前记录比较。正常投递可能在编辑期间推进目标;此时旧快照返回 `schedule_conflict`,不会覆盖当前规则。任务不存在或绑定不匹配时返回 `schedule_not_found`,未运行任务返回 `schedule_ended`。
122
+ 回执记录 `scheduledAt`、`deliveredAt`、`messageId` 和 `targetSessionId`;它确认持久 Session 收件箱写入,而非模型完成。已保存记录还可含不可变的已发送 `prompt`。旧回执缺少目标 id 时,在任何重新指定目标的编辑之前使用已解析的可复用目标,因此后续目标不会重写其历史。 回执既没有显式目的地也没有已知复用目标时,拒绝解码;新默认预留不能证明历史目的地。
351
123
 
352
- ```ts type-equiv
353
- /** Timing-only edit; it may select a different recurrence kind than the stored record, and one-shot targets use an absolute `at`. */
354
- type ScheduleTimingChange =
355
- | { readonly kind: 'at'; readonly at: AtInput }
356
- | { readonly kind: 'every'; readonly every_seconds: number }
357
- | { readonly kind: 'daily'; readonly daily: DailyInput }
358
- | { readonly kind: 'weekly'; readonly weekly: WeeklyInput }
359
- | { readonly kind: 'cron'; readonly cron: CronInput }
360
- ```
124
+ 新任务从已知的空历史开始。旧行没有 `deliveryHistory` 时,暴露其最新回执(如有),并设置 `earlierRecordsUnavailable: true`;不会编造丢失的历史或指令快照。省略的 `earlierRecordsPruned` 读为 false。消息 id 重复,或最新保存记录与 `lastDelivery` 不一致,均拒绝解码。
361
125
 
362
- ```ts type-equiv
363
- /** Compare-and-update request within the original Session binding. */
364
- interface ScheduleUpdateRequest extends ScheduleDeleteRequest, ScheduleUpdateContent {
365
- /** Complete record observed when editing began, including the committed target. */
366
- readonly expected: ScheduleRecord
367
- /** New timing; its kind may differ from the stored record's kind, and an omitted value keeps the committed target. */
368
- readonly change?: ScheduleTimingChange
369
- }
370
- ```
126
+ 历史按追加顺序排列,不受时钟回拨影响。确认在同一任务提交中追加并裁剪,默认保留最多 200 条、30 天,同时保留最新回执。查询页从新到旧,使用不含游标自身的消息 id 游标。硬删除移除任务及历史,不移除已入队的 Session 消息。
371
127
 
372
- ```ts type-equiv
373
- /** Successful current record, non-mutating lookup/conflict failure, or invalid name/instruction/timing. */
374
- type ScheduleUpdateResult =
375
- | { readonly id: ScheduleId; readonly updated: boolean; readonly record: ScheduleRecord }
376
- | ScheduleUpdateMiss
377
- | ScheduleToolError
378
- ```
379
-
380
- Daily 规则改变后,沿用本地时间和时区语义计算严格晚于当前时间的首个目标。Cron 规则改变后,先规范化表达式,再按相同的本地日期、缺口与较早重叠规则计算首个严格未来目标。Every 间隔改变后,以接纳保存时刻加该间隔建立新的起点。After 或 At 任务可以在保留 id 的同时,通过 At 记录接收新的绝对目标。这些操作保留已存储的 `title`、指令、原始 Session 绑定、生命周期状态和全部已保存回执。变更也可以选择不同的重复类型,此时按新规则重算目标,并保留同一 id、标题、指令、Session 绑定、状态与全部已保存回执。归一化后等价的规则返回 `updated: false` 及未改变的记录,不重写存储、不重设目标,也不发出变更事件。写法不同但等价的 Cron 表达式就是这样的无变更,因为比较使用规范化表达式与规范化时区。
381
-
382
- 输入校验复用现有时间错误。改变后的绝对目标在 FIFO 槽位开始执行时仍须位于未来。任务 put 成功后才发出变更通知并重算 timer。存储和生命周期失败会 reject;取消检查发生在排队和初始化等待之后,但不能回滚已经开始的写入。一次性记录保留 UTC 时点,而非编辑表单中的 IANA 时区。时间编辑不追加历史 Session 事件:模型通过 `schedule_update` 做同样的原地修改,它与读取到的记录做比对,而不是删除后重建任务。
383
-
384
- ## 已保存的发送记录
385
-
386
- `schedule.history({ sessionId, id, limit })` 读取已保存的回执,不激活 Session。显式 limit 必须是 1–100 的安全整数。分页按追加顺序逆序排列,不按墙钟排序;可选的消息 id 游标排除上一页最早的记录。新记录追加不会改变该游标的定位。任务不存在或 Session 绑定错误时返回 `schedule_not_found`;游标未知时返回 `delivery_cursor_not_found`,不会视为查询成功的空页。
387
-
388
- ```ts type-equiv
389
- /** Saved inbox delivery with its immutable sent prompt when recorded by this Host. */
390
- interface ScheduleDeliveryRecord extends ScheduleDeliveryReceipt {
391
- /** Prompt sent for this occurrence; unavailable for legacy receipts. */
392
- readonly prompt?: string
393
- }
394
- ```
395
-
396
- ```ts type-equiv
397
- /** Explicitly bounded saved-delivery query within one Session binding. */
398
- interface ScheduleDeliveryHistoryRequest extends ScheduleDeleteRequest {
399
- /** Required safe-integer page size from 1 through 100. */
400
- limit: number
401
- /** Message identity of the oldest entry in the previous page; excluded from this page. */
402
- before?: MessageId
403
- }
404
- ```
405
-
406
- ```ts type-equiv
407
- /** Configured limits applied when appending one task's delivery receipt. */
408
- interface DeliveryRetentionBounds {
409
- /** Retained window in days, measured back from the acknowledgment being appended. */
410
- readonly days: number
411
- /** Maximum retained records per task; the newest survive. */
412
- readonly records: number
413
- }
414
- ```
128
+ <a id="host-delivery"></a>
129
+ ## 宿主投递
415
130
 
416
- ```ts type-equiv
417
- /** Newest-first saved deliveries, or a non-mutating task/cursor lookup failure. */
418
- type ScheduleDeliveryHistoryResult =
419
- | {
420
- readonly id: ScheduleId
421
- readonly records: ScheduleDeliveryRecord[]
422
- /** Whether earlier delivery records may be unavailable; missing receipts are never reconstructed. */
423
- readonly earlierRecordsUnavailable: boolean
424
- /** True only after an append removed saved records; absent legacy evidence is false. */
425
- readonly earlierRecordsPruned: boolean
426
- /** Current Host retention configuration, also used by the delivery writer. */
427
- readonly retention: DeliveryRetentionBounds
428
- /** Oldest returned message identity, present only when older saved records remain. */
429
- readonly nextBefore?: MessageId
430
- }
431
- | { readonly id: ScheduleId; readonly code: 'schedule_not_found' | 'delivery_cursor_not_found' }
432
- ```
131
+ 一个 Host 定时器驱动活动任务。运行时与管理写入共用一个 FIFO。已有和预留 Session 通过 `schedule/resolve-agent` 解析,由嵌入环境拥有激活,已注入的 Web 控制器作为后备。复用 Session 的任务占用执行槽,直到目标 Agent 空闲;期间发生的时点会合并。`new` 目标允许多个执行并行。到期且投向相同已有 Session 的重复记录共享一条消息;`after` 和 `at` 单独投递。
433
132
 
434
- 新任务初始化空历史。缺少历史字段的旧任务仅展示已有的最近一次回执,标明更早记录不可用,且读取不会重写任务行。后续确认会保留该回执,并追加带有指令快照的真实新回执。已丢失的历史与缺失的旧指令快照不会被重建。历史、最近回执、状态和下一目标由同一次任务行写入提交;显式删除任务会停止后续投递、把任务行连同其已保存的回执一并移除,并使其离开 `list` 与 `catalog`;对话消息不受影响。已保存的发送记录在追加确认时按配置的 `deliveryHistoryDays` 窗口(以每条回执的 `deliveredAt` 向前计算)与 `deliveryHistoryRecords` 条数上限裁剪;新追加的最近一次回执始终保留,发生裁剪时标记更早记录不可用。分页限制返回的记录数量,不限制存储大小或指令字节数。
133
+ 定时与手动投递均遵守单任务 60 秒最小间隔。`newSessionIntervalSeconds` 可为 `new` 目标提高间隔,最多一周。已存后继时点保持间隔时,下界从上次发生时点计算;否则从上次确认计算,因此投递延迟不会移动规则锚点。读取仅在适用时暴露 `executionActive` 和 `deliveryFloorEndsAt`。
435
134
 
436
- ## 宿主投递
135
+ Session 收件箱持久化先于任务回执写入,因此两份存储之间崩溃可能重复投递。Host 必须运行。指向某 Session 的活动任务会参与其归档准入;归档停止操作会删除这些活动任务。
437
136
 
438
- 宿主启动时读取持久任务,并将定时器设为最早的活动目标。未运行任务仍可查询,但不会再次安排投递。投递时通过 Session controller 获取原 Session,包括尚未加载的 Session。恢复后重新采样实际时间,并排除时钟回拨后尚未到期的成员;这些任务仍保留定时义务。投递不涉及 Goal 或独立的 Run 完成记录。
137
+ 管理变更提交后,Schedule 向除操作者之外的每个已加载相关 Agent 排队发送尽力而为的通知。通知加入下一模型步骤,不开启新轮次;其 Session I/O 不占用管理/投递队列。每次投递新建的 Session 不会累积到相关元数据中。
439
138
 
440
- 插件来源的 `followup()` 同步将消息追加到 Session 收件箱。Session flush 成功后,一次任务记录 put 追加带有指令快照的发送记录,并同时存储最新的 `ScheduleDeliveryReceipt`,以及一次性任务的 `inactive` 状态或重复任务的下一目标和状态。同一批次的重复任务共享回执的 `messageId`;每条回执保留该任务已投递的发生时点。投递不会中途引导或取消当前轮次,也不等待模型完成。
139
+ <a id="historical-session-changes"></a>
140
+ ## 历史 Session 变更
441
141
 
442
- Session 获取、消息入队或持久化确认失败时,任务继续保存在存储中,并报告宿主警告。后续管理变更或宿主重启会重试。Session 持久化与任务 put 不具有跨存储原子性。收件箱已持久化、任务尚未 put 时发生崩溃,可能重复投递;回执并未消除这一间隔。Schedule 不提供模型结果回执、执行取消或外部通知渠道。
142
+ 历史版本 1 的 `schedule/change` 事件保留冻结的 `LegacyScheduleRecord` 类型:`after`、`at`、`every`,包括原来的可选标题。它们仍是已保存的 Session 数据,Schedule 不为其保留解释器、警告钩子、导入器或定时器。`schedule.json` 中已有的 Host 任务仍使用正常的解码器与求值器。
443
143
 
444
144
  <!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
445
145
 
@@ -453,80 +153,124 @@ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnp
453
153
 
454
154
  ### `ctx.schedule` — `ScheduleService`
455
155
 
456
- Shared management service; reads, deletion, and timing edits never activate a Session.
156
+ Shared management service; reads and management writes never activate a Session, and only delivery creates or resumes one.
457
157
 
458
- `sessionPersistence` is a load-order requirement rather than a directly called service: a delivery commits only when `ctx.sessions.flush()` reports that a `session/flush` listener participated, and the persistence backend providing this service is the plugin that registers that listener.
158
+ `sessionPersistence` supplies header-only target validation and the `session/flush` listener that acknowledges durable inbox delivery through `ctx.sessions.flush()`.
459
159
 
460
160
  ```ts cordis-catalog
161
+ /** Read effective delivery limits without loading or activating a task.
162
+ * @returns The configured minimum spacing between deliveries that each create a Session, in seconds.
163
+ */
164
+ @Remote('deliveryLimits') deliveryLimits(): { readonly newSessionIntervalSeconds: number }
165
+
166
+ /**
167
+ * Create one task with a Host-generated identity for a human Remote caller.
168
+ * @param request - Title, prompt, recurrence, and delivery destination.
169
+ * @param signal - Cancellation checked before the durable write begins, including after FIFO waits.
170
+ * @returns The stored task. Cancellation does not roll back an in-flight write.
171
+ */
172
+ @Remote('create') async remoteCreate(request: ScheduleCreateRequest, signal?: AbortSignal): Promise<ScheduleCatalogEntry>
173
+
461
174
  /**
462
- * Create a reminder bound to the caller-selected Session without activating it.
175
+ * Create one task and record the acting Agent's Session as involved; the Remote form omits that Session.
463
176
  *
464
- * The request must supply a title; a missing, blank-after-trim, or over-long
465
- * title rejects with `invalid_prompt` instead of deriving one from the prompt.
466
- * A Session a delegated child owns rejects with `subagent_session`, because delivery
467
- * can never reach it: the child is one whose delegation depth is above zero.
468
- * The record is built from the clock reading taken before the request joins the
469
- * serialized queue, so a create that waits behind a longer operation keeps its
470
- * request-time anchor and may already be due when the queue reaches it.
471
- * @param sessionId - Original Session receiving the reminder.
472
- * @param request - Validated tool selector, required title, and reminder content.
473
- * @param signal - Optional cancellation checked before persistence begins, including after FIFO waits.
474
- * @returns The durably stored schedule. Cancellation does not roll back an in-flight write.
177
+ * The record is built from the clock reading taken before the request joins the serialized queue. A `session`
178
+ * target must exist and must not belong to a delegated child; a `new_once` target reserves its Session identity.
179
+ * @param request - Title, prompt, recurrence, and delivery destination.
180
+ * @param actorSessionId - Session of the acting Agent, or undefined for a human caller.
181
+ * @param signal - Cancellation checked before the durable write begins, including after FIFO waits.
182
+ * @returns The stored task. Cancellation does not roll back an in-flight write.
183
+ */
184
+ async create( request: ScheduleCreateRequest, actorSessionId?: SessionId, signal?: AbortSignal, ): Promise<ScheduleCatalogEntry>
185
+
186
+ /**
187
+ * Read one page of Host tasks without activating target Sessions.
188
+ * @param request - Optional activity filter, page size, and offset.
189
+ * @returns The requested page and total matching task count.
475
190
  */
476
- async create(sessionId: SessionId, request: ScheduleCreateRequest, signal?: AbortSignal): Promise<ScheduleRecord>
191
+ async list(request: ScheduleListRequest = {}): Promise<ScheduleListResult>
477
192
 
478
193
  /**
479
- * Read the selected Session's active tasks without resuming its Agent.
480
- * @param request - Session whose task list is requested.
481
- * @returns Persisted reminders in storage order.
194
+ * Remote form of the shared Host-wide list.
195
+ * @param request - Optional activity filter, page size, and offset.
196
+ * @returns The requested page and total matching task count.
482
197
  */
483
- @Remote('list') async list(request: ScheduleListRequest): Promise<ScheduleRecord[]>
198
+ @Remote('list') async remoteList(request: ScheduleListRequest): Promise<ScheduleListResult>
484
199
 
485
200
  /**
486
- * Read all active and inactive Host reminders with their original Session bindings.
487
- * A deleted reminder has no row, so it is absent here.
488
- * Does not activate Sessions or read Session history.
489
- * @returns Reminders ordered by scheduledAt ascending, then lexicographically by id.
201
+ * Read every Host task without a page bound or Session activation.
202
+ * @returns All tasks, active first, with target and execution metadata.
490
203
  */
491
204
  @Remote('catalog') async catalog(): Promise<ScheduleCatalogEntry[]>
492
205
 
493
206
  /**
494
- * Read saved inbox deliveries without activating or reading the original Session.
495
- * The task's own row supplies its binding, so its records stay readable through this lookup.
496
- * @param request - Session binding, task identity, explicit limit, and optional exclusive message cursor.
207
+ * Read one task without activating its target Sessions.
208
+ * @param request - Task identity.
209
+ * @returns The task, or a non-mutating miss.
210
+ */
211
+ @Remote('view') async view(request: ScheduleViewRequest): Promise<ScheduleViewResult>
212
+
213
+ /**
214
+ * Read one page of saved deliveries without activating or reading a target Session.
215
+ * @param request - Task identity, explicit page size, and optional exclusive cursor.
216
+ * @returns Newest-first saved deliveries, or a task/cursor lookup failure.
217
+ */
218
+ async history(request: ScheduleDeliveryHistoryRequest): Promise<ScheduleDeliveryHistoryResult>
219
+
220
+ /**
221
+ * Remote form of the target-based {@link ScheduleService.history}; an invalid limit rejects with
222
+ * `schedule/input-invalid`.
223
+ * @param request - Task identity, explicit limit, and optional exclusive message cursor.
497
224
  * @returns Newest-first deliveries in append order, or a task/cursor lookup failure.
498
- * @throws ScheduleInputError when limit is not a safe integer from 1 through 100.
499
225
  */
500
- @Remote('history') async history(request: ScheduleDeliveryHistoryRequest): Promise<ScheduleDeliveryHistoryResult>
226
+ @Remote('history') async remoteHistory(request: ScheduleDeliveryHistoryRequest): Promise<ScheduleDeliveryHistoryResult>
501
227
 
502
228
  /**
503
- * Delete one task belonging to the selected Session, leaving queued messages intact.
229
+ * Deliver one task now without consuming or moving its scheduled occurrence; an archived destination Session rejects
230
+ * with `schedule/target-archived`.
231
+ * @param request - Task identity.
232
+ * @param signal - Cancellation checked after entering the delivery transaction and before delivery.
233
+ * @returns Task state after Session persistence acknowledged the delivery, `schedule_execution_pending` while
234
+ * another execution of the task is queued, running, or inside its delivery floor, or a non-mutating miss.
235
+ */
236
+ @Remote('run') async run(request: ScheduleRunRequest, signal?: AbortSignal): Promise<ScheduleRunResult>
237
+
238
+ /**
239
+ * Delete every ended Host task, leaving active tasks armed.
504
240
  *
505
- * The row is removed: the task no longer schedules, leaves `list` and `catalog`, and its
506
- * saved delivery records go with it. A task bound to a Session a delegated child owns
507
- * stays deletable even though creation and timing edits refuse that binding, so a task
508
- * stored before that rule existed remains removable.
509
- * @param request - Session and exact task identity.
510
- * @param signal - Optional cancellation checked before persistence begins, including after FIFO waits.
511
- * @returns Whether that Session owned a deleted task. Cancellation does not roll back an in-flight write.
241
+ * Ended tasks never schedule another delivery, so the removal changes no pending
242
+ * target and no timer is recomputed. Rows are enumerated and removed in one FIFO
243
+ * slot, so a delivery ordered behind this call ends its task after the
244
+ * enumeration rather than during it. The batch is one domain write: a normal
245
+ * failure rejects with every listed row still stored, while a backend
246
+ * `unknown-state` failure may have removed rows and quarantines the Host
247
+ * domain, so later schedule operations reject until the domain is reopened.
248
+ * A successful nonempty batch emits `schedule/changed` without Agent notices.
249
+ * A rejected batch announces `schedule/changed` because it does not establish
250
+ * which rows landed, and clients then re-read the catalog.
251
+ * @returns Count of removed rows; zero when the Host held no ended task.
252
+ */
253
+ @Remote('deleteInactive') async deleteInactive(): Promise<ScheduleDeleteInactiveResult>
254
+
255
+ /**
256
+ * Update or delete one task for a human Remote caller; an invalid patch rejects with `schedule/input-invalid`.
257
+ * @param request - Task identity and one update or delete operation.
258
+ * @param signal - Cancellation checked before the durable write begins, including after FIFO waits.
259
+ * @returns The updated task, the deletion outcome, or a non-mutating miss or conflict.
512
260
  */
513
- @Remote('delete') async delete(request: ScheduleDeleteRequest, signal?: AbortSignal): Promise<ScheduleDeleteResult>
261
+ @Remote('edit') async remoteEdit(request: ScheduleEditRequest, signal?: AbortSignal): Promise<ScheduleEditResult>
514
262
 
515
263
  /**
516
- * Update the name, instruction, and timing of an active task within the original Session
517
- * binding without activating the Session or changing saved deliveries.
264
+ * Update or delete one task and record the acting Agent's Session as involved; the Remote form omits that Session.
518
265
  *
519
- * Each supplied field replaces its stored value; an omitted field keeps it. A name or
520
- * instruction change alone does not reset the committed target. A Session a delegated
521
- * child owns returns the non-mutating `subagent_session` result, so an edit cannot
522
- * re-arm a task bound to a Session delivery can never reach, and the Web editor can
523
- * explain the refusal through the ordinary result it already renders.
524
- * @param request - Task binding, complete observed record, and any combination of timing, name, and instruction.
525
- * @param signal - Cancellation checked after domain readiness and FIFO waits, before persistence begins.
526
- * @returns The committed record, unchanged record for a no-op, or a non-mutating input/lookup/conflict/refusal result.
527
- * Storage and lifecycle failures reject; cancellation after a write starts does not roll it back.
266
+ * An update applies every patch field in one write and recomputes the next occurrence when the rule changes or
267
+ * the task resumes. A supplied `expectedUpdatedAt` that differs from the stored value returns `schedule_conflict`.
268
+ * @param request - Task identity and one update or delete operation.
269
+ * @param actorSessionId - Session of the acting Agent, or undefined for a human caller.
270
+ * @param signal - Cancellation checked before the durable write begins, including after FIFO waits.
271
+ * @returns The updated task, the deletion outcome, or a non-mutating miss or conflict.
528
272
  */
529
- @Remote('update') async update(request: ScheduleUpdateRequest, signal?: AbortSignal): Promise<ScheduleUpdateResult>
273
+ async edit( request: ScheduleEditRequest, actorSessionId?: SessionId, signal?: AbortSignal, ): Promise<ScheduleEditResult>
530
274
  ```
531
275
 
532
276
  Types: [SessionId](./core.md)
@@ -551,4 +295,24 @@ Durable task set changed; clients refetch global task and Session-active catalog
551
295
  ```
552
296
 
553
297
  Source: [`packages/schedule/schedule/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/schedule/src/types.ts)
298
+
299
+ <a id="scheduleresolve-agent--waterfall"></a>
300
+
301
+ #### `schedule/resolve-agent` — waterfall
302
+
303
+ Restore a reminder's Session through its embedding's owning controller. Call next() to use the Web Session controller.
304
+
305
+ ```ts cordis-catalog
306
+ /**
307
+ * Restore a reminder's Session through its embedding's owning controller.
308
+ * Call next() to use the Web Session controller.
309
+ * @param sessionId - Original Session receiving the reminder.
310
+ * @mode waterfall
311
+ */
312
+ 'schedule/resolve-agent'(sessionId: SessionId, next: () => Promise<Agent>): Promise<Agent>
313
+ ```
314
+
315
+ Types: [Agent](./core.md) · [SessionId](./core.md)
316
+
317
+ Source: [`packages/schedule/schedule/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/schedule/schedule/src/index.ts)
554
318
  <!-- END GENERATED cordis-surface -->