@zaalipro/dsh-workflows 0.1.0-rc.12

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 (229) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE.md +224 -0
  3. package/README.i18n.yaml +4 -0
  4. package/README.md +111 -0
  5. package/README.zh.md +111 -0
  6. package/cordis.patch.yml +10 -0
  7. package/docs/architecture.i18n.yaml +4 -0
  8. package/docs/architecture.md +177 -0
  9. package/docs/architecture.zh.md +177 -0
  10. package/docs/testing.i18n.yaml +4 -0
  11. package/docs/testing.md +125 -0
  12. package/docs/testing.zh.md +125 -0
  13. package/docs/user-guide.i18n.yaml +4 -0
  14. package/docs/user-guide.md +351 -0
  15. package/docs/user-guide.zh.md +351 -0
  16. package/lib/client-types/WorkflowMemberInspector.d.ts +28 -0
  17. package/lib/client-types/WorkflowMemberInspector.d.ts.map +1 -0
  18. package/lib/client-types/WorkflowMemberInspector.js +181 -0
  19. package/lib/client-types/WorkflowMemberInspector.js.map +1 -0
  20. package/lib/client-types/WorkflowRunPanel.d.ts +43 -0
  21. package/lib/client-types/WorkflowRunPanel.d.ts.map +1 -0
  22. package/lib/client-types/WorkflowRunPanel.js +130 -0
  23. package/lib/client-types/WorkflowRunPanel.js.map +1 -0
  24. package/lib/client-types/WorkflowsDashboard.d.ts +49 -0
  25. package/lib/client-types/WorkflowsDashboard.d.ts.map +1 -0
  26. package/lib/client-types/WorkflowsDashboard.js +942 -0
  27. package/lib/client-types/WorkflowsDashboard.js.map +1 -0
  28. package/lib/client-types/adapter.d.ts +60 -0
  29. package/lib/client-types/adapter.d.ts.map +1 -0
  30. package/lib/client-types/adapter.js +117 -0
  31. package/lib/client-types/adapter.js.map +1 -0
  32. package/lib/client-types/chat-renderer.d.ts +10 -0
  33. package/lib/client-types/chat-renderer.d.ts.map +1 -0
  34. package/lib/client-types/chat-renderer.js +11 -0
  35. package/lib/client-types/chat-renderer.js.map +1 -0
  36. package/lib/client-types/contract.d.ts +210 -0
  37. package/lib/client-types/contract.d.ts.map +1 -0
  38. package/lib/client-types/contract.js +37 -0
  39. package/lib/client-types/contract.js.map +1 -0
  40. package/lib/client-types/controller.d.ts +83 -0
  41. package/lib/client-types/controller.d.ts.map +1 -0
  42. package/lib/client-types/controller.js +705 -0
  43. package/lib/client-types/controller.js.map +1 -0
  44. package/lib/client-types/index.d.ts +19 -0
  45. package/lib/client-types/index.d.ts.map +1 -0
  46. package/lib/client-types/index.js +731 -0
  47. package/lib/client-types/index.js.map +1 -0
  48. package/lib/client-types/locales.d.ts +257 -0
  49. package/lib/client-types/locales.d.ts.map +1 -0
  50. package/lib/client-types/locales.js +270 -0
  51. package/lib/client-types/locales.js.map +1 -0
  52. package/lib/client-types/slot-components.d.ts +38 -0
  53. package/lib/client-types/slot-components.d.ts.map +1 -0
  54. package/lib/client-types/slot-components.js +22 -0
  55. package/lib/client-types/slot-components.js.map +1 -0
  56. package/lib/client-types/store.d.ts +69 -0
  57. package/lib/client-types/store.d.ts.map +1 -0
  58. package/lib/client-types/store.js +135 -0
  59. package/lib/client-types/store.js.map +1 -0
  60. package/lib/client-types/workflow-definition.d.ts +52 -0
  61. package/lib/client-types/workflow-definition.d.ts.map +1 -0
  62. package/lib/client-types/workflow-definition.js +135 -0
  63. package/lib/client-types/workflow-definition.js.map +1 -0
  64. package/lib/client.js +11065 -0
  65. package/lib/client.js.map +1 -0
  66. package/lib/compat-engine/index.js +1926 -0
  67. package/lib/compat-engine/index.js.map +1 -0
  68. package/lib/compat-engine/worker.cjs +1500 -0
  69. package/lib/compat-engine/worker.cjs.map +1 -0
  70. package/lib/typert.host.d.ts +3 -0
  71. package/lib/typert.host.js +1709 -0
  72. package/lib/typert.remote-client.d.ts +57 -0
  73. package/lib/typert.remote-client.js +1662 -0
  74. package/lib/types/commands/aliases.d.ts +4 -0
  75. package/lib/types/commands/aliases.d.ts.map +1 -0
  76. package/lib/types/commands/aliases.js +25 -0
  77. package/lib/types/commands/aliases.js.map +1 -0
  78. package/lib/types/commands/index.d.ts +66 -0
  79. package/lib/types/commands/index.d.ts.map +1 -0
  80. package/lib/types/commands/index.js +550 -0
  81. package/lib/types/commands/index.js.map +1 -0
  82. package/lib/types/commands/parser.d.ts +17 -0
  83. package/lib/types/commands/parser.d.ts.map +1 -0
  84. package/lib/types/commands/parser.js +45 -0
  85. package/lib/types/commands/parser.js.map +1 -0
  86. package/lib/types/config.d.ts +71 -0
  87. package/lib/types/config.d.ts.map +1 -0
  88. package/lib/types/config.js +109 -0
  89. package/lib/types/config.js.map +1 -0
  90. package/lib/types/index.d.ts +41 -0
  91. package/lib/types/index.d.ts.map +1 -0
  92. package/lib/types/index.js +483 -0
  93. package/lib/types/index.js.map +1 -0
  94. package/lib/types/invariant.d.ts +21 -0
  95. package/lib/types/invariant.d.ts.map +1 -0
  96. package/lib/types/invariant.js +85 -0
  97. package/lib/types/invariant.js.map +1 -0
  98. package/lib/types/registry/definition.d.ts +24 -0
  99. package/lib/types/registry/definition.d.ts.map +1 -0
  100. package/lib/types/registry/definition.js +189 -0
  101. package/lib/types/registry/definition.js.map +1 -0
  102. package/lib/types/registry/index.d.ts +100 -0
  103. package/lib/types/registry/index.d.ts.map +1 -0
  104. package/lib/types/registry/index.js +899 -0
  105. package/lib/types/registry/index.js.map +1 -0
  106. package/lib/types/registry/names.d.ts +19 -0
  107. package/lib/types/registry/names.d.ts.map +1 -0
  108. package/lib/types/registry/names.js +69 -0
  109. package/lib/types/registry/names.js.map +1 -0
  110. package/lib/types/registry/remote.d.ts +15 -0
  111. package/lib/types/registry/remote.d.ts.map +1 -0
  112. package/lib/types/registry/remote.js +128 -0
  113. package/lib/types/registry/remote.js.map +1 -0
  114. package/lib/types/registry/roots.d.ts +44 -0
  115. package/lib/types/registry/roots.d.ts.map +1 -0
  116. package/lib/types/registry/roots.js +118 -0
  117. package/lib/types/registry/roots.js.map +1 -0
  118. package/lib/types/registry/types.d.ts +62 -0
  119. package/lib/types/registry/types.d.ts.map +1 -0
  120. package/lib/types/registry/types.js +2 -0
  121. package/lib/types/registry/types.js.map +1 -0
  122. package/lib/types/registry/watchers.d.ts +70 -0
  123. package/lib/types/registry/watchers.d.ts.map +1 -0
  124. package/lib/types/registry/watchers.js +152 -0
  125. package/lib/types/registry/watchers.js.map +1 -0
  126. package/lib/types/remote-events.d.ts +42 -0
  127. package/lib/types/remote-events.d.ts.map +1 -0
  128. package/lib/types/remote-events.js +21 -0
  129. package/lib/types/remote-events.js.map +1 -0
  130. package/lib/types/run-recorder.d.ts +44 -0
  131. package/lib/types/run-recorder.d.ts.map +1 -0
  132. package/lib/types/run-recorder.js +356 -0
  133. package/lib/types/run-recorder.js.map +1 -0
  134. package/lib/types/supervisor/canned-validate.d.ts +25 -0
  135. package/lib/types/supervisor/canned-validate.d.ts.map +1 -0
  136. package/lib/types/supervisor/canned-validate.js +122 -0
  137. package/lib/types/supervisor/canned-validate.js.map +1 -0
  138. package/lib/types/supervisor/completion-notice.d.ts +49 -0
  139. package/lib/types/supervisor/completion-notice.d.ts.map +1 -0
  140. package/lib/types/supervisor/completion-notice.js +281 -0
  141. package/lib/types/supervisor/completion-notice.js.map +1 -0
  142. package/lib/types/supervisor/cursors.d.ts +68 -0
  143. package/lib/types/supervisor/cursors.d.ts.map +1 -0
  144. package/lib/types/supervisor/cursors.js +158 -0
  145. package/lib/types/supervisor/cursors.js.map +1 -0
  146. package/lib/types/supervisor/engine-compat.d.ts +48 -0
  147. package/lib/types/supervisor/engine-compat.d.ts.map +1 -0
  148. package/lib/types/supervisor/engine-compat.js +116 -0
  149. package/lib/types/supervisor/engine-compat.js.map +1 -0
  150. package/lib/types/supervisor/index.d.ts +183 -0
  151. package/lib/types/supervisor/index.d.ts.map +1 -0
  152. package/lib/types/supervisor/index.js +2040 -0
  153. package/lib/types/supervisor/index.js.map +1 -0
  154. package/lib/types/supervisor/parallel-compat.d.ts +36 -0
  155. package/lib/types/supervisor/parallel-compat.d.ts.map +1 -0
  156. package/lib/types/supervisor/parallel-compat.js +180 -0
  157. package/lib/types/supervisor/parallel-compat.js.map +1 -0
  158. package/lib/types/supervisor/remote.d.ts +25 -0
  159. package/lib/types/supervisor/remote.d.ts.map +1 -0
  160. package/lib/types/supervisor/remote.js +478 -0
  161. package/lib/types/supervisor/remote.js.map +1 -0
  162. package/lib/types/supervisor/storage/bounded-file.d.ts +41 -0
  163. package/lib/types/supervisor/storage/bounded-file.d.ts.map +1 -0
  164. package/lib/types/supervisor/storage/bounded-file.js +186 -0
  165. package/lib/types/supervisor/storage/bounded-file.js.map +1 -0
  166. package/lib/types/supervisor/storage/details-codec.d.ts +14 -0
  167. package/lib/types/supervisor/storage/details-codec.d.ts.map +1 -0
  168. package/lib/types/supervisor/storage/details-codec.js +359 -0
  169. package/lib/types/supervisor/storage/details-codec.js.map +1 -0
  170. package/lib/types/supervisor/storage/index.d.ts +26 -0
  171. package/lib/types/supervisor/storage/index.d.ts.map +1 -0
  172. package/lib/types/supervisor/storage/index.js +100 -0
  173. package/lib/types/supervisor/storage/index.js.map +1 -0
  174. package/lib/types/supervisor/storage/lease.d.ts +34 -0
  175. package/lib/types/supervisor/storage/lease.d.ts.map +1 -0
  176. package/lib/types/supervisor/storage/lease.js +289 -0
  177. package/lib/types/supervisor/storage/lease.js.map +1 -0
  178. package/lib/types/supervisor/storage/manifest-codec.d.ts +10 -0
  179. package/lib/types/supervisor/storage/manifest-codec.d.ts.map +1 -0
  180. package/lib/types/supervisor/storage/manifest-codec.js +335 -0
  181. package/lib/types/supervisor/storage/manifest-codec.js.map +1 -0
  182. package/lib/types/supervisor/storage/manifest-store.d.ts +99 -0
  183. package/lib/types/supervisor/storage/manifest-store.d.ts.map +1 -0
  184. package/lib/types/supervisor/storage/manifest-store.js +1606 -0
  185. package/lib/types/supervisor/storage/manifest-store.js.map +1 -0
  186. package/lib/types/supervisor/storage/manifest-types.d.ts +269 -0
  187. package/lib/types/supervisor/storage/manifest-types.d.ts.map +1 -0
  188. package/lib/types/supervisor/storage/manifest-types.js +2 -0
  189. package/lib/types/supervisor/storage/manifest-types.js.map +1 -0
  190. package/lib/types/supervisor/storage/private-root.d.ts +143 -0
  191. package/lib/types/supervisor/storage/private-root.d.ts.map +1 -0
  192. package/lib/types/supervisor/storage/private-root.js +860 -0
  193. package/lib/types/supervisor/storage/private-root.js.map +1 -0
  194. package/lib/types/supervisor/storage/recovery.d.ts +14 -0
  195. package/lib/types/supervisor/storage/recovery.d.ts.map +1 -0
  196. package/lib/types/supervisor/storage/recovery.js +126 -0
  197. package/lib/types/supervisor/storage/recovery.js.map +1 -0
  198. package/lib/types/supervisor/storage/run-files.d.ts +67 -0
  199. package/lib/types/supervisor/storage/run-files.d.ts.map +1 -0
  200. package/lib/types/supervisor/storage/run-files.js +346 -0
  201. package/lib/types/supervisor/storage/run-files.js.map +1 -0
  202. package/lib/types/supervisor/types.d.ts +295 -0
  203. package/lib/types/supervisor/types.d.ts.map +1 -0
  204. package/lib/types/supervisor/types.js +3 -0
  205. package/lib/types/supervisor/types.js.map +1 -0
  206. package/lib/types/supervisor/value-view.d.ts +19 -0
  207. package/lib/types/supervisor/value-view.d.ts.map +1 -0
  208. package/lib/types/supervisor/value-view.js +183 -0
  209. package/lib/types/supervisor/value-view.js.map +1 -0
  210. package/lib/types/tool/index.d.ts +86 -0
  211. package/lib/types/tool/index.d.ts.map +1 -0
  212. package/lib/types/tool/index.js +810 -0
  213. package/lib/types/tool/index.js.map +1 -0
  214. package/lib/types/tool/schema.d.ts +158 -0
  215. package/lib/types/tool/schema.d.ts.map +1 -0
  216. package/lib/types/tool/schema.js +137 -0
  217. package/lib/types/tool/schema.js.map +1 -0
  218. package/lib/types/types.d.ts +9 -0
  219. package/lib/types/types.d.ts.map +1 -0
  220. package/lib/types/types.js +3 -0
  221. package/lib/types/types.js.map +1 -0
  222. package/lib/types/user-questions.d.ts +9 -0
  223. package/lib/types/user-questions.d.ts.map +1 -0
  224. package/lib/types/user-questions.js +91 -0
  225. package/lib/types/user-questions.js.map +1 -0
  226. package/package.json +291 -0
  227. package/skills/create-workflow/SKILL.md +166 -0
  228. package/vendor/workflow-engine/LICENSE +21 -0
  229. package/vendor/workflow-engine/README.md +1 -0
