codesift-mcp 0.5.24 → 0.5.27

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 (217) hide show
  1. package/README.md +4 -4
  2. package/dist/cli/commands.d.ts.map +1 -1
  3. package/dist/cli/commands.js +28 -0
  4. package/dist/cli/commands.js.map +1 -1
  5. package/dist/cli/help.js +1 -1
  6. package/dist/cli/help.js.map +1 -1
  7. package/dist/cli/hooks.d.ts +4 -0
  8. package/dist/cli/hooks.d.ts.map +1 -1
  9. package/dist/cli/hooks.js +15 -4
  10. package/dist/cli/hooks.js.map +1 -1
  11. package/dist/cli/journal-commands.d.ts +9 -0
  12. package/dist/cli/journal-commands.d.ts.map +1 -0
  13. package/dist/cli/journal-commands.js +160 -0
  14. package/dist/cli/journal-commands.js.map +1 -0
  15. package/dist/cli/wiki-commands.d.ts.map +1 -1
  16. package/dist/cli/wiki-commands.js +5 -0
  17. package/dist/cli/wiki-commands.js.map +1 -1
  18. package/dist/instructions.d.ts +1 -1
  19. package/dist/instructions.d.ts.map +1 -1
  20. package/dist/instructions.js +41 -47
  21. package/dist/instructions.js.map +1 -1
  22. package/dist/parser/extractors/_shared.d.ts +2 -0
  23. package/dist/parser/extractors/_shared.d.ts.map +1 -1
  24. package/dist/parser/extractors/_shared.js +4 -0
  25. package/dist/parser/extractors/_shared.js.map +1 -1
  26. package/dist/parser/extractors/typescript.d.ts.map +1 -1
  27. package/dist/parser/extractors/typescript.js +606 -31
  28. package/dist/parser/extractors/typescript.js.map +1 -1
  29. package/dist/parser/parse-worker.d.ts +2 -0
  30. package/dist/parser/parse-worker.d.ts.map +1 -0
  31. package/dist/parser/parse-worker.js +47 -0
  32. package/dist/parser/parse-worker.js.map +1 -0
  33. package/dist/parser/parser-manager.d.ts +10 -1
  34. package/dist/parser/parser-manager.d.ts.map +1 -1
  35. package/dist/parser/parser-manager.js +40 -2
  36. package/dist/parser/parser-manager.js.map +1 -1
  37. package/dist/parser/parser-pool.d.ts +31 -0
  38. package/dist/parser/parser-pool.d.ts.map +1 -0
  39. package/dist/parser/parser-pool.js +211 -0
  40. package/dist/parser/parser-pool.js.map +1 -0
  41. package/dist/register-tools.d.ts.map +1 -1
  42. package/dist/register-tools.js +382 -35
  43. package/dist/register-tools.js.map +1 -1
  44. package/dist/retrieval/codebase-retrieval.d.ts.map +1 -1
  45. package/dist/retrieval/codebase-retrieval.js +9 -1
  46. package/dist/retrieval/codebase-retrieval.js.map +1 -1
  47. package/dist/search/chunker.d.ts +1 -0
  48. package/dist/search/chunker.d.ts.map +1 -1
  49. package/dist/search/chunker.js +8 -1
  50. package/dist/search/chunker.js.map +1 -1
  51. package/dist/server-helpers.d.ts +27 -0
  52. package/dist/server-helpers.d.ts.map +1 -1
  53. package/dist/server-helpers.js +90 -9
  54. package/dist/server-helpers.js.map +1 -1
  55. package/dist/server.js +31 -0
  56. package/dist/server.js.map +1 -1
  57. package/dist/storage/index-store.d.ts +41 -4
  58. package/dist/storage/index-store.d.ts.map +1 -1
  59. package/dist/storage/index-store.js +89 -6
  60. package/dist/storage/index-store.js.map +1 -1
  61. package/dist/storage/watcher.d.ts +33 -6
  62. package/dist/storage/watcher.d.ts.map +1 -1
  63. package/dist/storage/watcher.js +73 -34
  64. package/dist/storage/watcher.js.map +1 -1
  65. package/dist/storage/workspace-resolver.d.ts +15 -0
  66. package/dist/storage/workspace-resolver.d.ts.map +1 -0
  67. package/dist/storage/workspace-resolver.js +130 -0
  68. package/dist/storage/workspace-resolver.js.map +1 -0
  69. package/dist/tools/_helpers.d.ts +37 -0
  70. package/dist/tools/_helpers.d.ts.map +1 -0
  71. package/dist/tools/_helpers.js +31 -0
  72. package/dist/tools/_helpers.js.map +1 -0
  73. package/dist/tools/constant-resolution-tools.d.ts +8 -0
  74. package/dist/tools/constant-resolution-tools.d.ts.map +1 -0
  75. package/dist/tools/constant-resolution-tools.js +68 -0
  76. package/dist/tools/constant-resolution-tools.js.map +1 -0
  77. package/dist/tools/graph-tools.d.ts +27 -5
  78. package/dist/tools/graph-tools.d.ts.map +1 -1
  79. package/dist/tools/graph-tools.js +141 -18
  80. package/dist/tools/graph-tools.js.map +1 -1
  81. package/dist/tools/hotspot-tools.d.ts +6 -0
  82. package/dist/tools/hotspot-tools.d.ts.map +1 -1
  83. package/dist/tools/hotspot-tools.js +48 -8
  84. package/dist/tools/hotspot-tools.js.map +1 -1
  85. package/dist/tools/impact-tools.d.ts.map +1 -1
  86. package/dist/tools/impact-tools.js +9 -2
  87. package/dist/tools/impact-tools.js.map +1 -1
  88. package/dist/tools/index-tools.d.ts +15 -1
  89. package/dist/tools/index-tools.d.ts.map +1 -1
  90. package/dist/tools/index-tools.js +161 -16
  91. package/dist/tools/index-tools.js.map +1 -1
  92. package/dist/tools/journal-generator-helpers.d.ts +55 -0
  93. package/dist/tools/journal-generator-helpers.d.ts.map +1 -0
  94. package/dist/tools/journal-generator-helpers.js +250 -0
  95. package/dist/tools/journal-generator-helpers.js.map +1 -0
  96. package/dist/tools/journal-generator.d.ts +48 -0
  97. package/dist/tools/journal-generator.d.ts.map +1 -0
  98. package/dist/tools/journal-generator.js +204 -0
  99. package/dist/tools/journal-generator.js.map +1 -0
  100. package/dist/tools/journal-git-client.d.ts +20 -0
  101. package/dist/tools/journal-git-client.d.ts.map +1 -0
  102. package/dist/tools/journal-git-client.js +57 -0
  103. package/dist/tools/journal-git-client.js.map +1 -0
  104. package/dist/tools/journal-llm-client.d.ts +57 -0
  105. package/dist/tools/journal-llm-client.d.ts.map +1 -0
  106. package/dist/tools/journal-llm-client.js +175 -0
  107. package/dist/tools/journal-llm-client.js.map +1 -0
  108. package/dist/tools/journal-migrator.d.ts +22 -0
  109. package/dist/tools/journal-migrator.d.ts.map +1 -0
  110. package/dist/tools/journal-migrator.js +183 -0
  111. package/dist/tools/journal-migrator.js.map +1 -0
  112. package/dist/tools/journal-phase-detector.d.ts +26 -0
  113. package/dist/tools/journal-phase-detector.d.ts.map +1 -0
  114. package/dist/tools/journal-phase-detector.js +126 -0
  115. package/dist/tools/journal-phase-detector.js.map +1 -0
  116. package/dist/tools/journal-sentinel.d.ts +15 -0
  117. package/dist/tools/journal-sentinel.d.ts.map +1 -0
  118. package/dist/tools/journal-sentinel.js +110 -0
  119. package/dist/tools/journal-sentinel.js.map +1 -0
  120. package/dist/tools/journal-templates.d.ts +28 -0
  121. package/dist/tools/journal-templates.d.ts.map +1 -0
  122. package/dist/tools/journal-templates.js +93 -0
  123. package/dist/tools/journal-templates.js.map +1 -0
  124. package/dist/tools/pattern-tools.d.ts +2 -0
  125. package/dist/tools/pattern-tools.d.ts.map +1 -1
  126. package/dist/tools/pattern-tools.js +73 -0
  127. package/dist/tools/pattern-tools.js.map +1 -1
  128. package/dist/tools/perf-tools.d.ts.map +1 -1
  129. package/dist/tools/perf-tools.js +6 -0
  130. package/dist/tools/perf-tools.js.map +1 -1
  131. package/dist/tools/plan-turn-tools.d.ts.map +1 -1
  132. package/dist/tools/plan-turn-tools.js +38 -2
  133. package/dist/tools/plan-turn-tools.js.map +1 -1
  134. package/dist/tools/project-tools.d.ts +6 -0
  135. package/dist/tools/project-tools.d.ts.map +1 -1
  136. package/dist/tools/project-tools.js +65 -25
  137. package/dist/tools/project-tools.js.map +1 -1
  138. package/dist/tools/python-constants-tools.d.ts +6 -0
  139. package/dist/tools/python-constants-tools.d.ts.map +1 -1
  140. package/dist/tools/python-constants-tools.js.map +1 -1
  141. package/dist/tools/react-tools.d.ts +44 -1
  142. package/dist/tools/react-tools.d.ts.map +1 -1
  143. package/dist/tools/react-tools.js +142 -9
  144. package/dist/tools/react-tools.js.map +1 -1
  145. package/dist/tools/search-tools.d.ts.map +1 -1
  146. package/dist/tools/search-tools.js +21 -2
  147. package/dist/tools/search-tools.js.map +1 -1
  148. package/dist/tools/status-tools.d.ts +10 -0
  149. package/dist/tools/status-tools.d.ts.map +1 -1
  150. package/dist/tools/status-tools.js +53 -2
  151. package/dist/tools/status-tools.js.map +1 -1
  152. package/dist/tools/symbol-tools.d.ts +13 -0
  153. package/dist/tools/symbol-tools.d.ts.map +1 -1
  154. package/dist/tools/symbol-tools.js +38 -0
  155. package/dist/tools/symbol-tools.js.map +1 -1
  156. package/dist/tools/typescript-constants-tools.d.ts +6 -0
  157. package/dist/tools/typescript-constants-tools.d.ts.map +1 -0
  158. package/dist/tools/typescript-constants-tools.js +687 -0
  159. package/dist/tools/typescript-constants-tools.js.map +1 -0
  160. package/dist/tools/wiki-hub-ranker.d.ts +36 -0
  161. package/dist/tools/wiki-hub-ranker.d.ts.map +1 -0
  162. package/dist/tools/wiki-hub-ranker.js +72 -0
  163. package/dist/tools/wiki-hub-ranker.js.map +1 -0
  164. package/dist/tools/wiki-lint.d.ts +7 -2
  165. package/dist/tools/wiki-lint.d.ts.map +1 -1
  166. package/dist/tools/wiki-lint.js +73 -1
  167. package/dist/tools/wiki-lint.js.map +1 -1
  168. package/dist/tools/wiki-manifest.d.ts +129 -21
  169. package/dist/tools/wiki-manifest.d.ts.map +1 -1
  170. package/dist/tools/wiki-manifest.js +16 -9
  171. package/dist/tools/wiki-manifest.js.map +1 -1
  172. package/dist/tools/wiki-module-builder.d.ts +42 -0
  173. package/dist/tools/wiki-module-builder.d.ts.map +1 -0
  174. package/dist/tools/wiki-module-builder.js +449 -0
  175. package/dist/tools/wiki-module-builder.js.map +1 -0
  176. package/dist/tools/wiki-overview-sources.d.ts +26 -0
  177. package/dist/tools/wiki-overview-sources.d.ts.map +1 -0
  178. package/dist/tools/wiki-overview-sources.js +128 -0
  179. package/dist/tools/wiki-overview-sources.js.map +1 -0
  180. package/dist/tools/wiki-page-generators.d.ts +19 -3
  181. package/dist/tools/wiki-page-generators.d.ts.map +1 -1
  182. package/dist/tools/wiki-page-generators.js +156 -22
  183. package/dist/tools/wiki-page-generators.js.map +1 -1
  184. package/dist/tools/wiki-tools.d.ts +20 -0
  185. package/dist/tools/wiki-tools.d.ts.map +1 -1
  186. package/dist/tools/wiki-tools.js +181 -29
  187. package/dist/tools/wiki-tools.js.map +1 -1
  188. package/dist/tools/workspace-scope-helper.d.ts +21 -0
  189. package/dist/tools/workspace-scope-helper.d.ts.map +1 -0
  190. package/dist/tools/workspace-scope-helper.js +50 -0
  191. package/dist/tools/workspace-scope-helper.js.map +1 -0
  192. package/dist/tools/workspace-tools.d.ts +74 -0
  193. package/dist/tools/workspace-tools.d.ts.map +1 -0
  194. package/dist/tools/workspace-tools.js +366 -0
  195. package/dist/tools/workspace-tools.js.map +1 -0
  196. package/dist/types.d.ts +65 -0
  197. package/dist/types.d.ts.map +1 -1
  198. package/dist/utils/import-graph.d.ts +27 -0
  199. package/dist/utils/import-graph.d.ts.map +1 -1
  200. package/dist/utils/import-graph.js +331 -8
  201. package/dist/utils/import-graph.js.map +1 -1
  202. package/dist/utils/ts-imports.d.ts +30 -0
  203. package/dist/utils/ts-imports.d.ts.map +1 -0
  204. package/dist/utils/ts-imports.js +168 -0
  205. package/dist/utils/ts-imports.js.map +1 -0
  206. package/dist/utils/tsconfig-paths.d.ts +59 -0
  207. package/dist/utils/tsconfig-paths.d.ts.map +1 -0
  208. package/dist/utils/tsconfig-paths.js +176 -0
  209. package/dist/utils/tsconfig-paths.js.map +1 -0
  210. package/dist/utils/walk.d.ts.map +1 -1
  211. package/dist/utils/walk.js +1 -0
  212. package/dist/utils/walk.js.map +1 -1
  213. package/package.json +13 -3
  214. package/rules/codesift.md +19 -2
  215. package/rules/codesift.mdc +2 -2
  216. package/rules/codex.md +13 -2
  217. package/rules/gemini.md +13 -2
