@lumenflow/cli 3.1.3 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/dist/agent-issues-query.js.map +1 -0
  2. package/dist/agent-log-issue.js.map +1 -0
  3. package/dist/agent-session-end.js.map +1 -0
  4. package/dist/agent-session.js.map +1 -0
  5. package/dist/backlog-prune.js.map +1 -0
  6. package/dist/cli-entry-point.js +139 -0
  7. package/dist/cli-entry-point.js.map +1 -0
  8. package/dist/commands/integrate.js.map +1 -0
  9. package/dist/commands.js.map +1 -0
  10. package/dist/config-get.js.map +1 -0
  11. package/dist/config-set.js.map +1 -0
  12. package/dist/constants.js +98 -0
  13. package/dist/constants.js.map +1 -0
  14. package/dist/delegation-list.js.map +1 -0
  15. package/dist/deps-add.js +259 -0
  16. package/dist/deps-add.js.map +1 -0
  17. package/dist/deps-remove.js +105 -0
  18. package/dist/deps-remove.js.map +1 -0
  19. package/dist/docs-sync.js.map +1 -0
  20. package/dist/doctor.js.map +1 -0
  21. package/dist/file-delete.js.map +1 -0
  22. package/dist/file-edit.js.map +1 -0
  23. package/dist/file-read.js.map +1 -0
  24. package/dist/file-write.js.map +1 -0
  25. package/dist/flow-bottlenecks.js.map +1 -0
  26. package/dist/flow-report.js.map +1 -0
  27. package/dist/formatters.js +151 -0
  28. package/dist/formatters.js.map +1 -0
  29. package/dist/gate-defaults.js +137 -0
  30. package/dist/gate-defaults.js.map +1 -0
  31. package/dist/gate-registry.js +73 -0
  32. package/dist/gate-registry.js.map +1 -0
  33. package/dist/gates-graceful-degradation.js +153 -0
  34. package/dist/gates-graceful-degradation.js.map +1 -0
  35. package/dist/gates-plan-resolvers.js +190 -0
  36. package/dist/gates-plan-resolvers.js.map +1 -0
  37. package/dist/gates-runners.js +545 -0
  38. package/dist/gates-runners.js.map +1 -0
  39. package/dist/gates-types.js +4 -0
  40. package/dist/gates-types.js.map +1 -0
  41. package/dist/gates-utils.js +333 -0
  42. package/dist/gates-utils.js.map +1 -0
  43. package/dist/gates.js.map +1 -0
  44. package/dist/git-branch.js.map +1 -0
  45. package/dist/git-diff.js.map +1 -0
  46. package/dist/git-log.js.map +1 -0
  47. package/dist/git-status.js.map +1 -0
  48. package/dist/guard-locked.js +172 -0
  49. package/dist/guard-locked.js.map +1 -0
  50. package/dist/guard-main-branch.js +217 -0
  51. package/dist/guard-main-branch.js.map +1 -0
  52. package/dist/guard-worktree-commit.js +163 -0
  53. package/dist/guard-worktree-commit.js.map +1 -0
  54. package/dist/hooks/auto-checkpoint-utils.js +54 -0
  55. package/dist/hooks/auto-checkpoint-utils.js.map +1 -0
  56. package/dist/hooks/enforcement-checks.js +399 -0
  57. package/dist/hooks/enforcement-checks.js.map +1 -0
  58. package/dist/hooks/enforcement-generator.js +139 -0
  59. package/dist/hooks/enforcement-generator.js.map +1 -0
  60. package/dist/hooks/enforcement-sync.js +380 -0
  61. package/dist/hooks/enforcement-sync.js.map +1 -0
  62. package/dist/hooks/generators/auto-checkpoint.js +125 -0
  63. package/dist/hooks/generators/auto-checkpoint.js.map +1 -0
  64. package/dist/hooks/generators/enforce-worktree.js +190 -0
  65. package/dist/hooks/generators/enforce-worktree.js.map +1 -0
  66. package/dist/hooks/generators/index.js +18 -0
  67. package/dist/hooks/generators/index.js.map +1 -0
  68. package/dist/hooks/generators/pre-compact-checkpoint.js +136 -0
  69. package/dist/hooks/generators/pre-compact-checkpoint.js.map +1 -0
  70. package/dist/hooks/generators/require-wu.js +117 -0
  71. package/dist/hooks/generators/require-wu.js.map +1 -0
  72. package/dist/hooks/generators/session-start-recovery.js +103 -0
  73. package/dist/hooks/generators/session-start-recovery.js.map +1 -0
  74. package/dist/hooks/generators/signal-utils.js +54 -0
  75. package/dist/hooks/generators/signal-utils.js.map +1 -0
  76. package/dist/hooks/generators/warn-incomplete.js +67 -0
  77. package/dist/hooks/generators/warn-incomplete.js.map +1 -0
  78. package/dist/hooks/index.js +10 -0
  79. package/dist/hooks/index.js.map +1 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/init-detection.js +232 -0
  82. package/dist/init-detection.js.map +1 -0
  83. package/dist/init-lane-validation.js +147 -0
  84. package/dist/init-lane-validation.js.map +1 -0
  85. package/dist/init-scaffolding.js +158 -0
  86. package/dist/init-scaffolding.js.map +1 -0
  87. package/dist/init-templates.js +1983 -0
  88. package/dist/init-templates.js.map +1 -0
  89. package/dist/init.js.map +1 -0
  90. package/dist/initiative-add-wu.js.map +1 -0
  91. package/dist/initiative-bulk-assign-wus.js.map +1 -0
  92. package/dist/initiative-create.js.map +1 -0
  93. package/dist/initiative-edit.js.map +1 -0
  94. package/dist/initiative-list.js.map +1 -0
  95. package/dist/initiative-plan.js.map +1 -0
  96. package/dist/initiative-remove-wu.js.map +1 -0
  97. package/dist/initiative-status.js.map +1 -0
  98. package/dist/lane-edit.js.map +1 -0
  99. package/dist/lane-health.js.map +1 -0
  100. package/dist/lane-lifecycle-process.js +381 -0
  101. package/dist/lane-lifecycle-process.js.map +1 -0
  102. package/dist/lane-lock.js.map +1 -0
  103. package/dist/lane-setup.js.map +1 -0
  104. package/dist/lane-status.js.map +1 -0
  105. package/dist/lane-suggest.js.map +1 -0
  106. package/dist/lane-validate.js.map +1 -0
  107. package/dist/lifecycle-regression-harness.js +181 -0
  108. package/dist/lifecycle-regression-harness.js.map +1 -0
  109. package/dist/lumenflow-upgrade.js +18 -10
  110. package/dist/lumenflow-upgrade.js.map +1 -0
  111. package/dist/mem-checkpoint.js.map +1 -0
  112. package/dist/mem-cleanup.js.map +1 -0
  113. package/dist/mem-context.js.map +1 -0
  114. package/dist/mem-create.js.map +1 -0
  115. package/dist/mem-delete.js.map +1 -0
  116. package/dist/mem-export.js.map +1 -0
  117. package/dist/mem-inbox.js.map +1 -0
  118. package/dist/mem-index.js +214 -0
  119. package/dist/mem-index.js.map +1 -0
  120. package/dist/mem-init.js.map +1 -0
  121. package/dist/mem-profile.js +210 -0
  122. package/dist/mem-profile.js.map +1 -0
  123. package/dist/mem-promote.js +257 -0
  124. package/dist/mem-promote.js.map +1 -0
  125. package/dist/mem-ready.js.map +1 -0
  126. package/dist/mem-recover.js.map +1 -0
  127. package/dist/mem-signal.js.map +1 -0
  128. package/dist/mem-start.js.map +1 -0
  129. package/dist/mem-summarize.js.map +1 -0
  130. package/dist/mem-triage.js.map +1 -0
  131. package/dist/merge-block.js +225 -0
  132. package/dist/merge-block.js.map +1 -0
  133. package/dist/metrics-cli.js.map +1 -0
  134. package/dist/metrics-snapshot.js.map +1 -0
  135. package/dist/object-guards.js +9 -0
  136. package/dist/object-guards.js.map +1 -0
  137. package/dist/onboard.js.map +1 -0
  138. package/dist/onboarding-smoke-test.js +432 -0
  139. package/dist/onboarding-smoke-test.js.map +1 -0
  140. package/dist/orchestrate-init-status.js.map +1 -0
  141. package/dist/orchestrate-initiative.js.map +1 -0
  142. package/dist/orchestrate-monitor.js.map +1 -0
  143. package/dist/pack-author.js.map +1 -0
  144. package/dist/pack-hash.js.map +1 -0
  145. package/dist/pack-install.js.map +1 -0
  146. package/dist/pack-publish.js.map +1 -0
  147. package/dist/pack-scaffold.js.map +1 -0
  148. package/dist/pack-search.js.map +1 -0
  149. package/dist/pack-validate.js.map +1 -0
  150. package/dist/plan-create.js.map +1 -0
  151. package/dist/plan-edit.js.map +1 -0
  152. package/dist/plan-link.js.map +1 -0
  153. package/dist/plan-promote.js.map +1 -0
  154. package/dist/public-manifest.js +931 -0
  155. package/dist/public-manifest.js.map +1 -0
  156. package/dist/release.js +664 -116
  157. package/dist/release.js.map +1 -0
  158. package/dist/rotate-progress.js +253 -0
  159. package/dist/rotate-progress.js.map +1 -0
  160. package/dist/session-coordinator.js +303 -0
  161. package/dist/session-coordinator.js.map +1 -0
  162. package/dist/shared-validators.js +81 -0
  163. package/dist/shared-validators.js.map +1 -0
  164. package/dist/signal-cleanup.js.map +1 -0
  165. package/dist/state-bootstrap.js.map +1 -0
  166. package/dist/state-cleanup.js.map +1 -0
  167. package/dist/state-doctor-fix.js +226 -0
  168. package/dist/state-doctor-fix.js.map +1 -0
  169. package/dist/state-doctor-stamps.js +23 -0
  170. package/dist/state-doctor-stamps.js.map +1 -0
  171. package/dist/state-doctor.js.map +1 -0
  172. package/dist/strict-progress.js +255 -0
  173. package/dist/strict-progress.js.map +1 -0
  174. package/dist/sync-templates.js.map +1 -0
  175. package/dist/task-claim.js.map +1 -0
  176. package/dist/trace-gen.js +401 -0
  177. package/dist/trace-gen.js.map +1 -0
  178. package/dist/validate-agent-skills.js +224 -0
  179. package/dist/validate-agent-skills.js.map +1 -0
  180. package/dist/validate-agent-sync.js +152 -0
  181. package/dist/validate-agent-sync.js.map +1 -0
  182. package/dist/validate-backlog-sync.js +77 -0
  183. package/dist/validate-backlog-sync.js.map +1 -0
  184. package/dist/validate-skills-spec.js +211 -0
  185. package/dist/validate-skills-spec.js.map +1 -0
  186. package/dist/validate.js.map +1 -0
  187. package/dist/validator-defaults.js +107 -0
  188. package/dist/validator-defaults.js.map +1 -0
  189. package/dist/validator-registry.js +71 -0
  190. package/dist/validator-registry.js.map +1 -0
  191. package/dist/workspace-init.js.map +1 -0
  192. package/dist/wu-block.js.map +1 -0
  193. package/dist/wu-brief.js.map +1 -0
  194. package/dist/wu-claim-branch.js +123 -0
  195. package/dist/wu-claim-branch.js.map +1 -0
  196. package/dist/wu-claim-cloud.js +79 -0
  197. package/dist/wu-claim-cloud.js.map +1 -0
  198. package/dist/wu-claim-mode.js +82 -0
  199. package/dist/wu-claim-mode.js.map +1 -0
  200. package/dist/wu-claim-output.js +85 -0
  201. package/dist/wu-claim-output.js.map +1 -0
  202. package/dist/wu-claim-repair-guidance.js +12 -0
  203. package/dist/wu-claim-repair-guidance.js.map +1 -0
  204. package/dist/wu-claim-resume-handler.js +87 -0
  205. package/dist/wu-claim-resume-handler.js.map +1 -0
  206. package/dist/wu-claim-state.js +581 -0
  207. package/dist/wu-claim-state.js.map +1 -0
  208. package/dist/wu-claim-validation.js +458 -0
  209. package/dist/wu-claim-validation.js.map +1 -0
  210. package/dist/wu-claim-worktree.js +238 -0
  211. package/dist/wu-claim-worktree.js.map +1 -0
  212. package/dist/wu-claim.js.map +1 -0
  213. package/dist/wu-cleanup-cloud.js +78 -0
  214. package/dist/wu-cleanup-cloud.js.map +1 -0
  215. package/dist/wu-cleanup.js.map +1 -0
  216. package/dist/wu-code-path-coverage.js +83 -0
  217. package/dist/wu-code-path-coverage.js.map +1 -0
  218. package/dist/wu-create-cloud.js +30 -0
  219. package/dist/wu-create-cloud.js.map +1 -0
  220. package/dist/wu-create-content.js +264 -0
  221. package/dist/wu-create-content.js.map +1 -0
  222. package/dist/wu-create-readiness.js +59 -0
  223. package/dist/wu-create-readiness.js.map +1 -0
  224. package/dist/wu-create-validation.js +128 -0
  225. package/dist/wu-create-validation.js.map +1 -0
  226. package/dist/wu-create.js.map +1 -0
  227. package/dist/wu-delegate.js.map +1 -0
  228. package/dist/wu-delete.js.map +1 -0
  229. package/dist/wu-deps.js.map +1 -0
  230. package/dist/wu-done-auto-cleanup.js +194 -0
  231. package/dist/wu-done-auto-cleanup.js.map +1 -0
  232. package/dist/wu-done-check.js +38 -0
  233. package/dist/wu-done-check.js.map +1 -0
  234. package/dist/wu-done-cloud.js +48 -0
  235. package/dist/wu-done-cloud.js.map +1 -0
  236. package/dist/wu-done-decay.js +83 -0
  237. package/dist/wu-done-decay.js.map +1 -0
  238. package/dist/wu-done.js.map +1 -0
  239. package/dist/wu-edit-operations.js +399 -0
  240. package/dist/wu-edit-operations.js.map +1 -0
  241. package/dist/wu-edit-validators.js +282 -0
  242. package/dist/wu-edit-validators.js.map +1 -0
  243. package/dist/wu-edit.js.map +1 -0
  244. package/dist/wu-infer-lane.js.map +1 -0
  245. package/dist/wu-preflight.js.map +1 -0
  246. package/dist/wu-prep.js.map +1 -0
  247. package/dist/wu-proto.js.map +1 -0
  248. package/dist/wu-prune.js.map +1 -0
  249. package/dist/wu-recover.js.map +1 -0
  250. package/dist/wu-release.js.map +1 -0
  251. package/dist/wu-repair.js.map +1 -0
  252. package/dist/wu-sandbox.js.map +1 -0
  253. package/dist/wu-spawn-completion.js +58 -0
  254. package/dist/wu-spawn-completion.js.map +1 -0
  255. package/dist/wu-spawn-prompt-builders.js +1190 -0
  256. package/dist/wu-spawn-prompt-builders.js.map +1 -0
  257. package/dist/wu-spawn-strategy-resolver.js +322 -0
  258. package/dist/wu-spawn-strategy-resolver.js.map +1 -0
  259. package/dist/wu-spawn.js +59 -0
  260. package/dist/wu-spawn.js.map +1 -0
  261. package/dist/wu-state-cloud.js +41 -0
  262. package/dist/wu-state-cloud.js.map +1 -0
  263. package/dist/wu-status.js.map +1 -0
  264. package/dist/wu-unblock.js.map +1 -0
  265. package/dist/wu-unlock-lane.js.map +1 -0
  266. package/dist/wu-validate.js.map +1 -0
  267. package/package.json +8 -10