@@ -0,0 +1,70 @@
1
+ import type { WorkflowRoot } from './roots.js';
2
+ export interface ChokidarHandle {
3
+ on(event: 'all', listener: (event: string, path: string) => void): this;
4
+ close(): void | Promise<void>;
5
+ }
6
+ export type ChokidarWatchOptions = {
7
+ readonly ignoreInitial: boolean;
8
+ readonly usePolling: boolean;
9
+ readonly interval: number;
10
+ readonly depth: 0;
11
+ readonly followSymlinks: false;
12
+ };
13
+ export type ChokidarFactory = (paths: string | readonly string[], options: ChokidarWatchOptions) => ChokidarHandle;
14
+ export interface WorkflowWatcherScheduler {
15
+ schedule(callback: () => void, delayMs: number): unknown;
16
+ cancel(handle: unknown): void;
17
+ }
18
+ export interface WorkflowDefinitionWatcherOptions {
19
+ readonly maxProjects?: number;
20
+ readonly usePolling?: boolean;
21
+ readonly stabilityThresholdMs?: number;
22
+ readonly pollIntervalMs?: number;
23
+ readonly watchFactory?: ChokidarFactory;
24
+ readonly scheduler?: WorkflowWatcherScheduler;
25
+ readonly logger?: {
26
+ warn(...args: unknown[]): void;
27
+ };
28
+ }
29
+ /** Bounded, generation-fenced chokidar ownership for workflow roots. */
30
+ export declare class WorkflowDefinitionWatchers {
31
+ private readonly onChange;
32
+ private readonly options;
33
+ private readonly factory;
34
+ private readonly clock;
35
+ private readonly logger?;
36
+ private readonly permanent;
37
+ private readonly projects;
38
+ private readonly pending;
39
+ private chain;
40
+ private timer;
41
+ private ticks;
42
+ private generationValue;
43
+ private dead;
44
+ private ending?;
45
+ constructor(onChange: () => void, options?: WorkflowDefinitionWatcherOptions);
46
+ constructor(options: WorkflowDefinitionWatcherOptions & {
47
+ onChange: () => void;
48
+ });
49
+ get generation(): number;
50
+ get projectCount(): number;
51
+ observeProject(projectRoot: string, roots: readonly WorkflowRoot[]): Promise<void>;
52
+ dispose(): Promise<void>;
53
+ private enqueue;
54
+ private create;
55
+ private live;
56
+ private coalesce;
57
+ private close;
58
+ }
59
+ export interface DefinitionWatcher {
60
+ readonly roots: readonly WorkflowRoot[];
61
+ readonly generation: number;
62
+ dispose(): Promise<void>;
63
+ }
64
+ export declare function createDefinitionWatcher(roots: readonly WorkflowRoot[], onChange: () => void, options?: {
65
+ maxProjects?: number;
66
+ polling?: boolean;
67
+ stabilityThresholdMs?: number;
68
+ pollIntervalMs?: number;
69
+ }): DefinitionWatcher;
70
+ //# sourceMappingURL=watchers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchers.d.ts","sourceRoot":"","sources":["../../../src/registry/watchers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,MAAM,WAAW,cAAc;IAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAAC,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE;AAC1I,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC;CAChC,CAAC;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,oBAAoB,KAAK,cAAc,CAAC;AACnH,MAAM,WAAW,wBAAwB;IAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE;AACrI,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACvI,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,wBAAwB,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;KAAE,CAAC;CAC9I;AAOD,wEAAwE;AACxE,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6H;IAC5L,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAqC;IAC1J,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IACzJ,OAAO,CAAC,KAAK,CAAoC;IAAC,OAAO,CAAC,KAAK,CAAU;IAAC,OAAO,CAAC,KAAK,CAAK;IAAC,OAAO,CAAC,eAAe,CAAK;IAAC,OAAO,CAAC,IAAI,CAAS;IAAC,OAAO,CAAC,MAAM,CAAC,CAAgB;gBACnK,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,CAAC,EAAE,gCAAgC;gBAChE,OAAO,EAAE,gCAAgC,GAAG;QAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;KAAE;IAiBhF,IAAI,UAAU,IAAI,MAAM,CAAgC;IACxD,IAAI,YAAY,IAAI,MAAM,CAA8B;IACxD,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBlF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,QAAQ;YACF,KAAK;CACpB;AAED,MAAM,WAAW,iBAAiB;IAAG,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE;AACrI,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,iBAAiB,CAMlO"}
@@ -0,0 +1,152 @@
1
+ import { watch as chokidarWatch } from 'chokidar';
2
+ import { posix, win32 } from 'node:path';
3
+ const EVENTS = new Set(['add', 'change', 'unlink', 'addDir', 'unlinkDir']);
4
+ const scheduler = { schedule: (cb, ms) => setTimeout(cb, ms), cancel: h => clearTimeout(h) };
5
+ function norm(path) { return (path.includes('\\') ? win32 : posix).normalize(path); }
6
+ function cmp(a, b) { return a < b ? -1 : a > b ? 1 : 0; }
7
+ function same(a, b) { return a.length === b.length && a.every((v, i) => v === b[i]); }
8
+ /** Bounded, generation-fenced chokidar ownership for workflow roots. */
9
+ export class WorkflowDefinitionWatchers {
10
+ onChange;
11
+ options;
12
+ factory;
13
+ clock;
14
+ logger;
15
+ permanent = new Map();
16
+ projects = new Map();
17
+ pending = new Set();
18
+ chain = Promise.resolve();
19
+ timer;
20
+ ticks = 0;
21
+ generationValue = 0;
22
+ dead = false;
23
+ ending;
24
+ constructor(first, supplied = {}) {
25
+ const opts = typeof first === 'function' ? supplied : first;
26
+ this.onChange = typeof first === 'function' ? first : first.onChange;
27
+ this.options = { maxProjects: opts.maxProjects ?? 128, usePolling: opts.usePolling ?? false, stabilityThresholdMs: opts.stabilityThresholdMs ?? 200, pollIntervalMs: opts.pollIntervalMs ?? 100 };
28
+ for (const name of ['maxProjects', 'stabilityThresholdMs', 'pollIntervalMs']) {
29
+ const value = this.options[name];
30
+ if (!Number.isSafeInteger(value) || value < 1)
31
+ throw new TypeError(`${name} must be a positive safe integer`);
32
+ }
33
+ this.factory = opts.watchFactory ?? chokidarWatch;
34
+ const candidate = opts.scheduler;
35
+ this.clock = candidate?.schedule !== undefined && candidate.cancel !== undefined
36
+ ? candidate
37
+ : candidate?.setTimeout !== undefined && candidate.clearTimeout !== undefined
38
+ ? { schedule: candidate.setTimeout.bind(candidate), cancel: candidate.clearTimeout.bind(candidate) }
39
+ : scheduler;
40
+ this.logger = opts.logger;
41
+ }
42
+ get generation() { return this.generationValue; }
43
+ get projectCount() { return this.projects.size; }
44
+ observeProject(projectRoot, roots) {
45
+ if (this.dead)
46
+ return Promise.resolve();
47
+ return this.enqueue(async () => {
48
+ if (this.dead)
49
+ return;
50
+ for (const root of roots) {
51
+ if (root.scope === 'project')
52
+ continue;
53
+ const key = `${root.scope}\0${norm(root.path)}`;
54
+ if (!this.permanent.has(key)) {
55
+ const watcher = this.create(key, [norm(root.path)]);
56
+ if (watcher)
57
+ this.permanent.set(key, watcher);
58
+ }
59
+ }
60
+ const key = norm(projectRoot);
61
+ const paths = roots.filter(r => r.scope === 'project').map(r => norm(r.path)).sort(cmp);
62
+ const old = this.projects.get(key);
63
+ if (old && same(old.paths, paths)) {
64
+ old.lastObserved = ++this.ticks;
65
+ return;
66
+ }
67
+ if (old) {
68
+ this.projects.delete(key);
69
+ this.pending.delete(old);
70
+ this.generationValue++;
71
+ await this.close(old);
72
+ }
73
+ while (this.projects.size >= this.options.maxProjects) {
74
+ const victim = [...this.projects.values()].sort((a, b) => a.lastObserved - b.lastObserved || cmp(a.key, b.key))[0];
75
+ /* c8 ignore start -- the while condition proves a retained project exists */
76
+ if (!victim)
77
+ break;
78
+ /* c8 ignore stop */
79
+ this.projects.delete(victim.key);
80
+ this.pending.delete(victim);
81
+ this.generationValue++;
82
+ await this.close(victim);
83
+ }
84
+ if (paths.length) {
85
+ const watcher = this.create(key, paths);
86
+ if (watcher) {
87
+ watcher.lastObserved = ++this.ticks;
88
+ this.projects.set(key, watcher);
89
+ }
90
+ }
91
+ });
92
+ }
93
+ dispose() {
94
+ if (this.ending)
95
+ return this.ending;
96
+ this.dead = true;
97
+ if (this.timer !== undefined) {
98
+ this.clock.cancel(this.timer);
99
+ this.timer = undefined;
100
+ }
101
+ this.pending.clear();
102
+ this.ending = (async () => { await this.chain.catch(() => undefined); const all = [...this.permanent.values(), ...this.projects.values()]; this.permanent.clear(); this.projects.clear(); await Promise.all(all.map(w => this.close(w))); })();
103
+ return this.ending;
104
+ }
105
+ enqueue(fn) { const run = this.chain.then(fn, fn); this.chain = run.catch(e => this.logger?.warn('workflow watcher operation failed', e)); return run; }
106
+ create(key, paths) {
107
+ /* c8 ignore next -- dispose waits the queue before create can run after death */
108
+ if (this.dead)
109
+ return undefined;
110
+ let handle;
111
+ try {
112
+ handle = this.factory(paths.length === 1 ? paths[0] : paths, { ignoreInitial: true, usePolling: this.options.usePolling, interval: this.options.pollIntervalMs, depth: 0, followSymlinks: false });
113
+ }
114
+ catch (e) {
115
+ this.logger?.warn(`could not watch workflow definition root ${paths.join(', ')}`, e);
116
+ return undefined;
117
+ }
118
+ const watcher = { key, paths: [...paths], handle, identity: Symbol(key), lastObserved: ++this.ticks, closed: false };
119
+ handle.on('all', event => { if (EVENTS.has(event) && this.live(watcher)) {
120
+ this.pending.add(watcher);
121
+ this.coalesce();
122
+ } });
123
+ return watcher;
124
+ }
125
+ live(w) { return !this.dead && !w.closed && (this.permanent.get(w.key)?.identity === w.identity || this.projects.get(w.key)?.identity === w.identity); }
126
+ coalesce() { if (this.dead)
127
+ return; if (this.timer !== undefined)
128
+ this.clock.cancel(this.timer); this.timer = this.clock.schedule(() => { this.timer = undefined; if (this.dead)
129
+ return; const valid = [...this.pending].some(w => this.live(w)); this.pending.clear(); if (!valid)
130
+ return; this.generationValue++; try {
131
+ this.onChange();
132
+ }
133
+ catch (e) {
134
+ this.logger?.warn('workflow watcher callback failed', e);
135
+ } }, this.options.stabilityThresholdMs); }
136
+ async close(w) { if (w.closed)
137
+ return; w.closed = true; this.pending.delete(w); try {
138
+ await w.handle.close();
139
+ }
140
+ catch (e) {
141
+ this.logger?.warn(`could not close workflow watcher ${w.key}`, e);
142
+ } }
143
+ }
144
+ export function createDefinitionWatcher(roots, onChange, options = {}) {
145
+ const owner = new WorkflowDefinitionWatchers(onChange, { maxProjects: options.maxProjects, usePolling: options.polling, stabilityThresholdMs: options.stabilityThresholdMs, pollIntervalMs: options.pollIntervalMs });
146
+ const projectRoot = roots.find(r => r.scope === 'project')?.projectRoot
147
+ ?? roots.find(r => r.scope === 'project')?.basePath;
148
+ if (projectRoot !== undefined)
149
+ void owner.observeProject(projectRoot, roots);
150
+ return { roots, get generation() { return owner.generation; }, dispose: () => owner.dispose() };
151
+ }
152
+ //# sourceMappingURL=watchers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchers.js","sourceRoot":"","sources":["../../../src/registry/watchers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { WorkflowRunChange } from './supervisor/types.js';
2
+ /** Canonical optional Host ApiProxy registration for workflow invalidation hints. */
3
+ export type WorkflowRemoteEvent = WorkflowRunChange;
4
+ /** Spec name for the invalidate-only `workflows/run-change` payload. */
5
+ export type WorkflowRunInvalidation = WorkflowRunChange;
6
+ export interface WorkflowRemoteEventConfig {
7
+ readonly remoteQueueMaxSessions?: number;
8
+ }
9
+ declare module '@deepseek-ai/cordis' {
10
+ interface Events {
11
+ /**
12
+ * Invalidation-only workflow run hint. Never carries a run head.
13
+ * @mode emit
14
+ */
15
+ 'workflows/run-change'(change: WorkflowRunChange): void;
16
+ }
17
+ }
18
+ declare module '@deepseek-ai/dsh-typert-protocol' {
19
+ interface TypertRemoteEventSelection {
20
+ 'workflows/run-change': true;
21
+ }
22
+ }
23
+ interface ApiRemoteEventsLike {
24
+ register?: (event: string, policy: {
25
+ readonly kind: 'keyed-latest';
26
+ readonly maxKeys: number;
27
+ readonly select: (change: WorkflowRemoteEvent) => {
28
+ readonly kind: 'key';
29
+ readonly key: string;
30
+ } | {
31
+ readonly kind: 'invalidate-all';
32
+ };
33
+ readonly invalidationArgs: readonly [WorkflowRemoteEvent];
34
+ }) => unknown;
35
+ }
36
+ /** Register one effect-owned bounded Host event lane; no package-local queue is retained. */
37
+ export declare function registerWorkflowRemoteEvents(ctx: {
38
+ readonly apiRemoteEvents?: ApiRemoteEventsLike;
39
+ }, config?: WorkflowRemoteEventConfig): () => void;
40
+ export declare const applyRemoteEvents: typeof registerWorkflowRemoteEvents;
41
+ export {};
42
+ //# sourceMappingURL=remote-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-events.d.ts","sourceRoot":"","sources":["../../src/remote-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAE9D,qFAAqF;AACrF,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAA;AACnD,wEAAwE;AACxE,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,CAAA;AAEvD,MAAM,WAAW,yBAAyB;IAAG,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAAE;AAEvF,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,MAAM;QACd;;;WAGG;QACH,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAA;KACxD;CACF;AAED,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,0BAA0B;QAClC,sBAAsB,EAAE,IAAI,CAAA;KAC7B;CACF;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;QACjC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;QAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK;YAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;YAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;SAAE,GAAG;YAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;SAAE,CAAA;QACtI,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,mBAAmB,CAAC,CAAA;KAC1D,KAAK,OAAO,CAAA;CACd;AAED,6FAA6F;AAC7F,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE;IAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,mBAAmB,CAAA;CAAE,EACvD,MAAM,GAAE,yBAA8B,GACrC,MAAM,IAAI,CAaZ;AAED,eAAO,MAAM,iBAAiB,qCAA+B,CAAA"}
@@ -0,0 +1,21 @@
1
+ /** Register one effect-owned bounded Host event lane; no package-local queue is retained. */
2
+ export function registerWorkflowRemoteEvents(ctx, config = {}) {
3
+ const registry = ctx.apiRemoteEvents;
4
+ if (typeof registry?.register !== 'function')
5
+ throw new Error('workflow Remote event registry is unavailable');
6
+ const maxKeys = config.remoteQueueMaxSessions ?? 256;
7
+ if (!Number.isSafeInteger(maxKeys) || maxKeys < 1 || maxKeys > 256)
8
+ throw new RangeError('remoteQueueMaxSessions must be a safe integer from 1 through 256');
9
+ const disposer = registry.register('workflows/run-change', {
10
+ kind: 'keyed-latest', maxKeys,
11
+ select: change => change.kind === 'invalidate-all' ? { kind: 'invalidate-all' } : { kind: 'key', key: String(change.sessionId) },
12
+ invalidationArgs: [{ kind: 'invalidate-all' }],
13
+ });
14
+ if (typeof disposer === 'function')
15
+ return disposer;
16
+ if (typeof disposer?.dispose === 'function')
17
+ return () => { void disposer.dispose(); };
18
+ return () => undefined;
19
+ }
20
+ export const applyRemoteEvents = registerWorkflowRemoteEvents;
21
+ //# sourceMappingURL=remote-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-events.js","sourceRoot":"","sources":["../../src/remote-events.ts"],"names":[],"mappings":"AAkCA,6FAA6F;AAC7F,MAAM,UAAU,4BAA4B,CAC1C,GAAuD,EACvD,SAAoC,EAAE;IAEtC,MAAM,QAAQ,GAAG,GAAG,CAAC,eAAe,CAAA;IACpC,IAAI,OAAO,QAAQ,EAAE,QAAQ,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;IAC9G,MAAM,OAAO,GAAG,MAAM,CAAC,sBAAsB,IAAI,GAAG,CAAA;IACpD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,GAAG;QAAE,MAAM,IAAI,UAAU,CAAC,kEAAkE,CAAC,CAAA;IAC5J,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,EAAE;QACzD,IAAI,EAAE,cAAc,EAAE,OAAO;QAC7B,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;QAChI,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;KAC/C,CAAC,CAAA;IACF,IAAI,OAAO,QAAQ,KAAK,UAAU;QAAE,OAAO,QAAsB,CAAA;IACjE,IAAI,OAAQ,QAAgB,EAAE,OAAO,KAAK,UAAU;QAAE,OAAO,GAAG,EAAE,GAAG,KAAM,QAAgB,CAAC,OAAO,EAAE,CAAA,CAAC,CAAC,CAAA;IACvG,OAAO,GAAG,EAAE,CAAC,SAAS,CAAA;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,4BAA4B,CAAA"}
@@ -0,0 +1,44 @@
1
+ export declare const name = "workflow-run-recorder";
2
+ export declare const inject: readonly ["workflowSupervisor", "agents"];
3
+ /**
4
+ * Best-effort durable projection for explicitly attributed top-level launches.
5
+ * Recording failures never alter execution and disable only the corrupt prefix.
6
+ */
7
+ export declare class WorkflowRunRecorder {
8
+ private readonly ctx;
9
+ private readonly attribution;
10
+ private readonly active;
11
+ private readonly recoveries;
12
+ private readonly listeners;
13
+ private readonly lifetime;
14
+ private disposed;
15
+ private disposal?;
16
+ constructor(ctx?: any);
17
+ private listen;
18
+ /** Attribute exactly the first synchronously published logical id. */
19
+ launch<T extends {
20
+ readonly runId: string;
21
+ readonly displayName: string;
22
+ }>(session: any, start: () => Promise<T>): Promise<T>;
23
+ private empty;
24
+ private warn;
25
+ private append;
26
+ private buffer;
27
+ private replayBeforePublication;
28
+ private onRunStart;
29
+ private onMemberStart;
30
+ private appendMemberStart;
31
+ private onMemberEnd;
32
+ private appendMemberEnd;
33
+ private onRunEnd;
34
+ private seed;
35
+ /** Reconcile unfinished durable Chat prefixes from one atomic supervisor snapshot. */
36
+ reconcile(agent: any): Promise<void>;
37
+ private reconcileSnapshot;
38
+ private closeOpenMembers;
39
+ private closeMissing;
40
+ private activate;
41
+ dispose(): Promise<void>;
42
+ }
43
+ export default WorkflowRunRecorder;
44
+ //# sourceMappingURL=run-recorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-recorder.d.ts","sourceRoot":"","sources":["../../src/run-recorder.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,0BAA0B,CAAA;AAC3C,eAAO,MAAM,MAAM,2CAA4C,CAAA;AAsC/D;;;GAGG;AACH,qBAAa,mBAAmB;IASlB,OAAO,CAAC,QAAQ,CAAC,GAAG;IARhC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA2B;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAC,CAAe;gBAEH,GAAG,GAAE,GAAQ;IAU1C,OAAO,CAAC,MAAM;IAKd,sEAAsE;IAChE,MAAM,CAAC,CAAC,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAoBnI,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,IAAI;IA0BZ,sFAAsF;IAChF,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B1C,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,QAAQ;IAgBV,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAY/B;AAED,eAAe,mBAAmB,CAAA"}