dsh-plugin-dev-kb 1.0.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 (234) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +56 -0
  3. package/cordis.patch.yml +12 -0
  4. package/kb/INDEX.md +210 -0
  5. package/kb/README.md +69 -0
  6. package/kb/extra/AGENTS.md +75 -0
  7. package/kb/extra/api-gateway.md +164 -0
  8. package/kb/extra/api-gateway.zh.md +164 -0
  9. package/kb/extra/cookbook/adding-a-vendored-package.md +59 -0
  10. package/kb/extra/cookbook/adding-a-vendored-package.zh.md +59 -0
  11. package/kb/extra/cookbook/maintaining-dsh-code-review.md +64 -0
  12. package/kb/extra/cookbook/maintaining-dsh-code-review.zh.md +64 -0
  13. package/kb/extra/cookbook/responding-to-pr-review-on-a-stack.md +32 -0
  14. package/kb/extra/cookbook/responding-to-pr-review-on-a-stack.zh.md +32 -0
  15. package/kb/extra/defensive-patterns.md +33 -0
  16. package/kb/extra/defensive-patterns.zh.md +33 -0
  17. package/kb/extra/development.md +171 -0
  18. package/kb/extra/development.zh.md +171 -0
  19. package/kb/extra/event-producer-consumer.md +76 -0
  20. package/kb/extra/event-producer-consumer.zh.md +78 -0
  21. package/kb/extra/glossary.md +45 -0
  22. package/kb/extra/glossary.zh.md +45 -0
  23. package/kb/extra/graph-atlas.md +24 -0
  24. package/kb/extra/graph-atlas.zh.md +26 -0
  25. package/kb/extra/i18n/README.md +60 -0
  26. package/kb/extra/i18n/README.zh.md +60 -0
  27. package/kb/extra/i18n/style-samples.md +87 -0
  28. package/kb/extra/i18n/terminology.md +214 -0
  29. package/kb/extra/i18n/translation-prompt.md +263 -0
  30. package/kb/extra/i18n/translation-rules.md +69 -0
  31. package/kb/extra/i18n/translation-rules.zh.md +69 -0
  32. package/kb/extra/module-graph.md +1641 -0
  33. package/kb/extra/module-graph.zh.md +1643 -0
  34. package/kb/extra/postmortem/0001-acp-default-export-drops-inject.md +113 -0
  35. package/kb/extra/postmortem/0001-acp-default-export-drops-inject.zh.md +113 -0
  36. package/kb/extra/postmortem/0002-js-expression-disabled-filesystem-tools.md +47 -0
  37. package/kb/extra/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md +47 -0
  38. package/kb/extra/postmortem/0003-web-agent-gui-feedback-loop.md +53 -0
  39. package/kb/extra/postmortem/0003-web-agent-gui-feedback-loop.zh.md +53 -0
  40. package/kb/extra/postmortem/0004-landlock-partial-notice-misclassified-child-failures.md +55 -0
  41. package/kb/extra/postmortem/0004-landlock-partial-notice-misclassified-child-failures.zh.md +55 -0
  42. package/kb/extra/postmortem/README.md +18 -0
  43. package/kb/extra/postmortem/README.zh.md +18 -0
  44. package/kb/extra/rescope.md +53 -0
  45. package/kb/extra/rescope.zh.md +53 -0
  46. package/kb/extra/subsystems/attachment.md +125 -0
  47. package/kb/extra/subsystems/attachment.zh.md +125 -0
  48. package/kb/extra/subsystems/extensions.md +364 -0
  49. package/kb/extra/subsystems/extensions.zh.md +364 -0
  50. package/kb/extra/subsystems/feedback.md +266 -0
  51. package/kb/extra/subsystems/feedback.zh.md +266 -0
  52. package/kb/extra/testing.md +49 -0
  53. package/kb/extra/testing.zh.md +49 -0
  54. package/kb/extra/web-styling.md +25 -0
  55. package/kb/extra/web-styling.zh.md +25 -0
  56. package/kb/meta/search-index.json +1328 -0
  57. package/kb/meta/site-pages.txt +168 -0
  58. package/kb/meta/source.json +13 -0
  59. package/kb/meta/topics.md +75 -0
  60. package/kb/site/develop/basic/config.md +108 -0
  61. package/kb/site/develop/basic/index.md +146 -0
  62. package/kb/site/develop/basic/publish.md +185 -0
  63. package/kb/site/develop/basic/tool.md +54 -0
  64. package/kb/site/develop/cordis-tutorial/01-first-plugin.md +95 -0
  65. package/kb/site/develop/cordis-tutorial/02-lifecycle-and-effects.md +98 -0
  66. package/kb/site/develop/cordis-tutorial/03-services.md +98 -0
  67. package/kb/site/develop/cordis-tutorial/04-events.md +144 -0
  68. package/kb/site/develop/cordis-tutorial/05-config.md +84 -0
  69. package/kb/site/develop/cordis-tutorial/06-composition-and-hmr.md +113 -0
  70. package/kb/site/develop/cordis-tutorial/07-into-the-harness.md +107 -0
  71. package/kb/site/develop/cordis-tutorial/index.md +62 -0
  72. package/kb/site/develop/framework/events.md +145 -0
  73. package/kb/site/develop/framework/index.md +139 -0
  74. package/kb/site/develop/framework/service.md +152 -0
  75. package/kb/site/develop/practice/index.md +157 -0
  76. package/kb/site/develop/practice/llm-adapter.md +190 -0
  77. package/kb/site/en/develop/basic/config.md +108 -0
  78. package/kb/site/en/develop/basic/index.md +146 -0
  79. package/kb/site/en/develop/basic/publish.md +185 -0
  80. package/kb/site/en/develop/basic/tool.md +54 -0
  81. package/kb/site/en/develop/cordis-tutorial/01-first-plugin.md +95 -0
  82. package/kb/site/en/develop/cordis-tutorial/02-lifecycle-and-effects.md +98 -0
  83. package/kb/site/en/develop/cordis-tutorial/03-services.md +98 -0
  84. package/kb/site/en/develop/cordis-tutorial/04-events.md +144 -0
  85. package/kb/site/en/develop/cordis-tutorial/05-config.md +84 -0
  86. package/kb/site/en/develop/cordis-tutorial/06-composition-and-hmr.md +113 -0
  87. package/kb/site/en/develop/cordis-tutorial/07-into-the-harness.md +107 -0
  88. package/kb/site/en/develop/cordis-tutorial/index.md +60 -0
  89. package/kb/site/en/develop/framework/events.md +145 -0
  90. package/kb/site/en/develop/framework/index.md +139 -0
  91. package/kb/site/en/develop/framework/service.md +150 -0
  92. package/kb/site/en/develop/practice/index.md +157 -0
  93. package/kb/site/en/develop/practice/llm-adapter.md +190 -0
  94. package/kb/site/en/guide/providers-custom-form.png +0 -0
  95. package/kb/site/en/guide/providers-models-page.png +0 -0
  96. package/kb/site/en/guide/providers.md +100 -0
  97. package/kb/site/en/guide/python-sdk.md +106 -0
  98. package/kb/site/en/guide/quickstart.md +32 -0
  99. package/kb/site/en/index.md +8 -0
  100. package/kb/site/en/reference/agent-lifecycle.md +86 -0
  101. package/kb/site/en/reference/capability-seams.md +475 -0
  102. package/kb/site/en/reference/config-catalog.md +3155 -0
  103. package/kb/site/en/reference/cookbook/adding-a-conversation-node.md +235 -0
  104. package/kb/site/en/reference/cookbook/adding-a-package.md +120 -0
  105. package/kb/site/en/reference/cookbook/adding-a-settings-card.md +102 -0
  106. package/kb/site/en/reference/cookbook/adding-a-tool.md +96 -0
  107. package/kb/site/en/reference/cookbook/adding-an-llm-adapter.md +45 -0
  108. package/kb/site/en/reference/cookbook/extension-cookbook.md +131 -0
  109. package/kb/site/en/reference/cordis-api/context.md +368 -0
  110. package/kb/site/en/reference/cordis-api/events.md +211 -0
  111. package/kb/site/en/reference/cordis-api/fiber.md +379 -0
  112. package/kb/site/en/reference/cordis-api/inherited.md +43 -0
  113. package/kb/site/en/reference/cordis-api/registry.md +156 -0
  114. package/kb/site/en/reference/cordis-api/service.md +106 -0
  115. package/kb/site/en/reference/cordis-primer.md +46 -0
  116. package/kb/site/en/reference/index.md +131 -0
  117. package/kb/site/en/reference/persistence-catalog.md +949 -0
  118. package/kb/site/en/reference/subsystems/approval.md +173 -0
  119. package/kb/site/en/reference/subsystems/client-modules.md +121 -0
  120. package/kb/site/en/reference/subsystems/code-runtime.md +194 -0
  121. package/kb/site/en/reference/subsystems/commands.md +190 -0
  122. package/kb/site/en/reference/subsystems/compaction.md +241 -0
  123. package/kb/site/en/reference/subsystems/core.md +1073 -0
  124. package/kb/site/en/reference/subsystems/credentials.md +136 -0
  125. package/kb/site/en/reference/subsystems/filesystem.md +498 -0
  126. package/kb/site/en/reference/subsystems/goal.md +280 -0
  127. package/kb/site/en/reference/subsystems/index.md +58 -0
  128. package/kb/site/en/reference/subsystems/invariants.md +91 -0
  129. package/kb/site/en/reference/subsystems/jobs.md +293 -0
  130. package/kb/site/en/reference/subsystems/llm-streaming.md +920 -0
  131. package/kb/site/en/reference/subsystems/lsp.md +205 -0
  132. package/kb/site/en/reference/subsystems/permission-presets.md +134 -0
  133. package/kb/site/en/reference/subsystems/persistence.md +388 -0
  134. package/kb/site/en/reference/subsystems/plan.md +90 -0
  135. package/kb/site/en/reference/subsystems/sandbox.md +221 -0
  136. package/kb/site/en/reference/subsystems/schedule.md +189 -0
  137. package/kb/site/en/reference/subsystems/scope.md +62 -0
  138. package/kb/site/en/reference/subsystems/session-projection.md +265 -0
  139. package/kb/site/en/reference/subsystems/session-query.md +498 -0
  140. package/kb/site/en/reference/subsystems/session-reference.md +111 -0
  141. package/kb/site/en/reference/subsystems/session-telemetry.md +197 -0
  142. package/kb/site/en/reference/subsystems/session-title.md +207 -0
  143. package/kb/site/en/reference/subsystems/session.md +852 -0
  144. package/kb/site/en/reference/subsystems/settings.md +313 -0
  145. package/kb/site/en/reference/subsystems/shell.md +306 -0
  146. package/kb/site/en/reference/subsystems/skills.md +334 -0
  147. package/kb/site/en/reference/subsystems/spill.md +120 -0
  148. package/kb/site/en/reference/subsystems/storage.md +232 -0
  149. package/kb/site/en/reference/subsystems/subagent.md +737 -0
  150. package/kb/site/en/reference/subsystems/subprocess.md +327 -0
  151. package/kb/site/en/reference/subsystems/system-prompt.md +210 -0
  152. package/kb/site/en/reference/subsystems/terminal.md +187 -0
  153. package/kb/site/en/reference/subsystems/token-meter.md +93 -0
  154. package/kb/site/en/reference/subsystems/tools.md +723 -0
  155. package/kb/site/en/reference/subsystems/typert.md +339 -0
  156. package/kb/site/en/reference/subsystems/user-questions.md +181 -0
  157. package/kb/site/en/reference/subsystems/web-server.md +111 -0
  158. package/kb/site/en/reference/subsystems/web.md +202 -0
  159. package/kb/site/en/reference/subsystems/workflow.md +281 -0
  160. package/kb/site/en/reference/subsystems/workspace.md +231 -0
  161. package/kb/site/en/reference/tool-catalog.md +1877 -0
  162. package/kb/site/en/reference/tool-execution-pipeline.md +66 -0
  163. package/kb/site/guide/providers-custom-form.zh.png +0 -0
  164. package/kb/site/guide/providers-models-page.zh.png +0 -0
  165. package/kb/site/guide/providers.md +100 -0
  166. package/kb/site/guide/python-sdk.md +106 -0
  167. package/kb/site/guide/quickstart.md +32 -0
  168. package/kb/site/index.md +8 -0
  169. package/kb/site/reference/agent-lifecycle.md +86 -0
  170. package/kb/site/reference/capability-seams.md +475 -0
  171. package/kb/site/reference/config-catalog.md +3154 -0
  172. package/kb/site/reference/cookbook/adding-a-conversation-node.md +235 -0
  173. package/kb/site/reference/cookbook/adding-a-package.md +120 -0
  174. package/kb/site/reference/cookbook/adding-a-settings-card.md +102 -0
  175. package/kb/site/reference/cookbook/adding-a-tool.md +98 -0
  176. package/kb/site/reference/cookbook/adding-an-llm-adapter.md +45 -0
  177. package/kb/site/reference/cookbook/extension-cookbook.md +133 -0
  178. package/kb/site/reference/cordis-api/context.md +368 -0
  179. package/kb/site/reference/cordis-api/events.md +211 -0
  180. package/kb/site/reference/cordis-api/fiber.md +379 -0
  181. package/kb/site/reference/cordis-api/inherited.md +43 -0
  182. package/kb/site/reference/cordis-api/registry.md +156 -0
  183. package/kb/site/reference/cordis-api/service.md +106 -0
  184. package/kb/site/reference/cordis-primer.md +52 -0
  185. package/kb/site/reference/index.md +135 -0
  186. package/kb/site/reference/persistence-catalog.md +949 -0
  187. package/kb/site/reference/subsystems/approval.md +173 -0
  188. package/kb/site/reference/subsystems/client-modules.md +121 -0
  189. package/kb/site/reference/subsystems/code-runtime.md +194 -0
  190. package/kb/site/reference/subsystems/commands.md +190 -0
  191. package/kb/site/reference/subsystems/compaction.md +241 -0
  192. package/kb/site/reference/subsystems/core.md +1081 -0
  193. package/kb/site/reference/subsystems/credentials.md +136 -0
  194. package/kb/site/reference/subsystems/filesystem.md +498 -0
  195. package/kb/site/reference/subsystems/goal.md +280 -0
  196. package/kb/site/reference/subsystems/index.md +58 -0
  197. package/kb/site/reference/subsystems/invariants.md +91 -0
  198. package/kb/site/reference/subsystems/jobs.md +293 -0
  199. package/kb/site/reference/subsystems/llm-streaming.md +926 -0
  200. package/kb/site/reference/subsystems/lsp.md +205 -0
  201. package/kb/site/reference/subsystems/permission-presets.md +134 -0
  202. package/kb/site/reference/subsystems/persistence.md +388 -0
  203. package/kb/site/reference/subsystems/plan.md +90 -0
  204. package/kb/site/reference/subsystems/sandbox.md +221 -0
  205. package/kb/site/reference/subsystems/schedule.md +189 -0
  206. package/kb/site/reference/subsystems/scope.md +62 -0
  207. package/kb/site/reference/subsystems/session-projection.md +265 -0
  208. package/kb/site/reference/subsystems/session-query.md +498 -0
  209. package/kb/site/reference/subsystems/session-reference.md +111 -0
  210. package/kb/site/reference/subsystems/session-telemetry.md +197 -0
  211. package/kb/site/reference/subsystems/session-title.md +207 -0
  212. package/kb/site/reference/subsystems/session.md +854 -0
  213. package/kb/site/reference/subsystems/settings.md +313 -0
  214. package/kb/site/reference/subsystems/shell.md +306 -0
  215. package/kb/site/reference/subsystems/skills.md +334 -0
  216. package/kb/site/reference/subsystems/spill.md +120 -0
  217. package/kb/site/reference/subsystems/storage.md +232 -0
  218. package/kb/site/reference/subsystems/subagent.md +739 -0
  219. package/kb/site/reference/subsystems/subprocess.md +327 -0
  220. package/kb/site/reference/subsystems/system-prompt.md +210 -0
  221. package/kb/site/reference/subsystems/terminal.md +187 -0
  222. package/kb/site/reference/subsystems/token-meter.md +93 -0
  223. package/kb/site/reference/subsystems/tools.md +723 -0
  224. package/kb/site/reference/subsystems/typert.md +339 -0
  225. package/kb/site/reference/subsystems/user-questions.md +181 -0
  226. package/kb/site/reference/subsystems/web-server.md +111 -0
  227. package/kb/site/reference/subsystems/web.md +202 -0
  228. package/kb/site/reference/subsystems/workflow.md +281 -0
  229. package/kb/site/reference/subsystems/workspace.md +231 -0
  230. package/kb/site/reference/tool-catalog.md +1880 -0
  231. package/kb/site/reference/tool-execution-pipeline.md +66 -0
  232. package/package.json +40 -0
  233. package/scripts/rebuild-index.mjs +88 -0
  234. package/skills/dsh-plugin-dev-kb.md +66 -0
