@lumenflow/core 2.18.3 → 2.20.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 (215) hide show
  1. package/dist/adapters/terminal-renderer.adapter.d.ts.map +1 -1
  2. package/dist/adapters/terminal-renderer.adapter.js +6 -4
  3. package/dist/adapters/terminal-renderer.adapter.js.map +1 -1
  4. package/dist/arg-parser.js +2 -2
  5. package/dist/arg-parser.js.map +1 -1
  6. package/dist/atomic-merge.d.ts +21 -0
  7. package/dist/atomic-merge.d.ts.map +1 -0
  8. package/dist/atomic-merge.js +83 -0
  9. package/dist/atomic-merge.js.map +1 -0
  10. package/dist/context/wu-state-reader.d.ts +2 -0
  11. package/dist/context/wu-state-reader.d.ts.map +1 -1
  12. package/dist/context/wu-state-reader.js +3 -0
  13. package/dist/context/wu-state-reader.js.map +1 -1
  14. package/dist/delegation-escalation.d.ts +91 -0
  15. package/dist/delegation-escalation.d.ts.map +1 -0
  16. package/dist/delegation-escalation.js +258 -0
  17. package/dist/delegation-escalation.js.map +1 -0
  18. package/dist/delegation-monitor.d.ts +230 -0
  19. package/dist/delegation-monitor.d.ts.map +1 -0
  20. package/dist/delegation-monitor.js +675 -0
  21. package/dist/delegation-monitor.js.map +1 -0
  22. package/dist/delegation-recovery.d.ts +83 -0
  23. package/dist/delegation-recovery.d.ts.map +1 -0
  24. package/dist/delegation-recovery.js +299 -0
  25. package/dist/delegation-recovery.js.map +1 -0
  26. package/dist/delegation-registry-schema.d.ts +80 -0
  27. package/dist/delegation-registry-schema.d.ts.map +1 -0
  28. package/dist/delegation-registry-schema.js +91 -0
  29. package/dist/delegation-registry-schema.js.map +1 -0
  30. package/dist/delegation-registry-store.d.ts +159 -0
  31. package/dist/delegation-registry-store.d.ts.map +1 -0
  32. package/dist/delegation-registry-store.js +299 -0
  33. package/dist/delegation-registry-store.js.map +1 -0
  34. package/dist/delegation-tree.d.ts +57 -0
  35. package/dist/delegation-tree.d.ts.map +1 -0
  36. package/dist/delegation-tree.js +203 -0
  37. package/dist/delegation-tree.js.map +1 -0
  38. package/dist/gates-agent-mode.d.ts +25 -0
  39. package/dist/gates-agent-mode.d.ts.map +1 -1
  40. package/dist/gates-agent-mode.js +41 -0
  41. package/dist/gates-agent-mode.js.map +1 -1
  42. package/dist/index.d.ts +16 -7
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +20 -9
  45. package/dist/index.js.map +1 -1
  46. package/dist/lumenflow-config-schema.d.ts +9 -3
  47. package/dist/lumenflow-config-schema.d.ts.map +1 -1
  48. package/dist/lumenflow-config-schema.js +19 -4
  49. package/dist/lumenflow-config-schema.js.map +1 -1
  50. package/dist/lumenflow-config.d.ts +2 -0
  51. package/dist/lumenflow-config.d.ts.map +1 -1
  52. package/dist/lumenflow-config.js +1 -0
  53. package/dist/lumenflow-config.js.map +1 -1
  54. package/dist/micro-worktree.d.ts.map +1 -1
  55. package/dist/micro-worktree.js +15 -9
  56. package/dist/micro-worktree.js.map +1 -1
  57. package/dist/rollback-utils.d.ts +52 -0
  58. package/dist/rollback-utils.d.ts.map +1 -1
  59. package/dist/rollback-utils.js +111 -0
  60. package/dist/rollback-utils.js.map +1 -1
  61. package/dist/sandbox-allowlist.d.ts +16 -0
  62. package/dist/sandbox-allowlist.d.ts.map +1 -0
  63. package/dist/sandbox-allowlist.js +75 -0
  64. package/dist/sandbox-allowlist.js.map +1 -0
  65. package/dist/sandbox-backend-linux.d.ts +6 -0
  66. package/dist/sandbox-backend-linux.d.ts.map +1 -0
  67. package/dist/sandbox-backend-linux.js +65 -0
  68. package/dist/sandbox-backend-linux.js.map +1 -0
  69. package/dist/sandbox-backend-macos.d.ts +6 -0
  70. package/dist/sandbox-backend-macos.d.ts.map +1 -0
  71. package/dist/sandbox-backend-macos.js +64 -0
  72. package/dist/sandbox-backend-macos.js.map +1 -0
  73. package/dist/sandbox-backend-windows.d.ts +6 -0
  74. package/dist/sandbox-backend-windows.d.ts.map +1 -0
  75. package/dist/sandbox-backend-windows.js +28 -0
  76. package/dist/sandbox-backend-windows.js.map +1 -0
  77. package/dist/sandbox-profile.d.ts +53 -0
  78. package/dist/sandbox-profile.d.ts.map +1 -0
  79. package/dist/sandbox-profile.js +62 -0
  80. package/dist/sandbox-profile.js.map +1 -0
  81. package/dist/schemas/index.d.ts +3 -3
  82. package/dist/schemas/index.d.ts.map +1 -1
  83. package/dist/schemas/index.js +6 -6
  84. package/dist/schemas/index.js.map +1 -1
  85. package/dist/schemas/initiative-arg-validators.d.ts +1 -0
  86. package/dist/schemas/initiative-arg-validators.d.ts.map +1 -1
  87. package/dist/schemas/initiative-schemas.d.ts +3 -1
  88. package/dist/schemas/initiative-schemas.d.ts.map +1 -1
  89. package/dist/schemas/initiative-schemas.js +2 -1
  90. package/dist/schemas/initiative-schemas.js.map +1 -1
  91. package/dist/schemas/setup-arg-validators.d.ts +4 -4
  92. package/dist/schemas/setup-arg-validators.d.ts.map +1 -1
  93. package/dist/schemas/setup-arg-validators.js +6 -6
  94. package/dist/schemas/setup-arg-validators.js.map +1 -1
  95. package/dist/schemas/setup-schemas.d.ts +7 -7
  96. package/dist/schemas/setup-schemas.d.ts.map +1 -1
  97. package/dist/schemas/setup-schemas.js +11 -11
  98. package/dist/schemas/setup-schemas.js.map +1 -1
  99. package/dist/schemas/wu-lifecycle-arg-validators.d.ts +2 -1
  100. package/dist/schemas/wu-lifecycle-arg-validators.d.ts.map +1 -1
  101. package/dist/schemas/wu-lifecycle-schemas.d.ts +5 -3
  102. package/dist/schemas/wu-lifecycle-schemas.d.ts.map +1 -1
  103. package/dist/schemas/wu-lifecycle-schemas.js +6 -2
  104. package/dist/schemas/wu-lifecycle-schemas.js.map +1 -1
  105. package/dist/spawn-strategy.d.ts +1 -1
  106. package/dist/spawn-strategy.js +1 -1
  107. package/dist/template-loader.d.ts +7 -3
  108. package/dist/template-loader.d.ts.map +1 -1
  109. package/dist/template-loader.js +22 -6
  110. package/dist/template-loader.js.map +1 -1
  111. package/dist/validation/types.d.ts +2 -0
  112. package/dist/validation/types.d.ts.map +1 -1
  113. package/dist/wu-consistency-checker.d.ts +1 -0
  114. package/dist/wu-consistency-checker.d.ts.map +1 -1
  115. package/dist/wu-consistency-checker.js +31 -2
  116. package/dist/wu-consistency-checker.js.map +1 -1
  117. package/dist/wu-context-constants.d.ts +4 -2
  118. package/dist/wu-context-constants.d.ts.map +1 -1
  119. package/dist/wu-context-constants.js +4 -2
  120. package/dist/wu-context-constants.js.map +1 -1
  121. package/dist/wu-done-branch-only.d.ts +2 -11
  122. package/dist/wu-done-branch-only.d.ts.map +1 -1
  123. package/dist/wu-done-branch-only.js +81 -45
  124. package/dist/wu-done-branch-only.js.map +1 -1
  125. package/dist/wu-done-cleanup.js +33 -1
  126. package/dist/wu-done-cleanup.js.map +1 -1
  127. package/dist/wu-done-initiative-sync.d.ts.map +1 -1
  128. package/dist/wu-done-initiative-sync.js +20 -5
  129. package/dist/wu-done-initiative-sync.js.map +1 -1
  130. package/dist/wu-done-machine.d.ts +175 -0
  131. package/dist/wu-done-machine.d.ts.map +1 -0
  132. package/dist/wu-done-machine.js +225 -0
  133. package/dist/wu-done-machine.js.map +1 -0
  134. package/dist/wu-done-metadata.d.ts.map +1 -1
  135. package/dist/wu-done-metadata.js +3 -1
  136. package/dist/wu-done-metadata.js.map +1 -1
  137. package/dist/wu-done-preflight.d.ts +8 -0
  138. package/dist/wu-done-preflight.d.ts.map +1 -1
  139. package/dist/wu-done-preflight.js +17 -1
  140. package/dist/wu-done-preflight.js.map +1 -1
  141. package/dist/wu-done-validation.d.ts +0 -37
  142. package/dist/wu-done-validation.d.ts.map +1 -1
  143. package/dist/wu-done-validation.js +1 -155
  144. package/dist/wu-done-validation.js.map +1 -1
  145. package/dist/wu-done-validators.d.ts +1 -2
  146. package/dist/wu-done-validators.d.ts.map +1 -1
  147. package/dist/wu-done-validators.js +1 -3
  148. package/dist/wu-done-validators.js.map +1 -1
  149. package/dist/wu-done-worktree-services.d.ts +191 -0
  150. package/dist/wu-done-worktree-services.d.ts.map +1 -0
  151. package/dist/wu-done-worktree-services.js +273 -0
  152. package/dist/wu-done-worktree-services.js.map +1 -0
  153. package/dist/wu-done-worktree.d.ts +0 -19
  154. package/dist/wu-done-worktree.d.ts.map +1 -1
  155. package/dist/wu-done-worktree.js +165 -118
  156. package/dist/wu-done-worktree.js.map +1 -1
  157. package/dist/wu-git-constants.d.ts +4 -0
  158. package/dist/wu-git-constants.d.ts.map +1 -1
  159. package/dist/wu-git-constants.js +4 -0
  160. package/dist/wu-git-constants.js.map +1 -1
  161. package/dist/wu-helpers.d.ts +5 -1
  162. package/dist/wu-helpers.d.ts.map +1 -1
  163. package/dist/wu-helpers.js +5 -1
  164. package/dist/wu-helpers.js.map +1 -1
  165. package/dist/wu-lint.d.ts +53 -37
  166. package/dist/wu-lint.d.ts.map +1 -1
  167. package/dist/wu-lint.js +95 -105
  168. package/dist/wu-lint.js.map +1 -1
  169. package/dist/wu-paths-constants.d.ts +3 -3
  170. package/dist/wu-paths-constants.d.ts.map +1 -1
  171. package/dist/wu-paths-constants.js +3 -3
  172. package/dist/wu-paths-constants.js.map +1 -1
  173. package/dist/wu-preflight-validators.d.ts +28 -77
  174. package/dist/wu-preflight-validators.d.ts.map +1 -1
  175. package/dist/wu-preflight-validators.js +86 -130
  176. package/dist/wu-preflight-validators.js.map +1 -1
  177. package/dist/wu-recovery.d.ts +89 -0
  178. package/dist/wu-recovery.d.ts.map +1 -1
  179. package/dist/wu-recovery.js +118 -0
  180. package/dist/wu-recovery.js.map +1 -1
  181. package/dist/wu-rules-core.d.ts +95 -0
  182. package/dist/wu-rules-core.d.ts.map +1 -0
  183. package/dist/wu-rules-core.js +399 -0
  184. package/dist/wu-rules-core.js.map +1 -0
  185. package/dist/wu-rules-engine.d.ts +29 -0
  186. package/dist/wu-rules-engine.d.ts.map +1 -0
  187. package/dist/wu-rules-engine.js +59 -0
  188. package/dist/wu-rules-engine.js.map +1 -0
  189. package/dist/wu-rules-resolvers.d.ts +19 -0
  190. package/dist/wu-rules-resolvers.d.ts.map +1 -0
  191. package/dist/wu-rules-resolvers.js +208 -0
  192. package/dist/wu-rules-resolvers.js.map +1 -0
  193. package/dist/wu-schema.d.ts +24 -9
  194. package/dist/wu-schema.d.ts.map +1 -1
  195. package/dist/wu-schema.js +14 -1
  196. package/dist/wu-schema.js.map +1 -1
  197. package/dist/wu-spawn-context.d.ts +1 -1
  198. package/dist/wu-spawn-context.d.ts.map +1 -1
  199. package/dist/wu-spawn-context.js +8 -2
  200. package/dist/wu-spawn-context.js.map +1 -1
  201. package/dist/wu-spawn-helpers.js +2 -2
  202. package/dist/wu-spawn-helpers.js.map +1 -1
  203. package/dist/wu-state-schema.d.ts +12 -12
  204. package/dist/wu-state-schema.d.ts.map +1 -1
  205. package/dist/wu-state-schema.js +10 -10
  206. package/dist/wu-state-schema.js.map +1 -1
  207. package/dist/wu-state-store.d.ts +10 -4
  208. package/dist/wu-state-store.d.ts.map +1 -1
  209. package/dist/wu-state-store.js +309 -11
  210. package/dist/wu-state-store.js.map +1 -1
  211. package/dist/wu-transaction.d.ts +21 -0
  212. package/dist/wu-transaction.d.ts.map +1 -1
  213. package/dist/wu-transaction.js +17 -0
  214. package/dist/wu-transaction.js.map +1 -1
  215. package/package.json +14 -11
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Delegation Registry Store (WU-1944)
3
+ *
4
+ * Event-sourced state store for tracking sub-agent delegations.
5
+ * Stores events in .lumenflow/state/delegation-registry.jsonl (append-only, git-friendly).
6
+ *
7
+ * Features:
8
+ * - Event sourcing with replay for current state
9
+ * - Atomic append operations
10
+ * - O(1) queries by parent WU, target WU, and status
11
+ *
12
+ * @see {@link packages/@lumenflow/cli/src/lib/__tests__/delegation-registry-store.test.ts} - Tests
13
+ * @see {@link packages/@lumenflow/cli/src/lib/delegation-registry-schema.ts} - Schema definitions
14
+ */
15
+ import { type DelegationEvent, type DelegationIntentValue } from './delegation-registry-schema.js';
16
+ /** Delegation registry file name constant */
17
+ export declare const DELEGATION_REGISTRY_FILE_NAME = "delegation-registry.jsonl";
18
+ /**
19
+ * Delegation Registry Store class
20
+ *
21
+ * Manages delegation registry state via event sourcing pattern.
22
+ * Events are appended to JSONL file, state is rebuilt by replaying events.
23
+ */
24
+ export declare class DelegationRegistryStore {
25
+ private readonly baseDir;
26
+ private readonly registryFilePath;
27
+ private readonly delegations;
28
+ private readonly byParent;
29
+ private readonly byTarget;
30
+ /**
31
+ * @param {string} baseDir - Directory containing .lumenflow/state/
32
+ */
33
+ constructor(baseDir: string);
34
+ /**
35
+ * Loads and replays events from JSONL file into current state.
36
+ *
37
+ * Handles:
38
+ * - Missing file: returns empty state
39
+ * - Empty file: returns empty state
40
+ * - Empty lines: skipped gracefully
41
+ * - Malformed JSON: throws error with line info
42
+ * - Invalid events: throws validation error
43
+ *
44
+ * @returns {Promise<void>}
45
+ * @throws {Error} If file contains malformed JSON or invalid events
46
+ *
47
+ * @example
48
+ * const store = new DelegationRegistryStore('/path/to/project');
49
+ * await store.load();
50
+ * const pending = store.getPendingDelegations();
51
+ */
52
+ load(): Promise<void>;
53
+ /**
54
+ * Applies an event to the in-memory state.
55
+ * If event for same delegation ID exists, updates it (latest wins).
56
+ *
57
+ * @private
58
+ */
59
+ private _applyEvent;
60
+ /**
61
+ * Appends an event to the registry file.
62
+ *
63
+ * Uses append mode to avoid full file rewrite.
64
+ * Creates file and parent directories if they don't exist.
65
+ * Validates event before appending.
66
+ *
67
+ * @private
68
+ * @throws {Error} If event fails validation
69
+ */
70
+ private _appendEvent;
71
+ /**
72
+ * Records a new delegation event with pending status.
73
+ *
74
+ * @param {string} parentWuId - Parent WU ID (orchestrator)
75
+ * @param {string} targetWuId - Target WU ID (delegated work)
76
+ * @param {string} lane - Lane for the delegated work
77
+ * @param {DelegationIntentValue} [intent] - Optional intent source (e.g., delegation)
78
+ * @returns {Promise<string>} The generated delegation ID
79
+ * @throws {Error} If validation fails
80
+ *
81
+ * @example
82
+ * const delegationId = await store.record('WU-1000', 'WU-1001', 'Operations: Tooling');
83
+ */
84
+ record(parentWuId: string, targetWuId: string, lane: string, intent?: DelegationIntentValue): Promise<string>;
85
+ /**
86
+ * Updates the status of a delegation.
87
+ *
88
+ * @param {string} delegationId - Delegation ID to update
89
+ * @param {string} status - New status
90
+ * @returns {Promise<void>}
91
+ * @throws {Error} If delegation ID not found
92
+ *
93
+ * @example
94
+ * await store.updateStatus('dlg-a1b2', 'completed');
95
+ */
96
+ updateStatus(delegationId: string, status: string): Promise<void>;
97
+ /**
98
+ * Records claim-time pickup evidence for a delegation entry.
99
+ *
100
+ * WU-1605: This distinguishes intent-only delegation records from
101
+ * delegated work that was actually picked up via wu:claim.
102
+ *
103
+ * @param {string} delegationId - Delegation ID to update
104
+ * @param {string} pickedUpBy - Agent identity that claimed the target WU
105
+ * @param {string} [pickedUpAt] - Optional ISO timestamp (defaults to now)
106
+ * @returns {Promise<void>}
107
+ * @throws {Error} If delegation ID not found
108
+ */
109
+ recordPickup(delegationId: string, pickedUpBy: string, pickedUpAt?: string): Promise<void>;
110
+ /**
111
+ * Gets all delegations for a parent WU.
112
+ *
113
+ * @param {string} parentWuId - Parent WU ID
114
+ * @returns {DelegationEvent[]} Array of delegation events
115
+ *
116
+ * @example
117
+ * const delegations = store.getByParent('WU-1000');
118
+ */
119
+ getByParent(parentWuId: string): DelegationEvent[];
120
+ /**
121
+ * Gets delegation for a target WU.
122
+ *
123
+ * @param {string} targetWuId - Target WU ID
124
+ * @returns {DelegationEvent | null} Delegation event or null
125
+ *
126
+ * @example
127
+ * const delegation = store.getByTarget('WU-1001');
128
+ */
129
+ getByTarget(targetWuId: string): DelegationEvent | null;
130
+ /**
131
+ * Gets all pending delegations.
132
+ *
133
+ * @returns {DelegationEvent[]} Array of pending delegation events
134
+ *
135
+ * @example
136
+ * const pending = store.getPendingDelegations();
137
+ */
138
+ getPendingDelegations(): DelegationEvent[];
139
+ /**
140
+ * Gets all delegations as an array.
141
+ *
142
+ * @returns {DelegationEvent[]} Array of all delegation events
143
+ *
144
+ * @example
145
+ * const allDelegations = store.getAllDelegations();
146
+ */
147
+ getAllDelegations(): DelegationEvent[];
148
+ /**
149
+ * Gets delegation by ID.
150
+ *
151
+ * @param {string} delegationId - Delegation ID
152
+ * @returns {DelegationEvent | null} Delegation event or null
153
+ *
154
+ * @example
155
+ * const delegation = store.getById('dlg-a1b2');
156
+ */
157
+ getById(delegationId: string): DelegationEvent | null;
158
+ }
159
+ //# sourceMappingURL=delegation-registry-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation-registry-store.d.ts","sourceRoot":"","sources":["../src/delegation-registry-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC3B,MAAM,iCAAiC,CAAC;AAEzC,6CAA6C;AAC7C,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AAEzE;;;;;GAKG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAE/C;;OAEG;gBACS,OAAO,EAAE,MAAM;IAc3B;;;;;;;;;;;;;;;;;OAiBG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoD3B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAmBnB;;;;;;;;;OASG;YACW,YAAY;IAmB1B;;;;;;;;;;;;OAYG;IACG,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC;IAoBlB;;;;;;;;;;OAUG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvE;;;;;;;;;;;OAWG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBhG;;;;;;;;OAQG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,EAAE;IAOlD;;;;;;;;OAQG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAQvD;;;;;;;OAOG;IACH,qBAAqB,IAAI,eAAe,EAAE;IAM1C;;;;;;;OAOG;IACH,iBAAiB,IAAI,eAAe,EAAE;IAItC;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;CAGtD"}
@@ -0,0 +1,299 @@
1
+ /**
2
+ * Delegation Registry Store (WU-1944)
3
+ *
4
+ * Event-sourced state store for tracking sub-agent delegations.
5
+ * Stores events in .lumenflow/state/delegation-registry.jsonl (append-only, git-friendly).
6
+ *
7
+ * Features:
8
+ * - Event sourcing with replay for current state
9
+ * - Atomic append operations
10
+ * - O(1) queries by parent WU, target WU, and status
11
+ *
12
+ * @see {@link packages/@lumenflow/cli/src/lib/__tests__/delegation-registry-store.test.ts} - Tests
13
+ * @see {@link packages/@lumenflow/cli/src/lib/delegation-registry-schema.ts} - Schema definitions
14
+ */
15
+ import fs from 'node:fs/promises';
16
+ import path from 'node:path';
17
+ import { validateDelegationEvent, generateDelegationId, DelegationStatus, } from './delegation-registry-schema.js';
18
+ /** Delegation registry file name constant */
19
+ export const DELEGATION_REGISTRY_FILE_NAME = 'delegation-registry.jsonl';
20
+ /**
21
+ * Delegation Registry Store class
22
+ *
23
+ * Manages delegation registry state via event sourcing pattern.
24
+ * Events are appended to JSONL file, state is rebuilt by replaying events.
25
+ */
26
+ export class DelegationRegistryStore {
27
+ baseDir;
28
+ registryFilePath;
29
+ delegations;
30
+ byParent;
31
+ byTarget;
32
+ /**
33
+ * @param {string} baseDir - Directory containing .lumenflow/state/
34
+ */
35
+ constructor(baseDir) {
36
+ this.baseDir = baseDir;
37
+ this.registryFilePath = path.join(baseDir, DELEGATION_REGISTRY_FILE_NAME);
38
+ // In-memory state (rebuilt from events)
39
+ this.delegations = new Map();
40
+ // Index: parentWuId -> delegationIds[]
41
+ this.byParent = new Map();
42
+ // Index: targetWuId -> delegationId
43
+ this.byTarget = new Map();
44
+ }
45
+ /**
46
+ * Loads and replays events from JSONL file into current state.
47
+ *
48
+ * Handles:
49
+ * - Missing file: returns empty state
50
+ * - Empty file: returns empty state
51
+ * - Empty lines: skipped gracefully
52
+ * - Malformed JSON: throws error with line info
53
+ * - Invalid events: throws validation error
54
+ *
55
+ * @returns {Promise<void>}
56
+ * @throws {Error} If file contains malformed JSON or invalid events
57
+ *
58
+ * @example
59
+ * const store = new DelegationRegistryStore('/path/to/project');
60
+ * await store.load();
61
+ * const pending = store.getPendingDelegations();
62
+ */
63
+ async load() {
64
+ // Reset state
65
+ this.delegations.clear();
66
+ this.byParent.clear();
67
+ this.byTarget.clear();
68
+ // Check if file exists
69
+ let content;
70
+ try {
71
+ content = await fs.readFile(this.registryFilePath, 'utf-8');
72
+ }
73
+ catch (error) {
74
+ if (error.code === 'ENOENT') {
75
+ // File doesn't exist - return empty state
76
+ return;
77
+ }
78
+ throw error;
79
+ }
80
+ // Parse JSONL content
81
+ const lines = content.split('\n');
82
+ for (let i = 0; i < lines.length; i++) {
83
+ const line = lines[i].trim();
84
+ // Skip empty lines
85
+ if (!line) {
86
+ continue;
87
+ }
88
+ // Parse JSON line
89
+ let parsed;
90
+ try {
91
+ parsed = JSON.parse(line);
92
+ }
93
+ catch (error) {
94
+ throw new Error(`Malformed JSON on line ${i + 1}: ${error.message}`);
95
+ }
96
+ // Validate against schema
97
+ const validation = validateDelegationEvent(parsed);
98
+ if (!validation.success) {
99
+ const issues = validation.error.issues
100
+ .map((issue) => `${issue.path.join('.')}: ${issue.message}`)
101
+ .join(', ');
102
+ throw new Error(`Validation error on line ${i + 1}: ${issues}`);
103
+ }
104
+ const event = validation.data;
105
+ // Apply event to state (latest event for same ID wins)
106
+ this._applyEvent(event);
107
+ }
108
+ }
109
+ /**
110
+ * Applies an event to the in-memory state.
111
+ * If event for same delegation ID exists, updates it (latest wins).
112
+ *
113
+ * @private
114
+ */
115
+ _applyEvent(event) {
116
+ const { id, parentWuId, targetWuId } = event;
117
+ // Update main state map
118
+ this.delegations.set(id, event);
119
+ // Update parent index
120
+ if (!this.byParent.has(parentWuId)) {
121
+ this.byParent.set(parentWuId, []);
122
+ }
123
+ const parentDelegations = this.byParent.get(parentWuId);
124
+ if (!parentDelegations.includes(id)) {
125
+ parentDelegations.push(id);
126
+ }
127
+ // Update target index
128
+ this.byTarget.set(targetWuId, id);
129
+ }
130
+ /**
131
+ * Appends an event to the registry file.
132
+ *
133
+ * Uses append mode to avoid full file rewrite.
134
+ * Creates file and parent directories if they don't exist.
135
+ * Validates event before appending.
136
+ *
137
+ * @private
138
+ * @throws {Error} If event fails validation
139
+ */
140
+ async _appendEvent(event) {
141
+ // Validate event before appending
142
+ const validation = validateDelegationEvent(event);
143
+ if (!validation.success) {
144
+ const issues = validation.error.issues
145
+ .map((issue) => `${issue.path.join('.')}: ${issue.message}`)
146
+ .join(', ');
147
+ throw new Error(`Validation error: ${issues}`);
148
+ }
149
+ const line = JSON.stringify(event) + '\n';
150
+ // Ensure parent directory exists before appending
151
+ await fs.mkdir(this.baseDir, { recursive: true });
152
+ // Use append flag to avoid rewriting the file
153
+ await fs.appendFile(this.registryFilePath, line, 'utf-8');
154
+ }
155
+ /**
156
+ * Records a new delegation event with pending status.
157
+ *
158
+ * @param {string} parentWuId - Parent WU ID (orchestrator)
159
+ * @param {string} targetWuId - Target WU ID (delegated work)
160
+ * @param {string} lane - Lane for the delegated work
161
+ * @param {DelegationIntentValue} [intent] - Optional intent source (e.g., delegation)
162
+ * @returns {Promise<string>} The generated delegation ID
163
+ * @throws {Error} If validation fails
164
+ *
165
+ * @example
166
+ * const delegationId = await store.record('WU-1000', 'WU-1001', 'Operations: Tooling');
167
+ */
168
+ async record(parentWuId, targetWuId, lane, intent) {
169
+ const id = generateDelegationId(parentWuId, targetWuId);
170
+ const event = {
171
+ id,
172
+ parentWuId,
173
+ targetWuId,
174
+ lane,
175
+ ...(intent ? { intent } : {}),
176
+ delegatedAt: new Date().toISOString(),
177
+ status: DelegationStatus.PENDING,
178
+ completedAt: null,
179
+ };
180
+ await this._appendEvent(event);
181
+ this._applyEvent(event);
182
+ return id;
183
+ }
184
+ /**
185
+ * Updates the status of a delegation.
186
+ *
187
+ * @param {string} delegationId - Delegation ID to update
188
+ * @param {string} status - New status
189
+ * @returns {Promise<void>}
190
+ * @throws {Error} If delegation ID not found
191
+ *
192
+ * @example
193
+ * await store.updateStatus('dlg-a1b2', 'completed');
194
+ */
195
+ async updateStatus(delegationId, status) {
196
+ const existing = this.delegations.get(delegationId);
197
+ if (!existing) {
198
+ throw new Error(`Delegation ID ${delegationId} not found`);
199
+ }
200
+ const event = {
201
+ ...existing,
202
+ status: status,
203
+ completedAt: new Date().toISOString(),
204
+ };
205
+ await this._appendEvent(event);
206
+ this._applyEvent(event);
207
+ }
208
+ /**
209
+ * Records claim-time pickup evidence for a delegation entry.
210
+ *
211
+ * WU-1605: This distinguishes intent-only delegation records from
212
+ * delegated work that was actually picked up via wu:claim.
213
+ *
214
+ * @param {string} delegationId - Delegation ID to update
215
+ * @param {string} pickedUpBy - Agent identity that claimed the target WU
216
+ * @param {string} [pickedUpAt] - Optional ISO timestamp (defaults to now)
217
+ * @returns {Promise<void>}
218
+ * @throws {Error} If delegation ID not found
219
+ */
220
+ async recordPickup(delegationId, pickedUpBy, pickedUpAt) {
221
+ const existing = this.delegations.get(delegationId);
222
+ if (!existing) {
223
+ throw new Error(`Delegation ID ${delegationId} not found`);
224
+ }
225
+ const event = {
226
+ ...existing,
227
+ pickedUpBy,
228
+ pickedUpAt: pickedUpAt ?? new Date().toISOString(),
229
+ };
230
+ await this._appendEvent(event);
231
+ this._applyEvent(event);
232
+ }
233
+ /**
234
+ * Gets all delegations for a parent WU.
235
+ *
236
+ * @param {string} parentWuId - Parent WU ID
237
+ * @returns {DelegationEvent[]} Array of delegation events
238
+ *
239
+ * @example
240
+ * const delegations = store.getByParent('WU-1000');
241
+ */
242
+ getByParent(parentWuId) {
243
+ const delegationIds = this.byParent.get(parentWuId) ?? [];
244
+ return delegationIds
245
+ .map((id) => this.delegations.get(id))
246
+ .filter((event) => event !== undefined);
247
+ }
248
+ /**
249
+ * Gets delegation for a target WU.
250
+ *
251
+ * @param {string} targetWuId - Target WU ID
252
+ * @returns {DelegationEvent | null} Delegation event or null
253
+ *
254
+ * @example
255
+ * const delegation = store.getByTarget('WU-1001');
256
+ */
257
+ getByTarget(targetWuId) {
258
+ const delegationId = this.byTarget.get(targetWuId);
259
+ if (!delegationId) {
260
+ return null;
261
+ }
262
+ return this.delegations.get(delegationId) ?? null;
263
+ }
264
+ /**
265
+ * Gets all pending delegations.
266
+ *
267
+ * @returns {DelegationEvent[]} Array of pending delegation events
268
+ *
269
+ * @example
270
+ * const pending = store.getPendingDelegations();
271
+ */
272
+ getPendingDelegations() {
273
+ return Array.from(this.delegations.values()).filter((delegation) => delegation.status === DelegationStatus.PENDING);
274
+ }
275
+ /**
276
+ * Gets all delegations as an array.
277
+ *
278
+ * @returns {DelegationEvent[]} Array of all delegation events
279
+ *
280
+ * @example
281
+ * const allDelegations = store.getAllDelegations();
282
+ */
283
+ getAllDelegations() {
284
+ return Array.from(this.delegations.values());
285
+ }
286
+ /**
287
+ * Gets delegation by ID.
288
+ *
289
+ * @param {string} delegationId - Delegation ID
290
+ * @returns {DelegationEvent | null} Delegation event or null
291
+ *
292
+ * @example
293
+ * const delegation = store.getById('dlg-a1b2');
294
+ */
295
+ getById(delegationId) {
296
+ return this.delegations.get(delegationId) ?? null;
297
+ }
298
+ }
299
+ //# sourceMappingURL=delegation-registry-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation-registry-store.js","sourceRoot":"","sources":["../src/delegation-registry-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Delegation Tree Builder (WU-1674)
3
+ *
4
+ * Builds and formats delegation trees for visualization.
5
+ */
6
+ import { DelegationStatus } from './delegation-registry-schema.js';
7
+ interface DelegationRecord {
8
+ id: string;
9
+ parentWuId: string;
10
+ targetWuId: string;
11
+ lane: string;
12
+ status: string;
13
+ delegatedAt: string;
14
+ completedAt: string | null;
15
+ pickedUpAt?: string;
16
+ pickedUpBy?: string;
17
+ }
18
+ interface DelegationTreeNode {
19
+ wuId: string;
20
+ delegationId: string | null;
21
+ status: string | null;
22
+ lane: string | null;
23
+ delegatedAt: string | null;
24
+ children: DelegationTreeNode[];
25
+ }
26
+ /**
27
+ * Status indicators for terminal output.
28
+ */
29
+ export declare const STATUS_INDICATORS: Readonly<{
30
+ [DelegationStatus.COMPLETED]: "✓";
31
+ pending: "○";
32
+ timeout: "⏱";
33
+ crashed: "✗";
34
+ escalated: "!";
35
+ }>;
36
+ /**
37
+ * Builds a delegation tree from flat delegation events.
38
+ */
39
+ export declare function buildDelegationTree(delegations: DelegationRecord[], rootWuId: string): DelegationTreeNode;
40
+ /**
41
+ * Formats a delegation tree for terminal display.
42
+ */
43
+ export declare function formatDelegationTree(tree: DelegationTreeNode): string;
44
+ /**
45
+ * Gets all delegations for a WU (direct + descendants).
46
+ */
47
+ export declare function getDelegationsByWU(wuId: string, baseDir: string): Promise<DelegationRecord[]>;
48
+ /**
49
+ * Gets all delegations for an initiative.
50
+ */
51
+ export declare function getDelegationsByInitiative(initiativeId: string, registryDir: string, wuDir: string): Promise<DelegationRecord[]>;
52
+ /**
53
+ * Converts a delegation tree to JSON.
54
+ */
55
+ export declare function treeToJSON(tree: DelegationTreeNode): any;
56
+ export {};
57
+ //# sourceMappingURL=delegation-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation-tree.d.ts","sourceRoot":"","sources":["../src/delegation-tree.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAcnE,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;IAE5B,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAU;;;;;EAItC,CAAC;AAuBH;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,gBAAgB,EAAE,EAC/B,QAAQ,EAAE,MAAM,GACf,kBAAkB,CAmCpB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CA4BrE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAwC7B;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAmB7B;AA+BD;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,kBAAkB,OASlD"}