@@ -0,0 +1,250 @@
1
+ import { readFile, writeFile, unlink, rename } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { randomUUID } from "node:crypto";
4
+ import { execFileSync } from "node:child_process";
5
+ import { parseSentinelBlocks } from "./journal-sentinel.js";
6
+ const SAFE_SLUG_RE = /^[a-z0-9][a-z0-9-]{0,63}$/;
7
+ export function assertSafeSlug(slug) {
8
+ if (!SAFE_SLUG_RE.test(slug))
9
+ throw new Error(`Unsafe journal slug "${slug}" (must match ${SAFE_SLUG_RE.source})`);
10
+ }
11
+ export class BlockChangedError extends Error {
12
+ blockKind;
13
+ constructor(kind) {
14
+ super(`Block ${kind} changed since read`);
15
+ this.name = "BlockChangedError";
16
+ this.blockKind = kind;
17
+ }
18
+ }
19
+ export class BudgetExceededError extends Error {
20
+ file;
21
+ sizeBytes;
22
+ limit;
23
+ constructor(file, sizeBytes, limit) {
24
+ super(`${file} is ${sizeBytes} bytes, exceeds ${limit}`);
25
+ this.name = "BudgetExceededError";
26
+ this.file = file;
27
+ this.sizeBytes = sizeBytes;
28
+ this.limit = limit;
29
+ }
30
+ }
31
+ export const BUDGETS = { "rollup.md": 12_000, "overview.md": 6_000 };
32
+ export function assertBlockUnchanged(fileContent, blockKind, preHash) {
33
+ const block = parseSentinelBlocks(fileContent).find((b) => b.kind === blockKind);
34
+ if (!block || block.hash !== preHash)
35
+ throw new BlockChangedError(blockKind);
36
+ }
37
+ export async function acquireLock(lockPath) {
38
+ await writeFile(lockPath, String(process.pid), { flag: "wx" });
39
+ }
40
+ export async function releaseLock(lockPath) {
41
+ try {
42
+ await unlink(lockPath);
43
+ }
44
+ catch { /* best-effort */ }
45
+ }
46
+ export async function readCheckpoint(path) {
47
+ try {
48
+ return JSON.parse(await readFile(path, "utf-8"));
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ }
54
+ export async function writeCheckpoint(path, state) {
55
+ await writeFile(path, JSON.stringify(state, null, 2), "utf-8");
56
+ }
57
+ export function enforceBudgets(files) {
58
+ for (const [name, content] of Object.entries(files)) {
59
+ const limit = BUDGETS[name];
60
+ if (limit === undefined)
61
+ continue;
62
+ const size = Buffer.byteLength(content, "utf-8");
63
+ if (size > limit)
64
+ throw new BudgetExceededError(name, size, limit);
65
+ }
66
+ }
67
+ export async function anyFileHasTodo(dir, files) {
68
+ for (const f of files) {
69
+ if (!f.endsWith(".md"))
70
+ continue;
71
+ try {
72
+ if ((await readFile(join(dir, f), "utf-8")).includes("TODO:"))
73
+ return true;
74
+ }
75
+ catch { /* ignore */ }
76
+ }
77
+ return false;
78
+ }
79
+ export async function readPhaseBlockHash(filePath, kind) {
80
+ try {
81
+ return parseSentinelBlocks(await readFile(filePath, "utf-8")).find((b) => b.kind === kind)?.hash;
82
+ }
83
+ catch {
84
+ return undefined;
85
+ }
86
+ }
87
+ // ─── Delta filtering (Phase A) ──────────────────────────────────────────────
88
+ function resolveSinceCutoff(since, cwd) {
89
+ const direct = Date.parse(since);
90
+ if (!Number.isNaN(direct))
91
+ return direct;
92
+ try {
93
+ const raw = execFileSync("git", ["log", "-1", "--format=%aI", "--since", since], { cwd, encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"] }).trim();
94
+ const parsed = Date.parse(raw);
95
+ if (!Number.isNaN(parsed))
96
+ return parsed;
97
+ }
98
+ catch { /* fall through */ }
99
+ return Number.NEGATIVE_INFINITY;
100
+ }
101
+ export function filterPhasesBySince(phases, since, cwd = process.cwd()) {
102
+ const cutoff = resolveSinceCutoff(since, cwd);
103
+ if (cutoff === Number.NEGATIVE_INFINITY)
104
+ return phases;
105
+ return phases.filter((p) => { const t = Date.parse(p.endDate); return !Number.isNaN(t) && t >= cutoff; });
106
+ }
107
+ export function filterPhasesByScope(phases, scope) {
108
+ if (scope.phase)
109
+ return phases.filter((p) => p.slug === scope.phase);
110
+ if (!scope.entry)
111
+ throw new Error("filterPhasesByScope requires entry or phase");
112
+ const e = scope.entry;
113
+ return phases.filter((p) => p.commits.some((c) => c.date.startsWith(e)) || (e >= p.startDate && e <= p.endDate));
114
+ }
115
+ const JOURNAL_KINDS = ["journal-phase", "journal-overview", "journal-rollup"];
116
+ const isJournalPage = (p) => JOURNAL_KINDS.includes(p.type);
117
+ /** True when !force AND manifest has a journal-* page w/ matching slug whose
118
+ * journal_content_hashes["phase-summary"] equals currentHash. */
119
+ export function shouldSkipPhaseByHash(slug, currentHash, opts = {}) {
120
+ if (opts.force || !opts.manifest)
121
+ return false;
122
+ const p = opts.manifest.pages.find((x) => x.slug === slug && isJournalPage(x));
123
+ return p?.journal_content_hashes?.["phase-summary"] === currentHash;
124
+ }
125
+ export function buildJournalManifestEntries(phaseWrites, overviewPresent) {
126
+ const entries = [];
127
+ if (overviewPresent)
128
+ entries.push({
129
+ slug: "journal-overview", title: "Journal — Overview", type: "journal-overview",
130
+ file: "journal/overview.md", outbound_links: [], source: "generated",
131
+ });
132
+ for (const w of phaseWrites)
133
+ entries.push({
134
+ slug: w.slug, title: w.title, type: "journal-phase",
135
+ file: w.file, outbound_links: [], source: "generated",
136
+ journal_content_hashes: { "phase-summary": w.hash },
137
+ });
138
+ return entries;
139
+ }
140
+ export function mergeJournalIntoManifest(existing, journalEntries) {
141
+ const base = existing ?? {
142
+ manifest_schema_version: "2.1.0", generated_at: new Date().toISOString(),
143
+ index_hash: "", git_commit: "", pages: [], slug_redirects: {},
144
+ token_estimates: {}, file_to_community: {}, degraded: false,
145
+ };
146
+ const kept = base.pages.filter((p) => !isJournalPage(p));
147
+ return { ...base, pages: [...kept, ...journalEntries], generated_at: new Date().toISOString() };
148
+ }
149
+ export function renderJournalSectionMd(entries) {
150
+ const overview = entries.find((e) => e.type === "journal-overview");
151
+ const phases = entries.filter((e) => e.type === "journal-phase").slice()
152
+ .sort((a, b) => a.slug.localeCompare(b.slug));
153
+ const lines = ["## journal", "",
154
+ "Weekly phase narratives auto-registered from journal-init / journal-append.", ""];
155
+ const bullet = (e, tail) => `- [${e.file.replace(/\.md$/, "")}](${e.file}) — ${tail}`;
156
+ if (overview)
157
+ lines.push(bullet(overview, "At a glance / Themes / Sources"));
158
+ for (const p of phases)
159
+ lines.push(bullet(p, p.title));
160
+ lines.push("");
161
+ return lines.join("\n");
162
+ }
163
+ export function insertJournalSectionIntoIndex(indexMd, sectionMd) {
164
+ const section = sectionMd.endsWith("\n") ? sectionMd : sectionMd + "\n";
165
+ const lines = indexMd.split("\n");
166
+ const sandwich = (startIdx, endIdx) => {
167
+ const before = lines.slice(0, startIdx).join("\n").replace(/\n+$/, "");
168
+ const after = lines.slice(endIdx).join("\n").replace(/^\n+/, "");
169
+ return (before.length > 0 ? before + "\n\n" : "") + section + (after.length > 0 ? "\n" + after : "");
170
+ };
171
+ const jIdx = lines.findIndex((l) => /^## journal\s*$/.test(l));
172
+ if (jIdx >= 0) {
173
+ let end = lines.length;
174
+ for (let i = jIdx + 1; i < lines.length; i++)
175
+ if (/^## /.test(lines[i])) {
176
+ end = i;
177
+ break;
178
+ }
179
+ return sandwich(jIdx, end);
180
+ }
181
+ const hubsIdx = lines.findIndex((l) => /^## hubs\s*$/.test(l));
182
+ if (hubsIdx >= 0)
183
+ return sandwich(hubsIdx, hubsIdx);
184
+ const trimmed = indexMd.replace(/\n+$/, "");
185
+ return (trimmed.length > 0 ? trimmed + "\n\n" : "") + section;
186
+ }
187
+ export async function readManifestIfExists(path) {
188
+ try {
189
+ return JSON.parse(await readFile(path, "utf-8"));
190
+ }
191
+ catch {
192
+ return null;
193
+ }
194
+ }
195
+ /** Atomic write with TOCTOU guard: re-read + hash-check before tmp→rename. */
196
+ export async function writePhaseAtomic(filePath, content, preHash, force) {
197
+ if (preHash !== undefined) {
198
+ let latest = "";
199
+ try {
200
+ latest = await readFile(filePath, "utf-8");
201
+ }
202
+ catch { /* new file */ }
203
+ try {
204
+ assertBlockUnchanged(latest, "phase-summary", preHash);
205
+ }
206
+ catch (err) {
207
+ if (!(err instanceof BlockChangedError))
208
+ throw err;
209
+ if (!force)
210
+ throw err;
211
+ console.warn("WARN journal: forced overwrite");
212
+ }
213
+ }
214
+ const tmp = `${filePath}.${randomUUID()}.tmp`;
215
+ await writeFile(tmp, content, { encoding: "utf-8", flag: "wx" });
216
+ await rename(tmp, filePath);
217
+ }
218
+ // ─── Phase E: overview refresh helpers (pure functions) ─────────────────────
219
+ const FOUR_BEAT = new Set(["Intent", "Reality", "Significance", "Lessons"]);
220
+ export async function extractPhaseTitle(filePath, fallback) {
221
+ try {
222
+ const content = await readFile(filePath, "utf-8");
223
+ for (const m of content.matchAll(/^## (.+)$/gm)) {
224
+ const title = m[1].trim();
225
+ if (!FOUR_BEAT.has(title))
226
+ return title;
227
+ }
228
+ return fallback;
229
+ }
230
+ catch {
231
+ return fallback;
232
+ }
233
+ }
234
+ export function rewriteOverviewPhasesList(existing, phaseWrites) {
235
+ const listLines = phaseWrites.map((p) => `- [${p.title}](phases/${p.slug}.md)`);
236
+ const section = ["## Phases", "", ...listLines, "", "← back to [wiki index](../index.md)", ""].join("\n");
237
+ const phasesIdx = existing.search(/^## Phases$/m);
238
+ if (phasesIdx !== -1) {
239
+ // Strip from `## Phases` through end-of-file OR next `## ` (not ##Phases itself).
240
+ const after = existing.slice(phasesIdx + "## Phases".length);
241
+ const nextMatch = /\n## /m.exec(after);
242
+ const tailStart = nextMatch ? phasesIdx + "## Phases".length + nextMatch.index + 1 : existing.length;
243
+ return existing.slice(0, phasesIdx) + section + (tailStart < existing.length ? existing.slice(tailStart) : "");
244
+ }
245
+ if (existing.includes("<!-- manual:end migrated-overview -->")) {
246
+ return existing.replace("<!-- manual:end migrated-overview -->", "<!-- manual:end migrated-overview -->\n\n" + section);
247
+ }
248
+ return existing + (existing.endsWith("\n") ? "" : "\n") + "\n" + section;
249
+ }
250
+ //# sourceMappingURL=journal-generator-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-generator-helpers.js","sourceRoot":"","sources":["../../src/tools/journal-generator-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { type PhasePlan } from "./journal-phase-detector.js";
2
+ import { selectProvider } from "./journal-llm-client.js";
3
+ export interface JournalRunOptions {
4
+ cwd: string;
5
+ outputDir: string;
6
+ dryRun?: boolean;
7
+ force?: boolean;
8
+ bulkFill?: boolean;
9
+ checkpointPath?: string;
10
+ lockPath?: string;
11
+ /** gitLog filter — git-relative string like "2 weeks ago" or ISO date. */
12
+ since?: string;
13
+ /** Regenerate only this entry date (YYYY-MM-DD); mutually exclusive with phase. */
14
+ entry?: string;
15
+ /** Regenerate only this phase slug; mutually exclusive with entry. */
16
+ phase?: string;
17
+ }
18
+ export interface JournalRunResult {
19
+ status: "ok" | "planned" | "locked" | "aborted" | "capped" | "skipped";
20
+ phases: Array<{
21
+ slug: string;
22
+ file: string;
23
+ costUsd: number;
24
+ }>;
25
+ reason?: string;
26
+ }
27
+ export interface ProcessContext {
28
+ provider: ReturnType<typeof selectProvider>;
29
+ outputDir: string;
30
+ force: boolean;
31
+ }
32
+ export interface PhaseWriteResult {
33
+ slug: string;
34
+ content: string;
35
+ hash: string;
36
+ costUsd: number;
37
+ }
38
+ /** Seam: per-phase LLM + validation (no fs). Exported for tests. */
39
+ export declare function processPhase(phase: PhasePlan, ctx: ProcessContext): Promise<PhaseWriteResult>;
40
+ export declare function runJournalInit(opts: JournalRunOptions): Promise<JournalRunResult>;
41
+ export declare function runJournalAppend(opts: JournalRunOptions): Promise<JournalRunResult>;
42
+ export declare function runJournalRegenerate(opts: JournalRunOptions): Promise<JournalRunResult>;
43
+ /** Rewrite overview.md / index.md journal section from the current phase files
44
+ * on disk — no LLM, no credentials needed. Preserves the
45
+ * `<!-- manual:begin migrated-overview -->` block in overview.md verbatim,
46
+ * regenerates the Phases list below it from the files in phases/. */
47
+ export declare function refreshOverviewAndRollup(opts: JournalRunOptions): Promise<JournalRunResult>;
48
+ //# sourceMappingURL=journal-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-generator.d.ts","sourceRoot":"","sources":["../../src/tools/journal-generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAwB,MAAM,yBAAyB,CAAC;AAkB/E,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvE,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAWD,oEAAoE;AACpE,wBAAsB,YAAY,CAChC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,GACpC,OAAO,CAAC,gBAAgB,CAAC,CAM3B;AA0HD,wBAAsB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAEvF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMzF;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAQ7F;AAED;;;sEAGsE;AACtE,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2BjG"}
@@ -0,0 +1,204 @@
1
+ import { readdir, readFile, writeFile, mkdir } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { gitLog } from "./journal-git-client.js";
4
+ import { detectPhases } from "./journal-phase-detector.js";
5
+ import { selectProvider, CostCapExceededError } from "./journal-llm-client.js";
6
+ import { buildScaffoldResponse, renderPhaseSummaryPrompt, validateLlmResponse } from "./journal-templates.js";
7
+ import { computeBlockHash } from "./journal-sentinel.js";
8
+ import { BlockChangedError, acquireLock, releaseLock, readCheckpoint, writeCheckpoint, enforceBudgets, anyFileHasTodo, readPhaseBlockHash, writePhaseAtomic, assertSafeSlug, filterPhasesBySince, filterPhasesByScope, buildJournalManifestEntries, mergeJournalIntoManifest, renderJournalSectionMd, insertJournalSectionIntoIndex, readManifestIfExists, shouldSkipPhaseByHash, extractPhaseTitle, rewriteOverviewPhasesList, } from "./journal-generator-helpers.js";
9
+ function applyFilter(phases, filter, cwd) {
10
+ if (!filter)
11
+ return phases;
12
+ if (filter.kind === "since")
13
+ return filterPhasesBySince(phases, filter.value, cwd);
14
+ return filterPhasesByScope(phases, filter.kind === "entry" ? { entry: filter.value } : { phase: filter.value });
15
+ }
16
+ /** Seam: per-phase LLM + validation (no fs). Exported for tests. */
17
+ export async function processPhase(phase, ctx) {
18
+ const prompt = renderPhaseSummaryPrompt(phase);
19
+ const model = process.env["CODESIFT_JOURNAL_MODEL"] ?? "claude-sonnet-4-6";
20
+ const r = await ctx.provider.generate(prompt, { model });
21
+ const content = validateLlmResponse(r.content).ok ? r.content : buildScaffoldResponse(phase);
22
+ return { slug: phase.slug, content, hash: computeBlockHash(content), costUsd: r.costUsd };
23
+ }
24
+ const PLACEHOLDER_COMMIT = {
25
+ sha: "0".repeat(40), date: "2026-04-01T00:00:00Z", authorName: "",
26
+ subject: "feat(init): init", parentShas: [], refs: [],
27
+ };
28
+ async function guardE8(phasesDir, cfg) {
29
+ let existing = [];
30
+ try {
31
+ existing = await readdir(phasesDir);
32
+ }
33
+ catch { /* not created yet */ }
34
+ if (existing.length === 0 || cfg.allowNonEmpty || cfg.bulkFill)
35
+ return null;
36
+ if (await anyFileHasTodo(phasesDir, existing))
37
+ return null;
38
+ return "phases/ is non-empty — use 'journal append' instead, or pass --bulk-fill";
39
+ }
40
+ async function runPipeline(opts, cfg) {
41
+ const journalDir = join(opts.outputDir, "journal");
42
+ const phasesDir = join(journalDir, "phases");
43
+ const lockPath = opts.lockPath ?? join(journalDir, ".init-lock");
44
+ const checkpointPath = opts.checkpointPath ?? join(journalDir, ".checkpoint.json");
45
+ await mkdir(phasesDir, { recursive: true }); // ensure dir exists before lockfile
46
+ try {
47
+ await acquireLock(lockPath);
48
+ }
49
+ catch (err) {
50
+ const e = err;
51
+ if (e.code === "EEXIST")
52
+ return { status: "locked", phases: [], reason: "journal operation already in progress" };
53
+ throw err;
54
+ }
55
+ try {
56
+ const commits = gitLog({ cwd: opts.cwd });
57
+ const allPhases = detectPhases(commits.length > 0 ? commits : [PLACEHOLDER_COMMIT], undefined, { minUnclassifiedCommits: 3 });
58
+ const phases = applyFilter(allPhases, cfg.filter, opts.cwd);
59
+ if (opts.dryRun) {
60
+ return {
61
+ status: "planned",
62
+ phases: phases.map((p) => {
63
+ assertSafeSlug(p.slug);
64
+ return { slug: p.slug, file: join(phasesDir, `${p.slug}.md`), costUsd: 0 };
65
+ }),
66
+ };
67
+ }
68
+ const abortReason = await guardE8(phasesDir, cfg);
69
+ if (abortReason)
70
+ return { status: "aborted", phases: [], reason: abortReason };
71
+ const cp = await readCheckpoint(checkpointPath);
72
+ const completed = new Set(cp?.completed ?? []);
73
+ let runningCost = cp?.costUsd ?? 0;
74
+ const startedAt = cp?.startedAt ?? new Date().toISOString();
75
+ const maxCost = Number(process.env["CODESIFT_JOURNAL_MAX_USD"] ?? 2.0);
76
+ const provider = selectProvider();
77
+ const results = [];
78
+ const phaseWrites = [];
79
+ const manifestPath = join(opts.outputDir, "wiki-manifest.json");
80
+ const existingManifest = await readManifestIfExists(manifestPath);
81
+ for (const phase of phases) {
82
+ assertSafeSlug(phase.slug);
83
+ if (completed.has(phase.slug))
84
+ continue;
85
+ const filePath = join(phasesDir, `${phase.slug}.md`);
86
+ const preHash = await readPhaseBlockHash(filePath, "phase-summary");
87
+ if (preHash !== undefined &&
88
+ shouldSkipPhaseByHash(phase.slug, preHash, { force: cfg.force, manifest: existingManifest })) {
89
+ continue;
90
+ }
91
+ try {
92
+ const r = await processPhase(phase, { provider, outputDir: opts.outputDir, force: cfg.force });
93
+ runningCost += r.costUsd;
94
+ if (runningCost > maxCost)
95
+ throw new CostCapExceededError(runningCost, maxCost);
96
+ enforceBudgets({ [`${phase.slug}.md`]: r.content });
97
+ await writePhaseAtomic(filePath, r.content, preHash, cfg.force);
98
+ completed.add(phase.slug);
99
+ await writeCheckpoint(checkpointPath, { startedAt, completed: [...completed], costUsd: runningCost });
100
+ results.push({ slug: phase.slug, file: filePath, costUsd: r.costUsd });
101
+ phaseWrites.push({
102
+ slug: phase.slug, title: phase.title,
103
+ file: `journal/phases/${phase.slug}.md`, hash: r.hash,
104
+ });
105
+ }
106
+ catch (err) {
107
+ if (err instanceof CostCapExceededError) {
108
+ await writeCheckpoint(checkpointPath, { startedAt, completed: [...completed], costUsd: runningCost });
109
+ return { status: "capped", phases: results, reason: err.message };
110
+ }
111
+ if (err instanceof BlockChangedError) {
112
+ return { status: "aborted", phases: results, reason: err.message };
113
+ }
114
+ throw err;
115
+ }
116
+ }
117
+ if (phaseWrites.length > 0) {
118
+ await updateManifestAndIndex(opts.outputDir, phaseWrites, journalDir);
119
+ }
120
+ return { status: "ok", phases: results };
121
+ }
122
+ finally {
123
+ await releaseLock(lockPath);
124
+ }
125
+ }
126
+ /** Best-effort manifest + index register; failures WARN only (CQ8). */
127
+ async function updateManifestAndIndex(outputDir, phaseWrites, journalDir) {
128
+ const manifestPath = join(outputDir, "wiki-manifest.json");
129
+ const indexPath = join(outputDir, "index.md");
130
+ const overviewPresent = await readFile(join(journalDir, "overview.md"), "utf-8").then(() => true).catch(() => false);
131
+ const entries = buildJournalManifestEntries(phaseWrites, overviewPresent);
132
+ try {
133
+ const merged = mergeJournalIntoManifest(await readManifestIfExists(manifestPath), entries);
134
+ await writeFile(manifestPath, JSON.stringify(merged, null, 2), "utf-8");
135
+ }
136
+ catch (err) {
137
+ console.warn(`WARN journal: could not update wiki-manifest.json (${err.message})`);
138
+ return;
139
+ }
140
+ try {
141
+ const existingIndex = await readFile(indexPath, "utf-8").catch(() => "");
142
+ await writeFile(indexPath, insertJournalSectionIntoIndex(existingIndex, renderJournalSectionMd(entries)), "utf-8");
143
+ }
144
+ catch (err) {
145
+ console.warn(`WARN journal: could not update index.md (${err.message})`);
146
+ }
147
+ }
148
+ export async function runJournalInit(opts) {
149
+ return runPipeline(opts, { force: !!opts.force, bulkFill: !!opts.bulkFill, allowNonEmpty: false });
150
+ }
151
+ export async function runJournalAppend(opts) {
152
+ if (!opts.since)
153
+ return { status: "aborted", phases: [], reason: "runJournalAppend requires options.since" };
154
+ return runPipeline(opts, {
155
+ force: !!opts.force, bulkFill: true, allowNonEmpty: true,
156
+ filter: { kind: "since", value: opts.since },
157
+ });
158
+ }
159
+ export async function runJournalRegenerate(opts) {
160
+ if (!opts.entry && !opts.phase) {
161
+ return { status: "aborted", phases: [], reason: "runJournalRegenerate requires entry or phase" };
162
+ }
163
+ const filter = opts.entry
164
+ ? { kind: "entry", value: opts.entry }
165
+ : { kind: "phase", value: opts.phase };
166
+ return runPipeline(opts, { force: !!opts.force, bulkFill: true, allowNonEmpty: true, filter });
167
+ }
168
+ /** Rewrite overview.md / index.md journal section from the current phase files
169
+ * on disk — no LLM, no credentials needed. Preserves the
170
+ * `<!-- manual:begin migrated-overview -->` block in overview.md verbatim,
171
+ * regenerates the Phases list below it from the files in phases/. */
172
+ export async function refreshOverviewAndRollup(opts) {
173
+ const journalDir = join(opts.outputDir, "journal");
174
+ const phasesDir = join(journalDir, "phases");
175
+ const overviewPath = join(journalDir, "overview.md");
176
+ let phaseFiles = [];
177
+ try {
178
+ phaseFiles = (await readdir(phasesDir)).filter((f) => f.endsWith(".md")).sort();
179
+ }
180
+ catch {
181
+ return { status: "aborted", phases: [], reason: "no phases/ directory" };
182
+ }
183
+ const phaseWrites = [];
184
+ for (const f of phaseFiles) {
185
+ const slug = f.slice(0, -3); // strip .md
186
+ assertSafeSlug(slug);
187
+ const filePath = join(phasesDir, f);
188
+ const hash = (await readPhaseBlockHash(filePath, "phase-summary")) ?? "";
189
+ const title = await extractPhaseTitle(filePath, slug);
190
+ phaseWrites.push({ slug, title, file: `journal/phases/${f}`, hash });
191
+ }
192
+ // Rewrite overview.md preserving the manual block; append/replace the Phases list.
193
+ const existingOverview = await readFile(overviewPath, "utf-8").catch(() => "");
194
+ const updatedOverview = rewriteOverviewPhasesList(existingOverview, phaseWrites);
195
+ try {
196
+ await writeFile(overviewPath, updatedOverview, "utf-8");
197
+ }
198
+ catch (err) {
199
+ console.warn(`WARN journal: could not write overview.md (${err.message})`);
200
+ }
201
+ await updateManifestAndIndex(opts.outputDir, phaseWrites, journalDir);
202
+ return { status: "ok", phases: phaseWrites.map((p) => ({ slug: p.slug, file: join(phasesDir, `${p.slug}.md`), costUsd: 0 })) };
203
+ }
204
+ //# sourceMappingURL=journal-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-generator.js","sourceRoot":"","sources":["../../src/tools/journal-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAkB,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAkB,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAC5E,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EACpF,mBAAmB,EAAE,mBAAmB,EACxC,2BAA2B,EAAE,wBAAwB,EAAE,sBAAsB,EAC7E,6BAA6B,EAAE,oBAAoB,EAAE,qBAAqB,EAC1E,iBAAiB,EAAE,yBAAyB,GAE7C,MAAM,gCAAgC,CAAC;AA4CxC,SAAS,WAAW,CAAC,MAAmB,EAAE,MAA+B,EAAE,GAAW;IACpF,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAC3B,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnF,OAAO,mBAAmB,CAAC,MAAM,EAC/B,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAgB,EAAE,GAAmB;IAErC,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,mBAAmB,CAAC;IAC3E,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7F,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AAC5F,CAAC;AAED,MAAM,kBAAkB,GAAc;IACpC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,EAAE;IACjE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;CACtD,CAAC;AAEF,KAAK,UAAU,OAAO,CAAC,SAAiB,EAAE,GAAc;IACtD,IAAI,QAAQ,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC;QAAC,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;IAC5E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC5E,IAAI,MAAM,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,OAAO,0EAA0E,CAAC;AACpF,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAuB,EAAE,GAAc;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACjE,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAEnF,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAE,oCAAoC;IAClF,IAAI,CAAC;QAAC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAAC,CAAC;IACpC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,CAAC,GAAG,GAA4B,CAAC;QACvC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC;QAClH,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,YAAY,CAC5B,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,EACnD,SAAS,EACT,EAAE,sBAAsB,EAAE,CAAC,EAAE,CAC9B,CAAC;QACF,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACvB,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACvB,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC7E,CAAC,CAAC;aACH,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAClD,IAAI,WAAW;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAE/E,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;QAC/C,IAAI,WAAW,GAAG,EAAE,EAAE,OAAO,IAAI,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,EAAE,EAAE,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,GAAG,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,MAAM,OAAO,GAA2D,EAAE,CAAC;QAC3E,MAAM,WAAW,GAAwB,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;QAChE,MAAM,gBAAgB,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAElE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;YACpE,IAAI,OAAO,KAAK,SAAS;gBACrB,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;gBACjG,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/F,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC;gBACzB,IAAI,WAAW,GAAG,OAAO;oBAAE,MAAM,IAAI,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAChF,cAAc,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpD,MAAM,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;gBAChE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC1B,MAAM,eAAe,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;gBACtG,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACvE,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;oBACpC,IAAI,EAAE,kBAAkB,KAAK,CAAC,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;iBACtD,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;oBACxC,MAAM,eAAe,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;oBACtG,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;gBACpE,CAAC;gBACD,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;oBACrC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;gBACrE,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,KAAK,UAAU,sBAAsB,CACnC,SAAiB,EAAE,WAAgC,EAAE,UAAkB;IAEvE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC9C,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACrH,MAAM,OAAO,GAAG,2BAA2B,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC1E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,wBAAwB,CAAC,MAAM,oBAAoB,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3F,MAAM,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,sDAAuD,GAAa,CAAC,OAAO,GAAG,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACxH,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,MAAM,SAAS,CAAC,SAAS,EAAE,6BAA6B,CAAC,aAAa,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACrH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,4CAA6C,GAAa,CAAC,OAAO,GAAG,CAAC,CAAC;IAAC,CAAC;AACxG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAuB;IAC1D,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAuB;IAC5D,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,yCAAyC,EAAE,CAAC;IAC7G,OAAO,WAAW,CAAC,IAAI,EAAE;QACvB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI;QACxD,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;KAC7C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAuB;IAChE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC;IACnG,CAAC;IACD,MAAM,MAAM,GAAgB,IAAI,CAAC,KAAK;QACpC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;QACtC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAM,EAAE,CAAC;IAC1C,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AACjG,CAAC;AAED;;;sEAGsE;AACtE,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAAuB;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAErD,IAAI,UAAU,GAAa,EAAE,CAAC;IAC9B,IAAI,CAAC;QAAC,UAAU,GAAG,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAAC,CAAC;IACxF,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IAAC,CAAC;IAEnF,MAAM,WAAW,GAAwB,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,YAAY;QAC1C,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,CAAC,MAAM,kBAAkB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;QACzE,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACtD,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,mFAAmF;IACnF,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/E,MAAM,eAAe,GAAG,yBAAyB,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;IACjF,IAAI,CAAC;QAAC,MAAM,SAAS,CAAC,YAAY,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IAChE,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,8CAA+C,GAAa,CAAC,OAAO,GAAG,CAAC,CAAC;IAAC,CAAC;IAEtG,MAAM,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACtE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACjI,CAAC"}
@@ -0,0 +1,20 @@
1
+ export declare const GIT_LOG_FORMAT = "%H%x1F%aI%x1F%an%x1F%s%x1F%P%x1F%D";
2
+ export declare const GIT_TIMEOUT_MS = 10000;
3
+ export interface GitLogOptions {
4
+ /** ISO date or git-relative string like "2 weeks ago" */
5
+ since?: string;
6
+ maxCount?: number;
7
+ cwd?: string;
8
+ }
9
+ export interface GitCommit {
10
+ sha: string;
11
+ /** ISO8601 author date */
12
+ date: string;
13
+ /** Author name only — no email (CQ5 privacy) */
14
+ authorName: string;
15
+ subject: string;
16
+ parentShas: string[];
17
+ refs: string[];
18
+ }
19
+ export declare function gitLog(opts?: GitLogOptions): GitCommit[];
20
+ //# sourceMappingURL=journal-git-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-git-client.d.ts","sourceRoot":"","sources":["../../src/tools/journal-git-client.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,uCAAuC,CAAC;AACnE,eAAO,MAAM,cAAc,QAAS,CAAC;AAErC,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,MAAM,CAAC,IAAI,GAAE,aAAkB,GAAG,SAAS,EAAE,CA2D5D"}
@@ -0,0 +1,57 @@
1
+ import { execFileSync } from "node:child_process";
2
+ export const GIT_LOG_FORMAT = "%H%x1F%aI%x1F%an%x1F%s%x1F%P%x1F%D";
3
+ export const GIT_TIMEOUT_MS = 10_000;
4
+ export function gitLog(opts = {}) {
5
+ const { since, maxCount, cwd } = opts;
6
+ const args = [
7
+ "log",
8
+ `--pretty=format:${GIT_LOG_FORMAT}`,
9
+ "--all",
10
+ ];
11
+ if (maxCount !== undefined) {
12
+ args.push(`--max-count=${maxCount}`);
13
+ }
14
+ if (since !== undefined) {
15
+ args.push(`--since=${since}`);
16
+ }
17
+ let raw;
18
+ try {
19
+ raw = execFileSync("git", args, {
20
+ encoding: "utf-8",
21
+ timeout: GIT_TIMEOUT_MS,
22
+ cwd,
23
+ });
24
+ }
25
+ catch (err) {
26
+ const e = err;
27
+ if (e.status === 128) {
28
+ // Not a git repo or no commits yet — treat as empty history.
29
+ return [];
30
+ }
31
+ throw new Error(`gitLog failed: ${e.message ?? String(err)}`);
32
+ }
33
+ if (!raw.trim())
34
+ return [];
35
+ const commits = [];
36
+ let skipped = 0;
37
+ for (const line of raw.split("\n")) {
38
+ if (!line)
39
+ continue;
40
+ const fields = line.split("\x1F");
41
+ if (fields.length !== 6) {
42
+ skipped++;
43
+ continue;
44
+ }
45
+ const [sha, date, authorName, subject, parentsRaw, refsRaw] = fields;
46
+ commits.push({
47
+ sha, date, authorName, subject,
48
+ parentShas: parentsRaw.split(" ").filter((s) => s.length > 0),
49
+ refs: refsRaw.split(", ").filter((s) => s.length > 0),
50
+ });
51
+ }
52
+ if (skipped > 0) {
53
+ console.warn(`[journal-git-client] skipped ${skipped} malformed log line(s)`);
54
+ }
55
+ return commits;
56
+ }
57
+ //# sourceMappingURL=journal-git-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-git-client.js","sourceRoot":"","sources":["../../src/tools/journal-git-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,MAAM,cAAc,GAAG,oCAAoC,CAAC;AACnE,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AAoBrC,MAAM,UAAU,MAAM,CAAC,OAAsB,EAAE;IAC7C,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEtC,MAAM,IAAI,GAAa;QACrB,KAAK;QACL,mBAAmB,cAAc,EAAE;QACnC,OAAO;KACR,CAAC;IAEF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;YAC9B,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,cAAc;YACvB,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,GAA4C,CAAC;QACvD,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACrB,6DAA6D;YAC7D,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,IAAI,KAAK,CACb,kBAAkB,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7C,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAAC,OAAO,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAEjD,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,GACzD,MAA0D,CAAC;QAE7D,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO;YAC9B,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7D,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SACtD,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,gCAAgC,OAAO,wBAAwB,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}