@@ -0,0 +1,190 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * @file generators/enforce-worktree.ts
5
+ * Generate the enforce-worktree.sh hook script content (WU-1367, WU-1501).
6
+ *
7
+ * Extracted from enforcement-generator.ts by WU-1645.
8
+ */
9
+ /**
10
+ * Generate the enforce-worktree.sh hook script content.
11
+ *
12
+ * WU-1501: Fail-closed on main. Blocks Write/Edit when no active claim context.
13
+ * Graceful degradation only when LumenFlow is NOT configured.
14
+ * Allowlist: docs/04-operations/tasks/wu/, .lumenflow/, .claude/, plan/
15
+ * Branch-PR claimed_mode remains writable from main checkout.
16
+ */
17
+ export function generateEnforceWorktreeScript() {
18
+ // Note: Shell variable escapes (\$, \") are intentional for the generated bash script
19
+ /* eslint-disable no-useless-escape */
20
+ return `#!/bin/bash
21
+ #
22
+ # enforce-worktree.sh (WU-1367, WU-1501)
23
+ #
24
+ # PreToolUse hook that blocks Write/Edit on main checkout.
25
+ # WU-1501: Fail-closed - blocks even when no worktrees exist.
26
+ # Graceful degradation only when LumenFlow is NOT configured.
27
+ #
28
+ # Allowlist: docs/04-operations/tasks/wu/, .lumenflow/, .claude/, plan/
29
+ # Branch-PR claimed_mode permits writes from main checkout.
30
+ #
31
+ # Exit codes:
32
+ # 0 = Allow operation
33
+ # 2 = Block operation (stderr shown to Claude as guidance)
34
+ #
35
+
36
+ set -euo pipefail
37
+
38
+ SCRIPT_DIR="$(cd "$(dirname "\${BASH_SOURCE[0]}")" && pwd)"
39
+
40
+ # Graceful degradation: if we can't determine state, allow the operation
41
+ graceful_allow() {
42
+ local reason="\$1"
43
+ exit 0
44
+ }
45
+
46
+ # Derive repo paths from CLAUDE_PROJECT_DIR
47
+ if [[ -z "\${CLAUDE_PROJECT_DIR:-}" ]]; then
48
+ graceful_allow "CLAUDE_PROJECT_DIR not set"
49
+ fi
50
+
51
+ MAIN_REPO_PATH="\$CLAUDE_PROJECT_DIR"
52
+ WORKTREES_DIR="\${MAIN_REPO_PATH}/worktrees"
53
+ LUMENFLOW_DIR="\${MAIN_REPO_PATH}/.lumenflow"
54
+
55
+ # Check if .lumenflow exists (LumenFlow is configured)
56
+ if [[ ! -d "\$LUMENFLOW_DIR" ]]; then
57
+ graceful_allow "No .lumenflow directory (LumenFlow not configured)"
58
+ fi
59
+
60
+ # Read JSON input from stdin
61
+ INPUT=\$(cat)
62
+
63
+ if [[ -z "\$INPUT" ]]; then
64
+ graceful_allow "No input provided"
65
+ fi
66
+
67
+ # Parse JSON with Python
68
+ TMPFILE=\$(mktemp)
69
+ echo "\$INPUT" > "\$TMPFILE"
70
+
71
+ PARSE_RESULT=\$(python3 -c "
72
+ import json
73
+ import sys
74
+ try:
75
+ with open('\$TMPFILE', 'r') as f:
76
+ data = json.load(f)
77
+ tool_name = data.get('tool_name', '')
78
+ tool_input = data.get('tool_input', {})
79
+ if not isinstance(tool_input, dict):
80
+ tool_input = {}
81
+ file_path = tool_input.get('file_path', '')
82
+ print('OK')
83
+ print(tool_name if tool_name else '')
84
+ print(file_path if file_path else '')
85
+ except Exception as e:
86
+ print('ERROR')
87
+ print(str(e))
88
+ print('')
89
+ " 2>&1)
90
+
91
+ rm -f "\$TMPFILE"
92
+
93
+ # Parse the result
94
+ PARSE_STATUS=\$(echo "\$PARSE_RESULT" | head -1)
95
+ TOOL_NAME=\$(echo "\$PARSE_RESULT" | sed -n '2p')
96
+ FILE_PATH=\$(echo "\$PARSE_RESULT" | sed -n '3p')
97
+
98
+ if [[ "\$PARSE_STATUS" != "OK" ]]; then
99
+ graceful_allow "JSON parse failed"
100
+ fi
101
+
102
+ # Only process Write and Edit tools
103
+ if [[ "\$TOOL_NAME" != "Write" && "\$TOOL_NAME" != "Edit" ]]; then
104
+ exit 0
105
+ fi
106
+
107
+ if [[ -z "\$FILE_PATH" ]]; then
108
+ graceful_allow "No file_path in input"
109
+ fi
110
+
111
+ # Resolve the file path
112
+ RESOLVED_PATH=\$(realpath -m "\$FILE_PATH" 2>/dev/null || echo "\$FILE_PATH")
113
+
114
+ # Allow if path is outside repo entirely
115
+ if [[ "\$RESOLVED_PATH" != "\${MAIN_REPO_PATH}/"* && "\$RESOLVED_PATH" != "\${MAIN_REPO_PATH}" ]]; then
116
+ exit 0
117
+ fi
118
+
119
+ # Allow if path is inside a worktree
120
+ if [[ "\$RESOLVED_PATH" == "\${WORKTREES_DIR}/"* ]]; then
121
+ exit 0
122
+ fi
123
+
124
+ # Check if UnsafeAny active worktrees exist
125
+ WORKTREE_COUNT=0
126
+ if [[ -d "\$WORKTREES_DIR" ]]; then
127
+ WORKTREE_COUNT=\$(find "\$WORKTREES_DIR" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | wc -l)
128
+ fi
129
+
130
+ # If worktrees exist, block writes to main repo (original behavior)
131
+ if [[ "\$WORKTREE_COUNT" -gt 0 ]]; then
132
+ ACTIVE_WORKTREES=\$(find "\$WORKTREES_DIR" -mindepth 1 -maxdepth 1 -type d -printf '%f\\n' 2>/dev/null | head -5 | tr '\\n' ', ' | sed 's/,\$//')
133
+
134
+ echo "" >&2
135
+ echo "=== Worktree Enforcement ===" >&2
136
+ echo "" >&2
137
+ echo "BLOCKED: \$TOOL_NAME to main repo" >&2
138
+ echo "" >&2
139
+ echo "Active worktrees: \${ACTIVE_WORKTREES:-none detected}" >&2
140
+ echo "" >&2
141
+ echo "USE INSTEAD:" >&2
142
+ echo " 1. cd to your worktree: cd worktrees/<lane>-wu-<id>/" >&2
143
+ echo " 2. Make your edits in the worktree" >&2
144
+ echo "" >&2
145
+ echo "See: LUMENFLOW.md for worktree discipline" >&2
146
+ echo "==============================" >&2
147
+ exit 2
148
+ fi
149
+
150
+ # WU-1501: Fail-closed on main when no active worktrees exist
151
+ # Check allowlist: paths that are always safe to write on main
152
+ RELATIVE_PATH="\${RESOLVED_PATH#\${MAIN_REPO_PATH}/}"
153
+
154
+ case "\$RELATIVE_PATH" in
155
+ docs/04-operations/tasks/wu/*) exit 0 ;; # WU YAML specs
156
+ .lumenflow/*) exit 0 ;; # LumenFlow state/config
157
+ .claude/*) exit 0 ;; # Claude Code config
158
+ plan/*) exit 0 ;; # Plan/spec scaffolds
159
+ esac
160
+
161
+ # Check for branch-pr claimed_mode (allows main writes without worktree)
162
+ STATE_FILE="\${LUMENFLOW_DIR}/state/wu-events.jsonl"
163
+ if [[ -f "\$STATE_FILE" ]]; then
164
+ if grep -q '"claimed_mode":"branch-pr"' "\$STATE_FILE" 2>/dev/null; then
165
+ if grep -q '"status":"in_progress"' "\$STATE_FILE" 2>/dev/null; then
166
+ exit 0 # Branch-PR WU active - allow main writes
167
+ fi
168
+ fi
169
+ fi
170
+
171
+ # WU-1501: Fail-closed - no active claim context, block the write
172
+ echo "" >&2
173
+ echo "=== Worktree Enforcement ===" >&2
174
+ echo "" >&2
175
+ echo "BLOCKED: \$TOOL_NAME on main (no active WU claim)" >&2
176
+ echo "" >&2
177
+ echo "No worktrees exist and no branch-pr WU is in progress." >&2
178
+ echo "" >&2
179
+ echo "WHAT TO DO:" >&2
180
+ echo " 1. Claim a WU: pnpm wu:claim --id WU-XXXX --lane \\"<Lane>\\"" >&2
181
+ echo " 2. cd worktrees/<lane>-wu-xxxx" >&2
182
+ echo " 3. Make your edits in the worktree" >&2
183
+ echo "" >&2
184
+ echo "See: LUMENFLOW.md for worktree discipline" >&2
185
+ echo "==============================" >&2
186
+ exit 2
187
+ `;
188
+ /* eslint-enable no-useless-escape */
189
+ }
190
+ //# sourceMappingURL=enforce-worktree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforce-worktree.js","sourceRoot":"","sources":["../../../src/hooks/generators/enforce-worktree.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,6BAA6B;IAC3C,sFAAsF;IACtF,sCAAsC;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuKR,CAAC;IACA,qCAAqC;AACvC,CAAC"}
@@ -0,0 +1,18 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * @file generators/index.ts
5
+ * Barrel export for per-hook generator modules (WU-1645).
6
+ *
7
+ * Each hook script builder lives in its own file for focused maintainability.
8
+ * This barrel re-exports all generators so that enforcement-generator.ts
9
+ * (and other consumers) can import from a single location.
10
+ */
11
+ export { generateEnforceWorktreeScript } from './enforce-worktree.js';
12
+ export { generateRequireWuScript } from './require-wu.js';
13
+ export { generateWarnIncompleteScript } from './warn-incomplete.js';
14
+ export { generatePreCompactCheckpointScript } from './pre-compact-checkpoint.js';
15
+ export { generateSessionStartRecoveryScript } from './session-start-recovery.js';
16
+ export { generateAutoCheckpointScript } from './auto-checkpoint.js';
17
+ export { surfaceUnreadSignals, markCompletedWUSignalsAsRead, } from './signal-utils.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/generators/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;;;GAOG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,kCAAkC,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,kCAAkC,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EACL,oBAAoB,EACpB,4BAA4B,GAG7B,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,136 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * @file generators/pre-compact-checkpoint.ts
5
+ * Generate the pre-compact-checkpoint.sh hook script content (WU-1394).
6
+ *
7
+ * Extracted from enforcement-generator.ts by WU-1645.
8
+ */
9
+ /**
10
+ * Generate the pre-compact-checkpoint.sh hook script content.
11
+ *
12
+ * This PreCompact hook saves a checkpoint and writes a durable recovery file
13
+ * before context compaction. The recovery file survives compaction and is
14
+ * read by session-start-recovery.sh on the next session start.
15
+ *
16
+ * Part of WU-1394: Durable recovery pattern for context preservation.
17
+ */
18
+ export function generatePreCompactCheckpointScript() {
19
+ // Note: Shell variable escapes (\$, \") are intentional for the generated bash script
20
+ /* eslint-disable no-useless-escape */
21
+ return `#!/bin/bash
22
+ #
23
+ # pre-compact-checkpoint.sh
24
+ #
25
+ # PreCompact hook - auto-checkpoint + durable recovery marker (WU-1390)
26
+ #
27
+ # Fires before context compaction to:
28
+ # 1. Save a checkpoint with the current WU progress
29
+ # 2. Write a durable recovery file that survives compaction
30
+ #
31
+ # The recovery file is read by session-start-recovery.sh on the next
32
+ # session start (after compact, resume, or clear) to restore context.
33
+ #
34
+ # Exit codes:
35
+ # 0 = Always allow (cannot block compaction)
36
+ #
37
+ # Uses python3 for JSON parsing (consistent with other hooks)
38
+ #
39
+
40
+ set -euo pipefail
41
+
42
+ SCRIPT_DIR="$(cd "$(dirname "\${BASH_SOURCE[0]}")" && pwd)"
43
+
44
+ # Derive repo paths from CLAUDE_PROJECT_DIR
45
+ if [[ -n "\${CLAUDE_PROJECT_DIR:-}" ]]; then
46
+ REPO_PATH="\$CLAUDE_PROJECT_DIR"
47
+ else
48
+ REPO_PATH=\$(git rev-parse --show-toplevel 2>/dev/null || echo "")
49
+ if [[ -z "\$REPO_PATH" ]]; then
50
+ exit 0
51
+ fi
52
+ fi
53
+
54
+ # Read JSON input from stdin
55
+ INPUT=\$(cat)
56
+
57
+ # Parse trigger from hook input (defensive - default to "auto")
58
+ # PreCompact provides: { "trigger": "manual" | "auto" }
59
+ TRIGGER=\$(python3 -c "
60
+ import json
61
+ import sys
62
+ try:
63
+ data = json.loads('''\$INPUT''')
64
+ trigger = data.get('trigger', 'auto')
65
+ print(trigger if trigger else 'auto')
66
+ except:
67
+ print('auto')
68
+ " 2>/dev/null || echo "auto")
69
+
70
+ # Get WU ID from worktree context (wu:status --json)
71
+ # Location.worktreeWuId is set when in a worktree
72
+ WU_ID=\$(pnpm wu:status --json 2>/dev/null | python3 -c "
73
+ import json
74
+ import sys
75
+ try:
76
+ data = json.load(sys.stdin)
77
+ location = data.get('location', {})
78
+ wu_id = location.get('worktreeWuId') or ''
79
+ print(wu_id)
80
+ except:
81
+ print('')
82
+ " 2>/dev/null || echo "")
83
+
84
+ # Proceed with worktree-based recovery if we have a WU ID
85
+ if [[ -n "\$WU_ID" ]]; then
86
+ # Save checkpoint with pre-compact trigger
87
+ # Note: This may fail if CLI not built, but that's OK - recovery file is more important
88
+ pnpm mem:checkpoint "Auto: pre-\${TRIGGER}-compaction" --wu "\$WU_ID" --trigger "pre-compact" --quiet 2>/dev/null || true
89
+
90
+ # Write durable recovery marker (survives compaction)
91
+ # This is the key mechanism - file persists and is read by session-start-recovery.sh
92
+ RECOVERY_DIR="\${REPO_PATH}/.lumenflow/state"
93
+ RECOVERY_FILE="\${RECOVERY_DIR}/recovery-pending-\${WU_ID}.md"
94
+
95
+ mkdir -p "\$RECOVERY_DIR"
96
+
97
+ # Generate recovery context using mem:recover
98
+ # The --quiet flag outputs only the recovery context without headers
99
+ pnpm mem:recover --wu "\$WU_ID" --quiet > "\$RECOVERY_FILE" 2>/dev/null || {
100
+ # Fallback minimal recovery if mem:recover fails
101
+ cat > "\$RECOVERY_FILE" << EOF
102
+ # POST-COMPACTION RECOVERY
103
+
104
+ You are resuming work after context compaction. Your previous context was lost.
105
+ **WU:** \${WU_ID}
106
+
107
+ ## Next Action
108
+ Run \\\`pnpm wu:brief --id \${WU_ID} --client \${LUMENFLOW_CLIENT:-claude-code}\\\` to generate a fresh handoff prompt.
109
+ EOF
110
+ }
111
+
112
+ # Output brief warning to stderr (may be compacted away, but recovery file persists)
113
+ echo "" >&2
114
+ echo "═══════════════════════════════════════════════════════" >&2
115
+ echo "⚠️ COMPACTION: Checkpoint saved for \${WU_ID}" >&2
116
+ echo "Recovery context: \${RECOVERY_FILE}" >&2
117
+ echo "Next: pnpm wu:brief --id \${WU_ID} --client \${LUMENFLOW_CLIENT:-claude-code}" >&2
118
+ echo "═══════════════════════════════════════════════════════" >&2
119
+ else
120
+ # WU-1473: Non-worktree orchestrator context recovery
121
+ # When not in a worktree (e.g., orchestrator on main), surface unread inbox
122
+ # so agents have coordination context after compaction
123
+ echo "" >&2
124
+ echo "═══════════════════════════════════════════════════════" >&2
125
+ echo "⚠️ COMPACTION: No active WU detected (non-worktree context)" >&2
126
+ echo "Surfacing recent coordination signals via mem:inbox..." >&2
127
+ pnpm mem:inbox --since 1h --quiet 2>/dev/null >&2 || true
128
+ echo "═══════════════════════════════════════════════════════" >&2
129
+ fi
130
+
131
+ # Always exit 0 - cannot block compaction
132
+ exit 0
133
+ `;
134
+ /* eslint-enable no-useless-escape */
135
+ }
136
+ //# sourceMappingURL=pre-compact-checkpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pre-compact-checkpoint.js","sourceRoot":"","sources":["../../../src/hooks/generators/pre-compact-checkpoint.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,kCAAkC;IAChD,sFAAsF;IACtF,sCAAsC;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgHR,CAAC;IACA,qCAAqC;AACvC,CAAC"}
@@ -0,0 +1,117 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * @file generators/require-wu.ts
5
+ * Generate the require-wu.sh hook script content (WU-1367).
6
+ *
7
+ * Extracted from enforcement-generator.ts by WU-1645.
8
+ */
9
+ /**
10
+ * Generate the require-wu.sh hook script content.
11
+ *
12
+ * This hook blocks Write/Edit operations when no WU is claimed.
13
+ * Implements graceful degradation: allows operations if LumenFlow
14
+ * state cannot be determined.
15
+ */
16
+ export function generateRequireWuScript() {
17
+ // Note: Shell variable escapes (\$, \") are intentional for the generated bash script
18
+ /* eslint-disable no-useless-escape */
19
+ return `#!/bin/bash
20
+ #
21
+ # require-wu.sh (WU-1367)
22
+ #
23
+ # PreToolUse hook that blocks Write/Edit when no WU is claimed.
24
+ # Graceful degradation: allows operations if state cannot be determined.
25
+ #
26
+ # Exit codes:
27
+ # 0 = Allow operation
28
+ # 2 = Block operation (stderr shown to Claude as guidance)
29
+ #
30
+
31
+ set -euo pipefail
32
+
33
+ SCRIPT_DIR="$(cd "$(dirname "\${BASH_SOURCE[0]}")" && pwd)"
34
+
35
+ # Graceful degradation
36
+ graceful_allow() {
37
+ local reason="\$1"
38
+ exit 0
39
+ }
40
+
41
+ if [[ -z "\${CLAUDE_PROJECT_DIR:-}" ]]; then
42
+ graceful_allow "CLAUDE_PROJECT_DIR not set"
43
+ fi
44
+
45
+ MAIN_REPO_PATH="\$CLAUDE_PROJECT_DIR"
46
+ WORKTREES_DIR="\${MAIN_REPO_PATH}/worktrees"
47
+ LUMENFLOW_DIR="\${MAIN_REPO_PATH}/.lumenflow"
48
+ STATE_FILE="\${LUMENFLOW_DIR}/state/wu-events.jsonl"
49
+
50
+ # Check if LumenFlow is configured
51
+ if [[ ! -d "\$LUMENFLOW_DIR" ]]; then
52
+ graceful_allow "No .lumenflow directory"
53
+ fi
54
+
55
+ # Read JSON input
56
+ INPUT=\$(cat)
57
+ if [[ -z "\$INPUT" ]]; then
58
+ graceful_allow "No input"
59
+ fi
60
+
61
+ # Parse JSON
62
+ TMPFILE=\$(mktemp)
63
+ echo "\$INPUT" > "\$TMPFILE"
64
+
65
+ TOOL_NAME=\$(python3 -c "
66
+ import json
67
+ try:
68
+ with open('\$TMPFILE', 'r') as f:
69
+ data = json.load(f)
70
+ print(data.get('tool_name', ''))
71
+ except:
72
+ print('')
73
+ " 2>/dev/null || echo "")
74
+
75
+ rm -f "\$TMPFILE"
76
+
77
+ # Only check Write and Edit
78
+ if [[ "\$TOOL_NAME" != "Write" && "\$TOOL_NAME" != "Edit" ]]; then
79
+ exit 0
80
+ fi
81
+
82
+ # Check for active worktrees (indicates claimed WU)
83
+ if [[ -d "\$WORKTREES_DIR" ]]; then
84
+ WORKTREE_COUNT=\$(find "\$WORKTREES_DIR" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | wc -l)
85
+ if [[ "\$WORKTREE_COUNT" -gt 0 ]]; then
86
+ exit 0 # Has worktrees = has claimed WU
87
+ fi
88
+ fi
89
+
90
+ # Check state file for in_progress WUs
91
+ if [[ -f "\$STATE_FILE" ]]; then
92
+ # Look for UnsafeAny WU with in_progress status
93
+ if grep -q '"status":"in_progress"' "\$STATE_FILE" 2>/dev/null; then
94
+ exit 0 # Has in_progress WU
95
+ fi
96
+ fi
97
+
98
+ # No claimed WU found
99
+ echo "" >&2
100
+ echo "=== WU Enforcement ===" >&2
101
+ echo "" >&2
102
+ echo "BLOCKED: \$TOOL_NAME without claimed WU" >&2
103
+ echo "" >&2
104
+ echo "You must claim a WU before making edits:" >&2
105
+ echo " pnpm wu:claim --id WU-XXXX --lane <Lane>" >&2
106
+ echo " cd worktrees/<lane>-wu-xxxx" >&2
107
+ echo "" >&2
108
+ echo "Or create a new WU:" >&2
109
+ echo " pnpm wu:create --lane <Lane> --title \"Description\"" >&2
110
+ echo "" >&2
111
+ echo "See: LUMENFLOW.md for workflow details" >&2
112
+ echo "======================" >&2
113
+ exit 2
114
+ `;
115
+ /* eslint-enable no-useless-escape */
116
+ }
117
+ //# sourceMappingURL=require-wu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-wu.js","sourceRoot":"","sources":["../../../src/hooks/generators/require-wu.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;GAKG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB;IACrC,sFAAsF;IACtF,sCAAsC;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+FR,CAAC;IACA,qCAAqC;AACvC,CAAC"}
@@ -0,0 +1,103 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * @file generators/session-start-recovery.ts
5
+ * Generate the session-start-recovery.sh hook script content (WU-1394).
6
+ *
7
+ * Extracted from enforcement-generator.ts by WU-1645.
8
+ */
9
+ /**
10
+ * Generate the session-start-recovery.sh hook script content.
11
+ *
12
+ * This SessionStart hook checks for pending recovery files written by
13
+ * pre-compact-checkpoint.sh and displays the recovery context to the agent.
14
+ * After displaying, the recovery file is deleted (one-time recovery).
15
+ *
16
+ * Part of WU-1394: Durable recovery pattern for context preservation.
17
+ */
18
+ export function generateSessionStartRecoveryScript() {
19
+ // Note: Shell variable escapes (\$, \") are intentional for the generated bash script
20
+ /* eslint-disable no-useless-escape */
21
+ return `#!/bin/bash
22
+ #
23
+ # session-start-recovery.sh
24
+ #
25
+ # SessionStart hook - check for pending recovery and inject context (WU-1390)
26
+ #
27
+ # Fires after session start (on compact, resume, or clear) to:
28
+ # 1. Check for recovery-pending-*.md files written by pre-compact-checkpoint.sh
29
+ # 2. Display the recovery context to the agent
30
+ # 3. Remove the recovery file (one-time recovery)
31
+ #
32
+ # This completes the durable recovery pattern:
33
+ # PreCompact writes file → SessionStart reads and deletes it
34
+ #
35
+ # Exit codes:
36
+ # 0 = Always allow (informational hook)
37
+ #
38
+
39
+ set -euo pipefail
40
+
41
+ # Derive repo paths from CLAUDE_PROJECT_DIR
42
+ if [[ -n "\${CLAUDE_PROJECT_DIR:-}" ]]; then
43
+ REPO_PATH="\$CLAUDE_PROJECT_DIR"
44
+ else
45
+ REPO_PATH=\$(git rev-parse --show-toplevel 2>/dev/null || echo "")
46
+ if [[ -z "\$REPO_PATH" ]]; then
47
+ exit 0
48
+ fi
49
+ fi
50
+
51
+ RECOVERY_DIR="\${REPO_PATH}/.lumenflow/state"
52
+
53
+ # Check if recovery directory exists
54
+ if [[ ! -d "\$RECOVERY_DIR" ]]; then
55
+ exit 0
56
+ fi
57
+
58
+ # Find UnsafeAny pending recovery files
59
+ FOUND_RECOVERY=false
60
+
61
+ for recovery_file in "\$RECOVERY_DIR"/recovery-pending-*.md; do
62
+ # Check if glob matched UnsafeAny files (bash glob returns literal pattern if no match)
63
+ [[ -f "\$recovery_file" ]] || continue
64
+
65
+ FOUND_RECOVERY=true
66
+
67
+ # Extract WU ID from filename for display
68
+ WU_ID=\$(basename "\$recovery_file" | sed 's/recovery-pending-\\(.*\\)\\.md/\\1/')
69
+
70
+ echo "" >&2
71
+ echo "═══════════════════════════════════════════════════════" >&2
72
+ echo "⚠️ POST-COMPACTION RECOVERY DETECTED" >&2
73
+ echo "═══════════════════════════════════════════════════════" >&2
74
+ echo "" >&2
75
+
76
+ # Display the recovery context
77
+ cat "\$recovery_file" >&2
78
+
79
+ echo "" >&2
80
+ echo "═══════════════════════════════════════════════════════" >&2
81
+ echo "" >&2
82
+
83
+ # Remove after displaying (one-time recovery)
84
+ rm -f "\$recovery_file"
85
+ done
86
+
87
+ # Additional context if recovery was displayed
88
+ if [[ "\$FOUND_RECOVERY" == "true" ]]; then
89
+ echo "IMPORTANT: Your context was compacted. Review the recovery info above." >&2
90
+ echo "Recommended: Run 'pnpm wu:brief --id \$WU_ID --client \${LUMENFLOW_CLIENT:-claude-code}' for fresh full context." >&2
91
+ echo "" >&2
92
+ fi
93
+
94
+ # WU-1473: Surface unread coordination signals for non-worktree orchestrators
95
+ # Even without recovery files, agents benefit from seeing recent inbox activity
96
+ # This supports orchestrators running from main checkout (not in a worktree)
97
+ pnpm mem:inbox --since 1h --unread-only --quiet 2>/dev/null >&2 || true
98
+
99
+ exit 0
100
+ `;
101
+ /* eslint-enable no-useless-escape */
102
+ }
103
+ //# sourceMappingURL=session-start-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-start-recovery.js","sourceRoot":"","sources":["../../../src/hooks/generators/session-start-recovery.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,kCAAkC;IAChD,sFAAsF;IACtF,sCAAsC;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+ER,CAAC;IACA,qCAAqC;AACvC,CAAC"}
@@ -0,0 +1,54 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * @file generators/signal-utils.ts
5
+ * Signal surfacing and marking utilities for enforcement hooks (WU-1473).
6
+ *
7
+ * Extracted from enforcement-generator.ts by WU-1645.
8
+ */
9
+ import { loadSignals, markSignalsAsRead } from '@lumenflow/memory/signal';
10
+ /**
11
+ * WU-1473: Surface unread signals for agent consumption during claim/start.
12
+ *
13
+ * Loads all unread signals from the memory layer and returns them for display.
14
+ * Implements fail-open: UnsafeAny error returns an empty result without throwing.
15
+ *
16
+ * @param baseDir - Project base directory
17
+ * @returns Unread signal summary (never throws)
18
+ */
19
+ export async function surfaceUnreadSignals(baseDir) {
20
+ try {
21
+ const signals = await loadSignals(baseDir, { unreadOnly: true });
22
+ return { count: signals.length, signals };
23
+ }
24
+ catch {
25
+ // WU-1473 AC4: Fail-open - memory errors never block lifecycle commands
26
+ return { count: 0, signals: [] };
27
+ }
28
+ }
29
+ /**
30
+ * WU-1473: Mark all signals for a completed WU as read using receipt-aware behavior.
31
+ *
32
+ * Loads signals scoped to the given WU ID and marks UnsafeAny unread ones as read
33
+ * by appending receipts (WU-1472 pattern). Does not rewrite signals.jsonl.
34
+ * Implements fail-open: UnsafeAny error returns zero count without throwing.
35
+ *
36
+ * @param baseDir - Project base directory
37
+ * @param wuId - WU ID whose signals should be marked as read
38
+ * @returns Result with count of signals marked (never throws)
39
+ */
40
+ export async function markCompletedWUSignalsAsRead(baseDir, wuId) {
41
+ try {
42
+ const signals = await loadSignals(baseDir, { wuId, unreadOnly: true });
43
+ if (signals.length === 0) {
44
+ return { markedCount: 0 };
45
+ }
46
+ const signalIds = signals.map((sig) => sig.id);
47
+ return await markSignalsAsRead(baseDir, signalIds);
48
+ }
49
+ catch {
50
+ // WU-1473 AC4: Fail-open - memory errors never block lifecycle commands
51
+ return { markedCount: 0 };
52
+ }
53
+ }
54
+ //# sourceMappingURL=signal-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-utils.js","sourceRoot":"","sources":["../../../src/hooks/generators/signal-utils.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAyB1E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAe;IACxD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,OAAe,EACf,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QAC5B,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/C,OAAO,MAAM,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC"}