@@ -0,0 +1,211 @@
1
+ ---
2
+ editSource: "docs/cordis-api/events.zh.md"
3
+ ---
4
+
5
+ <!-- 英文源文件由 scripts/gen-cordis-catalog.ts 生成;本中文文件是通过双语配对维护的经评审对侧。
6
+ 更新时先运行 `pnpm run gen-cordis-catalog` 更新英文,再更新本文件并运行 `pnpm run verify-translation-pairing --write docs/cordis-api/events.md` 重新记录配对。 -->
7
+
8
+ # 事件
9
+
10
+ 每个上下文中都混入了事件分发 API。Harness 事件声明及其分发模式会生成到各自所属的[子系统页面](../subsystems/core.md)。
11
+
12
+ ### ctx.parallel(name, ...args)
13
+
14
+ ```ts cordis-catalog
15
+ /**
16
+ * Dispatch an event, running all listeners concurrently.
17
+ *
18
+ * @param name — the event name.
19
+ * @param args — arguments passed to every listener.
20
+ * @returns a promise resolving once every listener has settled.
21
+ */
22
+ parallel<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): Promise<void>
23
+ parallel<K extends keyof Events>(thisArg: NoInfer<ThisType<Events[K]>>, name: K, ...args: Parameters<Events[K]>): Promise<void>
24
+ ```
25
+
26
+ 分发一个事件,并发运行所有监听器。
27
+
28
+ - `name`:事件名称。
29
+ - `args`:传递给每个监听器的参数。
30
+
31
+ **返回值**:一个 Promise,在所有监听器均已完成后兑现。
32
+
33
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts#L44)
34
+
35
+ ### ctx.emit(name, ...args)
36
+
37
+ ```ts cordis-catalog
38
+ /**
39
+ * Dispatch an event synchronously, ignoring listener return values.
40
+ *
41
+ * @param name — the event name.
42
+ * @param args — arguments passed to every listener.
43
+ */
44
+ emit<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): void
45
+ emit<K extends keyof Events>(thisArg: NoInfer<ThisType<Events[K]>>, name: K, ...args: Parameters<Events[K]>): void
46
+ ```
47
+
48
+ 同步分发一个事件,忽略监听器的返回值。
49
+
50
+ - `name`:事件名称。
51
+ - `args`:传递给每个监听器的参数。
52
+
53
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts#L53)
54
+
55
+ ### ctx.serial(name, ...args)
56
+
57
+ ```ts cordis-catalog
58
+ /**
59
+ * Dispatch an event, awaiting listeners in order until one bails.
60
+ *
61
+ * @param name — the event name.
62
+ * @param args — arguments passed to each listener.
63
+ * @returns the first bail value (non-null, non-false, non-undefined), if any.
64
+ */
65
+ serial<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): Promisify<ReturnType<Events[K]>>
66
+ serial<K extends keyof Events>(thisArg: NoInfer<ThisType<Events[K]>>, name: K, ...args: Parameters<Events[K]>): Promisify<ReturnType<Events[K]>>
67
+ ```
68
+
69
+ 分发一个事件,依次等待各监听器,直到其中一个提前终止分发。
70
+
71
+ - `name`:事件名称。
72
+ - `args`:传递给每个监听器的参数。
73
+
74
+ **返回值**:第一个提前终止值(非 null、非 false 且非 undefined);如果没有,则不返回此类值。
75
+
76
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts#L63)
77
+
78
+ ### ctx.bail(name, ...args)
79
+
80
+ ```ts cordis-catalog
81
+ /**
82
+ * Dispatch an event, calling listeners in order until one bails.
83
+ *
84
+ * @param name — the event name.
85
+ * @param args — arguments passed to each listener.
86
+ * @returns the first bail value (non-null, non-false, non-undefined), if any.
87
+ */
88
+ bail<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): ReturnType<Events[K]>
89
+ bail<K extends keyof Events>(thisArg: NoInfer<ThisType<Events[K]>>, name: K, ...args: Parameters<Events[K]>): ReturnType<Events[K]>
90
+ ```
91
+
92
+ 分发一个事件,依次调用各监听器,直到其中一个提前终止分发。
93
+
94
+ - `name`:事件名称。
95
+ - `args`:传递给每个监听器的参数。
96
+
97
+ **返回值**:第一个提前终止值(非 null、非 false 且非 undefined);如果没有,则不返回此类值。
98
+
99
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts#L73)
100
+
101
+ ### ctx.waterfall(name, ...args)
102
+
103
+ ```ts cordis-catalog
104
+ /**
105
+ * Dispatch an event whose last argument is a `next` continuation.
106
+ *
107
+ * Each listener wraps the rest of the chain: calling `next()` invokes the
108
+ * next listener (finally the built-in behavior); not calling it vetoes.
109
+ *
110
+ * @param name — the event name.
111
+ * @param args — listener arguments; the final one is the innermost `next`.
112
+ * @returns the outermost listener's return value.
113
+ */
114
+ waterfall<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): ReturnType<Events[K]>
115
+ waterfall<K extends keyof Events>(thisArg: NoInfer<ThisType<Events[K]>>, name: K, ...args: Parameters<Events[K]>): ReturnType<Events[K]>
116
+ ```
117
+
118
+ 分发一个事件,其最后一个参数是续接执行的 `next` 回调。
119
+
120
+ 每个监听器都会包装调用链的其余部分:调用 `next()` 会执行下一个监听器,最终执行内置行为;不调用则会否决后续执行。
121
+
122
+ - `name`:事件名称。
123
+ - `args`:监听器参数;最后一个参数是最内层的 `next`。
124
+
125
+ **返回值**:最外层监听器的返回值。
126
+
127
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts#L86)
128
+
129
+ ### ctx.on(name, listener, options?)
130
+
131
+ ```ts cordis-catalog
132
+ /**
133
+ * Register an event listener owned by the current fiber.
134
+ *
135
+ * @param name — the event name to listen for.
136
+ * @param listener — called with the dispatch arguments.
137
+ * @param options — listener options; a boolean is shorthand for `prepend`.
138
+ * @returns a disposer removing the listener; `true` if it was still registered.
139
+ */
140
+ on<K extends keyof Events>(name: K, listener: Events[K], options?: boolean | EventOptions): () => boolean
141
+ ```
142
+
143
+ 注册一个归当前 fiber 所有的事件监听器。
144
+
145
+ - `name`:要监听的事件名称。
146
+ - `listener`:使用分发参数调用的监听器。
147
+ - `options`:监听器选项;布尔值可作为 `prepend` 的简写。
148
+
149
+ **返回值**:一个用于移除监听器的资源释放函数;如果调用该函数时监听器仍处于注册状态,则返回 `true`。
150
+
151
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts#L97)
152
+
153
+ ### ctx.once(name, listener, options?)
154
+
155
+ ```ts cordis-catalog
156
+ /**
157
+ * Same as `on()`, but the listener disposes itself after its first call.
158
+ *
159
+ * @param name — the event name to listen for.
160
+ * @param listener — called at most once with the dispatch arguments.
161
+ * @param options — listener options; a boolean is shorthand for `prepend`.
162
+ * @returns a disposer removing the listener; `true` if it was still registered.
163
+ */
164
+ once<K extends keyof Events>(name: K, listener: Events[K], options?: boolean | EventOptions): () => boolean
165
+ ```
166
+
167
+ 与 `on()` 相同,但监听器在首次调用后会自行注销。
168
+
169
+ - `name`:要监听的事件名称。
170
+ - `listener`:使用分发参数调用,最多调用一次。
171
+ - `options`:监听器选项;布尔值可作为 `prepend` 的简写。
172
+
173
+ **返回值**:一个用于移除监听器的资源释放函数;如果调用该函数时监听器仍处于注册状态,则返回 `true`。
174
+
175
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts#L106)
176
+
177
+ ## EventOptions
178
+
179
+ `ctx.on()` 和 `ctx.once()` 接受的选项。
180
+
181
+ ```ts cordis-catalog
182
+ /** Options accepted by `ctx.on()` and `ctx.once()`. */
183
+ interface EventOptions {
184
+ /** Add the listener before existing listeners for the same event. */
185
+ prepend?: boolean
186
+ /** Receive the event regardless of context filter checks. */
187
+ global?: boolean
188
+ }
189
+ ```
190
+
191
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts#L112)
192
+
193
+ ## DispatchMode
194
+
195
+ 事件服务使用的事件分发策略。
196
+
197
+ `emit` 运行同步监听器但不等待它们,`parallel` 同时等待所有监听器,`serial` 依次等待监听器直至其中一个提前终止分发,`bail` 遇到第一个同步提前终止值时停止,`waterfall` 则围绕最终的 `next` 回调组合监听器。
198
+
199
+ ```ts cordis-catalog
200
+ /**
201
+ * Event dispatch strategy used by the event service.
202
+ *
203
+ * `emit` runs synchronous listeners without awaiting them, `parallel` awaits
204
+ * all listeners together, `serial` awaits them in order until one bails,
205
+ * `bail` stops on the first synchronous bail value, and `waterfall` composes
206
+ * listeners around a final `next` callback.
207
+ */
208
+ type DispatchMode = 'emit' | 'parallel' | 'serial' | 'bail' | 'waterfall'
209
+ ```
210
+
211
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts#L32)
@@ -0,0 +1,379 @@
1
+ ---
2
+ editSource: "docs/cordis-api/fiber.zh.md"
3
+ ---
4
+
5
+ <!-- 英文源文件由 scripts/gen-cordis-catalog.ts 生成;本中文文件是通过双语配对维护的经评审对侧。
6
+ 更新时先运行 `pnpm run gen-cordis-catalog` 更新英文,再更新本文件并运行 `pnpm run verify-translation-pairing --write docs/cordis-api/fiber.md` 重新记录配对。 -->
7
+
8
+ # Fiber
9
+
10
+ fiber 是一个已加载的插件实例,包含其生命周期状态、经过校验的配置以及已注册的作用。`ctx.fiber` 是当前 fiber,`ctx.effect()` 会将调用委托给它。
11
+
12
+ ### ctx.effect(execute, label?)
13
+
14
+ ```ts cordis-catalog
15
+ /**
16
+ * Register a cleanup-aware effect on this fiber.
17
+ *
18
+ * `execute` runs immediately; the disposers it produces are collected and
19
+ * run (in reverse order) either when the returned disposer is called or
20
+ * when the fiber unloads, whichever comes first. Calling the disposer twice
21
+ * is a no-op. Throws `CordisError('INACTIVE_EFFECT')` if the fiber is
22
+ * already disposed, and `TypeError` if `execute` returns an invalid shape.
23
+ *
24
+ * @param execute — the effect body; see {@link Effect} for accepted shapes.
25
+ * @param label — effect label shown in `getEffects()` diagnostics.
26
+ * @returns a disposer that tears the effect down and settles once done.
27
+ */
28
+ effect(execute: () => SyncEffect, label?: string): Disposable<Promise<void>>
29
+ effect(execute: () => Effect, label?: string): AsyncDisposable<Promise<void>>
30
+ ```
31
+
32
+ 在此 fiber 上注册一个支持清理的作用。
33
+
34
+ `execute` 会立即运行;它产生的清理函数将被收集,并在调用返回的清理函数或卸载 fiber 时按相反顺序运行,以先发生者为准。重复调用清理函数不会产生任何效果。如果 fiber 已经 dispose(资源释放),则抛出 `CordisError('INACTIVE_EFFECT')`;如果结构无效,则抛出 `TypeError`,表示 `execute` 返回了不受支持的结果。
35
+
36
+ - `execute`:作用主体;可接受的结构见 `Effect`。
37
+ - `label`:在 `getEffects()` 诊断信息中显示的作用标签。
38
+
39
+ **返回**一个用于撤销该作用的清理函数,并在清理完成后结算。
40
+
41
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L415)
42
+
43
+ ### ctx.fiber
44
+
45
+ ```ts cordis-catalog
46
+ /** The fiber (plugin runtime instance) that owns this context. */
47
+ fiber: Fiber
48
+ ```
49
+
50
+ 拥有此上下文的 fiber(插件运行时实例)。
51
+
52
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L12)
53
+
54
+ ## Fiber 类
55
+
56
+ 单次插件应用的运行时实例。
57
+
58
+ fiber 会跟踪 `ctx.plugin()` 返回的插件上下文所对应的依赖状态、经过校验的配置、生命周期作用和清理操作。
59
+
60
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L184)
61
+
62
+ ### fiber.uid
63
+
64
+ ```ts cordis-catalog
65
+ /** Unique id within the registry; 0 for the root fiber, `null` once disposed. */
66
+ public uid: number | null
67
+ ```
68
+
69
+ 在注册表中的唯一 id;根 fiber 的 id 为 0,dispose 后为 `null`。
70
+
71
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L186)
72
+
73
+ ### fiber.ctx
74
+
75
+ ```ts cordis-catalog
76
+ /** The context this fiber's plugin runs in (extends the parent context). */
77
+ public readonly ctx: Context
78
+ ```
79
+
80
+ 此 fiber 的插件运行所在的上下文(扩展自父上下文)。
81
+
82
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L188)
83
+
84
+ ### fiber.config
85
+
86
+ ```ts cordis-catalog
87
+ /** The validated plugin config (updated by `update()`). */
88
+ public config: any
89
+ ```
90
+
91
+ 经过校验的插件配置(由 `update()` 更新)。
92
+
93
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L190)
94
+
95
+ ### fiber.state
96
+
97
+ ```ts cordis-catalog
98
+ /** Current lifecycle state; transitions emit `internal/status`. */
99
+ public state
100
+ ```
101
+
102
+ 当前生命周期状态;状态转换会发出 `internal/status`。
103
+
104
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L194)
105
+
106
+ ### fiber.dispose
107
+
108
+ ```ts cordis-catalog
109
+ /** Dispose this fiber: unload the plugin, then settle once cleanup finished. */
110
+ public readonly dispose: () => Promise<void>
111
+ ```
112
+
113
+ dispose 此 fiber:卸载插件,并在清理完成后结算。
114
+
115
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L196)
116
+
117
+ ### fiber.store
118
+
119
+ ```ts cordis-catalog
120
+ /** Snapshot of required service implementations while loaded; `undefined` otherwise. */
121
+ public store: Dict<Impl> | undefined
122
+ ```
123
+
124
+ 加载期间所需服务实现的快照;其他情况下为 `undefined`。
125
+
126
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L198)
127
+
128
+ ### fiber.inertia
129
+
130
+ ```ts cordis-catalog
131
+ /** The in-flight load/unload transition, if one is currently running. */
132
+ public inertia: Promise<void> | undefined
133
+ ```
134
+
135
+ 当前正在进行的加载或卸载转换;如果没有此类转换,则为 undefined。
136
+
137
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L200)
138
+
139
+ ### fiber.name
140
+
141
+ ```ts cordis-catalog
142
+ /** The plugin's display name, inherited from the nearest named ancestor, else `'root'`. */
143
+ get name()
144
+ ```
145
+
146
+ 插件的显示名称,继承自最近的具名祖先;如果不存在,则为 `'root'`。
147
+
148
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L336)
149
+
150
+ ### fiber.assertActive()
151
+
152
+ ```ts cordis-catalog
153
+ /**
154
+ * Throw if the fiber has already been disposed.
155
+ *
156
+ * @returns nothing when the fiber is still active.
157
+ * @throws {CordisError} `INACTIVE_EFFECT` when the fiber's uid has been cleared.
158
+ */
159
+ assertActive()
160
+ ```
161
+
162
+ 如果 fiber 已经 dispose,则抛出异常。
163
+
164
+ **返回**:fiber 仍处于活动状态时不返回任何内容。
165
+
166
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L351)
167
+
168
+ ### fiber.effect(execute, label?)
169
+
170
+ ```ts cordis-catalog
171
+ /**
172
+ * Register a cleanup-aware effect on this fiber.
173
+ *
174
+ * `execute` runs immediately; the disposers it produces are collected and
175
+ * run (in reverse order) either when the returned disposer is called or
176
+ * when the fiber unloads, whichever comes first. Calling the disposer twice
177
+ * is a no-op. Throws `CordisError('INACTIVE_EFFECT')` if the fiber is
178
+ * already disposed, and `TypeError` if `execute` returns an invalid shape.
179
+ *
180
+ * @param execute — the effect body; see {@link Effect} for accepted shapes.
181
+ * @param label — effect label shown in `getEffects()` diagnostics.
182
+ * @returns a disposer that tears the effect down and settles once done.
183
+ */
184
+ effect(execute: () => SyncEffect, label?: string): Disposable<Promise<void>>
185
+ effect(execute: () => Effect, label?: string): AsyncDisposable<Promise<void>>
186
+ ```
187
+
188
+ 在此 fiber 上注册一个支持清理的作用。
189
+
190
+ `execute` 会立即运行;它产生的清理函数将被收集,并在调用返回的清理函数或卸载 fiber 时按相反顺序运行,以先发生者为准。重复调用清理函数不会产生任何效果。如果 fiber 已经 dispose,则抛出 `CordisError('INACTIVE_EFFECT')`;如果结构无效,则抛出 `TypeError`,表示 `execute` 返回了不受支持的结果。
191
+
192
+ - `execute`:作用主体;可接受的结构见 `Effect`。
193
+ - `label`:在 `getEffects()` 诊断信息中显示的作用标签。
194
+
195
+ **返回**一个用于撤销该作用的清理函数,并在清理完成后结算。
196
+
197
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L415)
198
+
199
+ ### fiber.getEffects()
200
+
201
+ ```ts cordis-catalog
202
+ /**
203
+ * Return metadata for currently registered effects.
204
+ *
205
+ * @returns one {@link EffectMeta} tree per labeled live effect.
206
+ */
207
+ getEffects()
208
+ ```
209
+
210
+ 返回当前已注册作用的元数据。
211
+
212
+ **返回**:每个带标签的活动作用对应一棵 `EffectMeta` 树。
213
+
214
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L568)
215
+
216
+ ### fiber.await()
217
+
218
+ ```ts cordis-catalog
219
+ /**
220
+ * Wait for current lifecycle work and rethrow startup errors.
221
+ *
222
+ * @returns this fiber, once it has settled into a stable state.
223
+ * @throws the config-validation or plugin-startup error, if any.
224
+ */
225
+ async await()
226
+ ```
227
+
228
+ 等待当前生命周期工作完成,并重新抛出启动错误。
229
+
230
+ **返回**:进入稳定状态后的此 fiber。
231
+
232
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L704)
233
+
234
+ ### fiber.restart()
235
+
236
+ ```ts cordis-catalog
237
+ /**
238
+ * Dispose and immediately reload this plugin with its current config.
239
+ *
240
+ * @returns a promise resolving once the reload settled.
241
+ * @throws {CordisError} `INACTIVE_EFFECT` when the fiber is already disposed.
242
+ */
243
+ async restart()
244
+ ```
245
+
246
+ dispose 此插件,并立即使用其当前配置重新加载。
247
+
248
+ **返回**一个在重新加载完成后兑现的 promise。
249
+
250
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L718)
251
+
252
+ ### fiber.update(config, noSave?)
253
+
254
+ ```ts cordis-catalog
255
+ /**
256
+ * Validate and apply new config, then restart the plugin.
257
+ *
258
+ * Runs the `internal/update` waterfall first, so update hooks (and HMR)
259
+ * can veto or replace the restart.
260
+ *
261
+ * @param config — the new raw config; validated before anything restarts.
262
+ * @param noSave — hint for persistence hooks not to write the change back.
263
+ * @returns the update waterfall result; the default restart returns a promise.
264
+ * @throws when validation, an update listener, or the restarted plugin fails.
265
+ */
266
+ update(config: any, noSave = false)
267
+ ```
268
+
269
+ 校验并应用新配置,然后重新启动插件。
270
+
271
+ 首先运行 `internal/update` waterfall(瀑布式事件),因此更新钩子(以及 HMR(热模块替换))可以否决或取代重新启动操作。
272
+
273
+ - `config`:新的原始配置;在任何内容重新启动前进行校验。
274
+ - `noSave`:提示持久化钩子不要写回此变更。
275
+
276
+ **返回**更新 waterfall 的结果;默认的重新启动操作返回一个 promise。
277
+
278
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L736)
279
+
280
+ ## Effect
281
+
282
+ `ctx.effect()` 和插件启动所接受的作用主体结果。
283
+
284
+ 可以是单个清理函数、兑现为清理函数的 promise,或生成多个清理函数的(可能为异步的)可迭代对象。生成器作用会在每个清理函数产生时将其注册。
285
+
286
+ ```ts cordis-catalog
287
+ /**
288
+ * Effect body result accepted by `ctx.effect()` and plugin startup.
289
+ *
290
+ * Either a single disposer, a promise of one, or a (possibly async) iterable
291
+ * yielding several — generator effects register each yielded disposer as it
292
+ * is produced.
293
+ */
294
+ type Effect<T = any> =
295
+ | SyncEffect<T>
296
+ | AsyncEffect<T>
297
+ ```
298
+
299
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L83)
300
+
301
+ ## Disposable
302
+
303
+ 作用返回的函数,用于在资源释放期间释放资源。
304
+
305
+ 拥有该函数的 fiber 卸载时,清理函数会按注册的相反顺序运行;清理函数可以是异步的,此时卸载过程会等待其完成。
306
+
307
+ ```ts cordis-catalog
308
+ /**
309
+ * Function returned by an effect to release resources during disposal.
310
+ *
311
+ * Disposers run in reverse registration order when the owning fiber unloads;
312
+ * they may be async, in which case unloading awaits them.
313
+ */
314
+ type Disposable<T = any> = () => T
315
+ ```
316
+
317
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L74)
318
+
319
+ ## EffectMeta
320
+
321
+ 用于在诊断信息中公开嵌套作用标签的树节点。
322
+
323
+ ```ts cordis-catalog
324
+ /** Tree node used to expose nested effect labels for diagnostics. */
325
+ interface EffectMeta {
326
+ /** Human-readable effect label, e.g. `ctx.on("event")` or `ctx.provide("name")`. */
327
+ label: string
328
+ /** Metadata of nested effects registered while this effect ran. */
329
+ children: EffectMeta[]
330
+ }
331
+ ```
332
+
333
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L96)
334
+
335
+ ## CordisError
336
+
337
+ 具有稳定机器可读错误码的框架错误。
338
+
339
+ ```ts cordis-catalog
340
+ /** Framework error with a stable machine-readable code. */
341
+ class CordisError extends Error {
342
+ /**
343
+ * @param code — the stable error code; also the default message.
344
+ * @param message — optional human-readable override.
345
+ */
346
+ constructor(public code: CordisError.Code, message?: string)
347
+ }
348
+
349
+ /** Cordis error code definitions. */
350
+ namespace CordisError {
351
+ export type Code = keyof typeof Code
352
+
353
+ export const Code = {
354
+ INACTIVE_EFFECT: 'cannot create effect on inactive context',
355
+ } as const
356
+ }
357
+ ```
358
+
359
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L157)
360
+
361
+ ## ValidationError
362
+
363
+ 插件配置未通过 standard-schema 校验时抛出的错误。
364
+
365
+ ```ts cordis-catalog
366
+ /** Error raised when plugin configuration fails standard-schema validation. */
367
+ class ValidationError extends TypeError {
368
+ name = 'ValidationError'
369
+
370
+ /**
371
+ * Build the aggregated message from schema issues.
372
+ *
373
+ * @param issues — the standard-schema issues, one message line each.
374
+ */
375
+ constructor(issues: readonly StandardSchemaV1.Issue[])
376
+ }
377
+ ```
378
+
379
+ [源码](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts#L19)
@@ -0,0 +1,43 @@
1
+ ---
2
+ editSource: "docs/cordis-api/inherited.md"
3
+ ---
4
+
5
+ <!-- Generated by scripts/gen-cordis-catalog.ts — do not edit by hand.
6
+ Run `pnpm run gen-cordis-catalog` to regenerate. -->
7
+
8
+ # Inherited Cordis API
9
+
10
+ The framework `ctx` members and events every plugin sees beyond the harness tier — pinned vendor source ([vendoring policy](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/README.md)), summarized tersely so the harness pages stay focused on repository-owned vocabulary. Detailed Context, Fiber, Registry, and Service APIs are generated in [context.md](./context.md), [fiber.md](./fiber.md), [registry.md](./registry.md), and [service.md](./service.md); the event-dispatch methods in [events.md](./events.md).
11
+
12
+ This file is GENERATED from source (`scripts/gen-cordis-catalog.ts`) and verified fresh by `pnpm run verify-cordis-catalog` (part of `doc-sync`) — do not edit it by hand. Signature blocks use a `ts cordis-catalog` fence and include the original source JSDoc immediately before each event or service method. doc-typecheck skips these bare declaration fragments; type names in a signature link to the page that documents them.
13
+
14
+ ## Inherited `ctx` members (cordis core + loader/hmr/timer)
15
+
16
+ - `ctx.on / ctx.once` — Register an event listener (disposable). ([`vendor/cordis/src/events.ts:34`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts))
17
+ - `ctx.emit / ctx.parallel / ctx.serial / ctx.bail / ctx.waterfall` — Dispatch an event (sync / awaited / first-bail / short-circuit chain). ([`vendor/cordis/src/events.ts:34`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts))
18
+ - `ctx.plugin / ctx.inject` — Load a plugin / declare required services. ([`vendor/cordis/src/registry.ts:164`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/registry.ts))
19
+ - `ctx.effect` — Register a disposable side effect tied to the fiber. ([`vendor/cordis/src/fiber.ts:9`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/fiber.ts))
20
+ - `ctx.get / ctx.set / ctx.provide / ctx.accessor / ctx.mixin` — Low-level service-store access and binding. ([`vendor/cordis/src/reflect.ts:7`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/reflect.ts))
21
+ - `ctx.extend / ctx.isolate / ctx.intercept` — Derive a child context (scoped services / isolation / interception). ([`vendor/cordis/src/context.ts:42`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/context.ts))
22
+ - `ctx.root / ctx.scope / ctx.fiber / ctx.registry / ctx.reflect / ctx.events / ctx.logger` — Ambient handles onto the running context graph. ([`vendor/cordis/src/context.ts:16`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/context.ts))
23
+ - `ctx.timer (+ interval / timeout / throttle / debounce)` — Disposable timer helpers. The `timer` key is provided at runtime; the four supported helpers are mixed onto ctx directly (declared via Pick). ([`vendor/timer/src/index.ts:4`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/timer/src/index.ts))
24
+ - `ctx.loader` — The config Loader that booted the app (present under the loader). ([`vendor/loader/src/index.ts:30`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/loader/src/index.ts))
25
+ - `ctx.hmr` — The hot-module-reload watcher (present under the hmr plugin). ([`vendor/hmr/src/index.ts:15`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/hmr/src/index.ts))
26
+
27
+ ## Inherited events (cordis core + loader/hmr/timer)
28
+
29
+ - `internal/plugin` — A plugin fiber was created. ([`vendor/cordis/src/events.ts:328`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts))
30
+ - `internal/status` — A fiber changed lifecycle state. ([`vendor/cordis/src/events.ts:330`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts))
31
+ - `internal/service` — Interception hook for a service binding (no core producer). ([`vendor/cordis/src/events.ts:332`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts))
32
+ - `internal/update` — Waterfall: a fiber config update is being applied. ([`vendor/cordis/src/events.ts:334`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts))
33
+ - `internal/get` — Waterfall: a service is being read from the store. ([`vendor/cordis/src/events.ts:336`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts))
34
+ - `internal/set` — Waterfall: a service is being written to the store. ([`vendor/cordis/src/events.ts:338`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts))
35
+ - `internal/listener` — A listener was registered. ([`vendor/cordis/src/events.ts:340`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts))
36
+ - `internal/dispatch` — An event is being dispatched to listeners. ([`vendor/cordis/src/events.ts:342`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/cordis/src/events.ts))
37
+ - `hmr/change` — A watched source file changed on disk. ([`vendor/hmr/src/index.ts:20`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/hmr/src/index.ts))
38
+ - `hmr/reload` — Plugins are being reloaded after a change. ([`vendor/hmr/src/index.ts:21`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/hmr/src/index.ts))
39
+ - `exit` — The process is exiting on a signal. ([`vendor/loader/src/index.ts:23`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/loader/src/index.ts))
40
+ - `loader/config-update` — The loader config tree changed. ([`vendor/loader/src/index.ts:24`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/loader/src/index.ts))
41
+ - `loader/entry-init` — A config entry is being initialized. ([`vendor/loader/src/index.ts:25`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/loader/src/index.ts))
42
+ - `loader/partial-dispose` — An entry is being partially disposed on reload. ([`vendor/loader/src/index.ts:26`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/loader/src/index.ts))
43
+ - `loader/patch-context` — A context is being patched during a reload. ([`vendor/loader/src/index.ts:27`](https://github.com/deepseek-ai/deepseek-harness/blob/master/vendor/loader/src/index.ts))