@maadb/core 0.12.4 → 0.14.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.
- package/README.md +19 -6
- package/dist/backend/adapter.d.ts +1 -1
- package/dist/backend/adapter.d.ts.map +1 -1
- package/dist/backend/sqlite/index.d.ts +1 -1
- package/dist/backend/sqlite/index.d.ts.map +1 -1
- package/dist/backend/sqlite/index.js +42 -6
- package/dist/backend/sqlite/index.js.map +1 -1
- package/dist/backend/sqlite/schema.d.ts +1 -1
- package/dist/backend/sqlite/schema.d.ts.map +1 -1
- package/dist/backend/sqlite/schema.js +4 -1
- package/dist/backend/sqlite/schema.js.map +1 -1
- package/dist/cli/commands/history-mode.d.ts +3 -0
- package/dist/cli/commands/history-mode.d.ts.map +1 -0
- package/dist/cli/commands/history-mode.js +18 -0
- package/dist/cli/commands/history-mode.js.map +1 -0
- package/dist/cli/index.js +6 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/engine/audit.d.ts.map +1 -1
- package/dist/engine/audit.js +11 -4
- package/dist/engine/audit.js.map +1 -1
- package/dist/engine/context.d.ts +6 -3
- package/dist/engine/context.d.ts.map +1 -1
- package/dist/engine/context.js +10 -5
- package/dist/engine/context.js.map +1 -1
- package/dist/engine/index.d.ts +35 -14
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +55 -13
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/journal.d.ts +14 -1
- package/dist/engine/journal.d.ts.map +1 -1
- package/dist/engine/journal.js +63 -4
- package/dist/engine/journal.js.map +1 -1
- package/dist/engine/reads.d.ts +2 -1
- package/dist/engine/reads.d.ts.map +1 -1
- package/dist/engine/reads.js +207 -0
- package/dist/engine/reads.js.map +1 -1
- package/dist/engine/repairs.js +4 -0
- package/dist/engine/repairs.js.map +1 -1
- package/dist/engine/types.d.ts +102 -1
- package/dist/engine/types.d.ts.map +1 -1
- package/dist/engine/types.js +6 -1
- package/dist/engine/types.js.map +1 -1
- package/dist/engine/writes.d.ts.map +1 -1
- package/dist/engine/writes.js +16 -6
- package/dist/engine/writes.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/extractor/objects.d.ts +2 -1
- package/dist/extractor/objects.d.ts.map +1 -1
- package/dist/extractor/objects.js +1 -1
- package/dist/extractor/objects.js.map +1 -1
- package/dist/extractor/relationships.d.ts.map +1 -1
- package/dist/extractor/relationships.js +16 -0
- package/dist/extractor/relationships.js.map +1 -1
- package/dist/git/index.d.ts +1 -1
- package/dist/git/index.d.ts.map +1 -1
- package/dist/git/index.js +8 -4
- package/dist/git/index.js.map +1 -1
- package/dist/history/config.d.ts +18 -0
- package/dist/history/config.d.ts.map +1 -0
- package/dist/history/config.js +109 -0
- package/dist/history/config.js.map +1 -0
- package/dist/history/controller.d.ts +31 -0
- package/dist/history/controller.d.ts.map +1 -0
- package/dist/history/controller.js +316 -0
- package/dist/history/controller.js.map +1 -0
- package/dist/history/types.d.ts +58 -0
- package/dist/history/types.d.ts.map +1 -0
- package/dist/history/types.js +5 -0
- package/dist/history/types.js.map +1 -0
- package/dist/instance/config.d.ts +12 -2
- package/dist/instance/config.d.ts.map +1 -1
- package/dist/instance/config.js +49 -4
- package/dist/instance/config.js.map +1 -1
- package/dist/instance/pool.d.ts +3 -3
- package/dist/instance/pool.d.ts.map +1 -1
- package/dist/instance/pool.js +29 -11
- package/dist/instance/pool.js.map +1 -1
- package/dist/mcp/kinds.d.ts.map +1 -1
- package/dist/mcp/kinds.js +2 -0
- package/dist/mcp/kinds.js.map +1 -1
- package/dist/mcp/roles.d.ts.map +1 -1
- package/dist/mcp/roles.js +2 -1
- package/dist/mcp/roles.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +2 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/backup.d.ts.map +1 -1
- package/dist/mcp/tools/backup.js +7 -1
- package/dist/mcp/tools/backup.js.map +1 -1
- package/dist/mcp/tools/history-mode.d.ts +27 -0
- package/dist/mcp/tools/history-mode.d.ts.map +1 -0
- package/dist/mcp/tools/history-mode.js +71 -0
- package/dist/mcp/tools/history-mode.js.map +1 -0
- package/dist/mcp/tools/maintain.d.ts.map +1 -1
- package/dist/mcp/tools/maintain.js +5 -2
- package/dist/mcp/tools/maintain.js.map +1 -1
- package/dist/mcp/tools/read.d.ts.map +1 -1
- package/dist/mcp/tools/read.js +48 -1
- package/dist/mcp/tools/read.js.map +1 -1
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import { commitSha, docId, docType } from '../types.js';
|
|
2
|
+
const CLOSE_TIMEOUT_MS = 5_000;
|
|
3
|
+
function unique(values) {
|
|
4
|
+
return [...new Set(values)];
|
|
5
|
+
}
|
|
6
|
+
function snapshotTagName(now = new Date()) {
|
|
7
|
+
return `maad-snapshot-${now.toISOString().replace(/[:.]/g, '-').replace('T', '-').replace('Z', '')}`;
|
|
8
|
+
}
|
|
9
|
+
function recoveredCommit(entries) {
|
|
10
|
+
const first = entries[0];
|
|
11
|
+
return {
|
|
12
|
+
action: first.op,
|
|
13
|
+
docId: docId(first.docId),
|
|
14
|
+
docType: docType('unknown'),
|
|
15
|
+
detail: `recovery:${entries.length}`,
|
|
16
|
+
summary: `Recovered ${entries.length} indexed write${entries.length === 1 ? '' : 's'}`,
|
|
17
|
+
files: unique(entries.flatMap(entry => entry.files ?? [entry.filePath])),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function combinePending(pending) {
|
|
21
|
+
const first = pending[0].options;
|
|
22
|
+
const logicalWrites = unique(pending.flatMap(item => item.journalIds)).length || pending.length;
|
|
23
|
+
return {
|
|
24
|
+
...first,
|
|
25
|
+
detail: pending.length === 1 ? first.detail : `batch:${logicalWrites}`,
|
|
26
|
+
summary: pending.length === 1 ? first.summary : `Flushed ${logicalWrites} pending writes`,
|
|
27
|
+
files: unique(pending.flatMap(item => item.options.files)),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export class HistoryController {
|
|
31
|
+
config;
|
|
32
|
+
gitLayer;
|
|
33
|
+
journal;
|
|
34
|
+
pending = [];
|
|
35
|
+
timer = null;
|
|
36
|
+
flushTail = Promise.resolve();
|
|
37
|
+
lastSuccessfulFlush = null;
|
|
38
|
+
lastFlushError = null;
|
|
39
|
+
closed = false;
|
|
40
|
+
serialize;
|
|
41
|
+
constructor(config, gitLayer, journal, serialize = async (_op, fn) => fn()) {
|
|
42
|
+
this.config = config;
|
|
43
|
+
this.gitLayer = gitLayer;
|
|
44
|
+
this.journal = journal;
|
|
45
|
+
this.serialize = serialize;
|
|
46
|
+
}
|
|
47
|
+
bindSerializer(serialize) {
|
|
48
|
+
this.serialize = serialize;
|
|
49
|
+
}
|
|
50
|
+
async recover() {
|
|
51
|
+
const indexed = this.journal.getIndexedPending();
|
|
52
|
+
if (indexed.length === 0)
|
|
53
|
+
return null;
|
|
54
|
+
if (this.config.effectiveMode === 'feed') {
|
|
55
|
+
this.journal.completeMany(indexed.map(entry => entry.id));
|
|
56
|
+
this.lastSuccessfulFlush = new Date().toISOString();
|
|
57
|
+
return { trigger: 'recovery', pendingWrites: 0, outcome: { status: 'noop' } };
|
|
58
|
+
}
|
|
59
|
+
if (this.config.effectiveMode === 'read')
|
|
60
|
+
return null;
|
|
61
|
+
this.hydrateJournalPending(indexed);
|
|
62
|
+
return this.serialize('history:recovery', () => this.flush('recovery'));
|
|
63
|
+
}
|
|
64
|
+
async commit(options) {
|
|
65
|
+
if (this.config.effectiveMode === 'read') {
|
|
66
|
+
return { status: 'failed', code: 'PROJECT_READ_ONLY', message: 'Project history_mode is read' };
|
|
67
|
+
}
|
|
68
|
+
const entries = this.journal.findIndexedByFiles(options.files);
|
|
69
|
+
const journalIds = entries.map(entry => entry.id);
|
|
70
|
+
this.journal.bindCommit(journalIds, options);
|
|
71
|
+
if (this.config.effectiveMode === 'feed') {
|
|
72
|
+
this.journal.completeMany(journalIds);
|
|
73
|
+
this.lastSuccessfulFlush = new Date().toISOString();
|
|
74
|
+
this.lastFlushError = null;
|
|
75
|
+
return { status: 'noop' };
|
|
76
|
+
}
|
|
77
|
+
if (this.config.effectiveMode === 'audit') {
|
|
78
|
+
const outcome = await this.commitGit(options);
|
|
79
|
+
if (outcome.status !== 'failed') {
|
|
80
|
+
this.journal.completeMany(journalIds);
|
|
81
|
+
this.lastSuccessfulFlush = new Date().toISOString();
|
|
82
|
+
this.lastFlushError = null;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.pending.push({ options, journalIds });
|
|
86
|
+
}
|
|
87
|
+
return outcome;
|
|
88
|
+
}
|
|
89
|
+
this.pending.push({ options, journalIds });
|
|
90
|
+
this.armTimer();
|
|
91
|
+
const threshold = this.config.options.max_writes;
|
|
92
|
+
if (threshold !== undefined && this.pendingWriteCount() >= threshold) {
|
|
93
|
+
return (await this.flush('threshold')).outcome;
|
|
94
|
+
}
|
|
95
|
+
return { status: 'noop' };
|
|
96
|
+
}
|
|
97
|
+
flush(trigger) {
|
|
98
|
+
let resolveResult;
|
|
99
|
+
const result = new Promise(resolve => { resolveResult = resolve; });
|
|
100
|
+
this.flushTail = this.flushTail
|
|
101
|
+
.catch(() => undefined)
|
|
102
|
+
.then(async () => {
|
|
103
|
+
try {
|
|
104
|
+
resolveResult(await this.flushNow(trigger));
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
const outcome = {
|
|
108
|
+
status: 'failed',
|
|
109
|
+
code: 'HISTORY_FLUSH_FAILED',
|
|
110
|
+
message: error instanceof Error ? error.message : String(error),
|
|
111
|
+
};
|
|
112
|
+
this.noteFailure(trigger, outcome);
|
|
113
|
+
resolveResult({ trigger, pendingWrites: this.pendingWriteCount(), outcome });
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
health() {
|
|
119
|
+
return {
|
|
120
|
+
effectiveMode: this.config.effectiveMode,
|
|
121
|
+
configuredMode: this.config.configuredMode,
|
|
122
|
+
modeSource: this.config.modeSource,
|
|
123
|
+
pendingWrites: this.pendingWriteCount(),
|
|
124
|
+
lastSuccessfulFlush: this.lastSuccessfulFlush,
|
|
125
|
+
lastFlushError: this.lastFlushError,
|
|
126
|
+
advisories: [...this.config.advisories],
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
async close() {
|
|
130
|
+
if (this.closed)
|
|
131
|
+
return;
|
|
132
|
+
this.closed = true;
|
|
133
|
+
this.clearTimer();
|
|
134
|
+
if (this.config.effectiveMode === 'feed' || this.config.effectiveMode === 'read')
|
|
135
|
+
return;
|
|
136
|
+
let timeout = null;
|
|
137
|
+
await Promise.race([
|
|
138
|
+
this.serialize('history:shutdown', () => this.flush('shutdown')).then(() => undefined),
|
|
139
|
+
new Promise(resolve => {
|
|
140
|
+
timeout = setTimeout(() => {
|
|
141
|
+
this.lastFlushError = {
|
|
142
|
+
at: new Date().toISOString(),
|
|
143
|
+
code: 'HISTORY_FLUSH_TIMEOUT',
|
|
144
|
+
message: `History shutdown flush exceeded ${CLOSE_TIMEOUT_MS}ms`,
|
|
145
|
+
trigger: 'shutdown',
|
|
146
|
+
};
|
|
147
|
+
resolve();
|
|
148
|
+
}, CLOSE_TIMEOUT_MS);
|
|
149
|
+
timeout.unref?.();
|
|
150
|
+
}),
|
|
151
|
+
]);
|
|
152
|
+
if (timeout)
|
|
153
|
+
clearTimeout(timeout);
|
|
154
|
+
}
|
|
155
|
+
async flushNow(trigger) {
|
|
156
|
+
this.clearTimer();
|
|
157
|
+
if (this.config.effectiveMode === 'feed' || this.config.effectiveMode === 'read') {
|
|
158
|
+
const indexed = this.journal.getIndexedPending();
|
|
159
|
+
if (this.config.effectiveMode === 'feed')
|
|
160
|
+
this.journal.completeMany(indexed.map(entry => entry.id));
|
|
161
|
+
this.lastSuccessfulFlush = new Date().toISOString();
|
|
162
|
+
return { trigger, pendingWrites: this.pendingWriteCount(), outcome: { status: 'noop' } };
|
|
163
|
+
}
|
|
164
|
+
this.hydrateJournalPending(this.journal.getIndexedPending());
|
|
165
|
+
if (this.pending.length === 0) {
|
|
166
|
+
this.lastSuccessfulFlush = new Date().toISOString();
|
|
167
|
+
return { trigger, pendingWrites: 0, outcome: { status: 'noop' } };
|
|
168
|
+
}
|
|
169
|
+
const boundaryEntry = this.journal.getIndexedPending()
|
|
170
|
+
.find(entry => entry.gitBoundarySha && entry.snapshotTag);
|
|
171
|
+
if (this.config.effectiveMode === 'snapshot' && boundaryEntry?.gitBoundarySha && boundaryEntry.snapshotTag) {
|
|
172
|
+
const boundaryIds = this.journal.getIndexedPending()
|
|
173
|
+
.filter(entry => entry.gitBoundarySha === boundaryEntry.gitBoundarySha && entry.snapshotTag === boundaryEntry.snapshotTag)
|
|
174
|
+
.map(entry => entry.id);
|
|
175
|
+
const boundaryIdSet = new Set(boundaryIds);
|
|
176
|
+
const outcome = { status: 'committed', sha: commitSha(boundaryEntry.gitBoundarySha) };
|
|
177
|
+
try {
|
|
178
|
+
await this.ensureSnapshotTag(boundaryEntry.snapshotTag, boundaryEntry.gitBoundarySha);
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
const failed = {
|
|
182
|
+
status: 'failed',
|
|
183
|
+
code: 'GIT_TAG_FAILED',
|
|
184
|
+
message: `snapshot tag failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
185
|
+
};
|
|
186
|
+
this.noteFailure(trigger, failed);
|
|
187
|
+
this.armTimer();
|
|
188
|
+
return { trigger, pendingWrites: this.pendingWriteCount(), outcome: failed };
|
|
189
|
+
}
|
|
190
|
+
this.journal.completeMany(boundaryIds);
|
|
191
|
+
this.pending = this.pending.flatMap(item => {
|
|
192
|
+
const remaining = item.journalIds.filter(id => !boundaryIdSet.has(id));
|
|
193
|
+
return remaining.length === 0 ? [] : [{ ...item, journalIds: remaining }];
|
|
194
|
+
});
|
|
195
|
+
this.lastSuccessfulFlush = new Date().toISOString();
|
|
196
|
+
this.lastFlushError = null;
|
|
197
|
+
if (this.pending.length > 0)
|
|
198
|
+
return this.flushNow(trigger);
|
|
199
|
+
return { trigger, pendingWrites: this.pendingWriteCount(), outcome };
|
|
200
|
+
}
|
|
201
|
+
const flushing = this.pending;
|
|
202
|
+
this.pending = [];
|
|
203
|
+
const journalIds = unique(flushing.flatMap(item => item.journalIds));
|
|
204
|
+
let outcome;
|
|
205
|
+
outcome = await this.commitGit(combinePending(flushing));
|
|
206
|
+
if (outcome.status === 'failed') {
|
|
207
|
+
this.pending.unshift(...flushing);
|
|
208
|
+
this.noteFailure(trigger, outcome);
|
|
209
|
+
this.armTimer();
|
|
210
|
+
return { trigger, pendingWrites: this.pendingWriteCount(), outcome };
|
|
211
|
+
}
|
|
212
|
+
if (this.config.effectiveMode === 'snapshot' && outcome.status === 'committed') {
|
|
213
|
+
const tag = snapshotTagName();
|
|
214
|
+
this.journal.recordSnapshotBoundary(journalIds, outcome.sha, tag);
|
|
215
|
+
try {
|
|
216
|
+
await this.ensureSnapshotTag(tag, outcome.sha);
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
const failed = {
|
|
220
|
+
status: 'failed',
|
|
221
|
+
code: 'GIT_TAG_FAILED',
|
|
222
|
+
message: `snapshot tag failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
223
|
+
};
|
|
224
|
+
this.pending.unshift(...flushing);
|
|
225
|
+
this.noteFailure(trigger, failed);
|
|
226
|
+
this.armTimer();
|
|
227
|
+
return { trigger, pendingWrites: this.pendingWriteCount(), outcome: failed };
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
this.journal.completeMany(journalIds);
|
|
231
|
+
this.lastSuccessfulFlush = new Date().toISOString();
|
|
232
|
+
this.lastFlushError = null;
|
|
233
|
+
if (this.pending.length > 0)
|
|
234
|
+
this.armTimer();
|
|
235
|
+
return { trigger, pendingWrites: this.pendingWriteCount(), outcome };
|
|
236
|
+
}
|
|
237
|
+
async commitGit(options) {
|
|
238
|
+
if (!this.gitLayer) {
|
|
239
|
+
return {
|
|
240
|
+
status: 'failed',
|
|
241
|
+
code: 'GIT_NOT_INITIALIZED',
|
|
242
|
+
message: `history_mode ${this.config.effectiveMode} requires Git`,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
return this.gitLayer.commit(options);
|
|
246
|
+
}
|
|
247
|
+
async ensureSnapshotTag(tag, sha) {
|
|
248
|
+
const existing = await this.gitLayer.listTagsByPrefix(tag);
|
|
249
|
+
const exact = existing.find(candidate => candidate.tag === tag);
|
|
250
|
+
if (exact) {
|
|
251
|
+
if (exact.sha === sha)
|
|
252
|
+
return;
|
|
253
|
+
throw new Error(`snapshot tag ${tag} already points at ${exact.sha || 'a non-commit object'}`);
|
|
254
|
+
}
|
|
255
|
+
try {
|
|
256
|
+
await this.gitLayer.addAnnotatedTag(tag, `MAADB history snapshot at ${sha}`, sha);
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
const after = await this.gitLayer.listTagsByPrefix(tag);
|
|
260
|
+
if (after.some(candidate => candidate.tag === tag && candidate.sha === sha))
|
|
261
|
+
return;
|
|
262
|
+
throw error;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
hydrateJournalPending(entries) {
|
|
266
|
+
const queuedIds = new Set(this.pending.flatMap(item => item.journalIds));
|
|
267
|
+
const missing = entries.filter(entry => !queuedIds.has(entry.id));
|
|
268
|
+
if (missing.length === 0)
|
|
269
|
+
return;
|
|
270
|
+
const groups = new Map();
|
|
271
|
+
for (const entry of missing) {
|
|
272
|
+
const key = entry.commit ? JSON.stringify(entry.commit) : '__recovery__';
|
|
273
|
+
const group = groups.get(key) ?? [];
|
|
274
|
+
group.push(entry);
|
|
275
|
+
groups.set(key, group);
|
|
276
|
+
}
|
|
277
|
+
for (const group of groups.values()) {
|
|
278
|
+
this.pending.push({
|
|
279
|
+
options: group[0]?.commit ?? recoveredCommit(group),
|
|
280
|
+
journalIds: group.map(entry => entry.id),
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
pendingWriteCount() {
|
|
285
|
+
const journalCount = this.journal.getIndexedPending().length;
|
|
286
|
+
const unjournaled = this.pending.filter(item => item.journalIds.length === 0).length;
|
|
287
|
+
return journalCount + unjournaled;
|
|
288
|
+
}
|
|
289
|
+
noteFailure(trigger, outcome) {
|
|
290
|
+
this.lastFlushError = {
|
|
291
|
+
at: new Date().toISOString(),
|
|
292
|
+
code: outcome.code,
|
|
293
|
+
message: outcome.message,
|
|
294
|
+
trigger,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
armTimer() {
|
|
298
|
+
if (this.closed || this.timer || this.pendingWriteCount() === 0)
|
|
299
|
+
return;
|
|
300
|
+
const delay = this.config.options.max_delay_ms;
|
|
301
|
+
if (delay === undefined)
|
|
302
|
+
return;
|
|
303
|
+
this.timer = setTimeout(() => {
|
|
304
|
+
this.timer = null;
|
|
305
|
+
void this.serialize('history:timer', () => this.flush('timer'));
|
|
306
|
+
}, delay);
|
|
307
|
+
this.timer.unref?.();
|
|
308
|
+
}
|
|
309
|
+
clearTimer() {
|
|
310
|
+
if (!this.timer)
|
|
311
|
+
return;
|
|
312
|
+
clearTimeout(this.timer);
|
|
313
|
+
this.timer = null;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/history/controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAexD,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAE/B,SAAS,MAAM,CAAC,MAAgB;IAC9B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,eAAe,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE;IACvC,OAAO,iBAAiB,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;AACvG,CAAC;AAED,SAAS,eAAe,CAAC,OAAuB;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;IAC1B,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,EAAE;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QACzB,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC;QAC3B,MAAM,EAAE,YAAY,OAAO,CAAC,MAAM,EAAE;QACpC,OAAO,EAAE,aAAa,OAAO,CAAC,MAAM,iBAAiB,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;QACtF,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;KACzE,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,OAAwB;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC;IAClC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAChG,OAAO;QACL,GAAG,KAAK;QACR,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,aAAa,EAAE;QACtE,OAAO,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,aAAa,iBAAiB;QACzF,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,iBAAiB;IACnB,MAAM,CAAwB;IAEtB,QAAQ,CAAkB;IAC1B,OAAO,CAAmB;IACnC,OAAO,GAAoB,EAAE,CAAC;IAC9B,KAAK,GAA0B,IAAI,CAAC;IACpC,SAAS,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7C,mBAAmB,GAAkB,IAAI,CAAC;IAC1C,cAAc,GAAyC,IAAI,CAAC;IAC5D,MAAM,GAAG,KAAK,CAAC;IACf,SAAS,CAAsD;IAEvE,YACE,MAA6B,EAC7B,QAAyB,EACzB,OAAyB,EACzB,YAAiE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;QAExF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,cAAc,CAAC,SAA8D;QAC3E,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEtC,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,mBAAmB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACpD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;QAChF,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAEtD,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;YACzC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC;QAClG,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAE7C,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YACtC,IAAI,CAAC,mBAAmB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBACtC,IAAI,CAAC,mBAAmB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;QACjD,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,SAAS,EAAE,CAAC;YACrE,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;QACjD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAA4B;QAChC,IAAI,aAAoD,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,OAAO,CAAqB,OAAO,CAAC,EAAE,GAAG,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;aAC5B,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;aACtB,IAAI,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,aAAa,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAkB;oBAC7B,MAAM,EAAE,QAAQ;oBAChB,IAAI,EAAE,sBAAsB;oBAC5B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAChE,CAAC;gBACF,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACnC,aAAa,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC,CAAC,CAAC;QACL,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM;QACJ,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;YACxC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;YAC1C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAClC,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE;YACvC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM;YAAE,OAAO;QAEzF,IAAI,OAAO,GAA0B,IAAI,CAAC;QAC1C,MAAM,OAAO,CAAC,IAAI,CAAC;YACjB,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;YACtF,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;gBAC1B,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;oBACxB,IAAI,CAAC,cAAc,GAAG;wBACpB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBAC5B,IAAI,EAAE,uBAAuB;wBAC7B,OAAO,EAAE,mCAAmC,gBAAgB,IAAI;wBAChE,OAAO,EAAE,UAAU;qBACpB,CAAC;oBACF,OAAO,EAAE,CAAC;gBACZ,CAAC,EAAE,gBAAgB,CAAC,CAAC;gBACrB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YACpB,CAAC,CAAC;SACH,CAAC,CAAC;QACH,IAAI,OAAO;YAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,OAA4B;QACjD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;YACjF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;YACjD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,MAAM;gBAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACpG,IAAI,CAAC,mBAAmB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACpD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;QAC3F,CAAC;QAED,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,mBAAmB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACpD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;QACpE,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;aACnD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,UAAU,IAAI,aAAa,EAAE,cAAc,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC;YAC3G,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;iBACjD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,KAAK,aAAa,CAAC,cAAc,IAAI,KAAK,CAAC,WAAW,KAAK,aAAa,CAAC,WAAW,CAAC;iBACzH,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;YACrG,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;YACxF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,MAAM,GAAkB;oBAC5B,MAAM,EAAE,QAAQ;oBAChB,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC1F,CAAC;gBACF,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC/E,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACzC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvE,OAAO,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC3D,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,CAAC;QACvE,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACrE,IAAI,OAAsB,CAAC;QAE3B,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEzD,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,CAAC;QACvE,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC/E,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,GAAa,EAAE,GAAG,CAAC,CAAC;YAC5E,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAa,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,MAAM,GAAkB;oBAC5B,MAAM,EAAE,QAAQ;oBAChB,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC1F,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;gBAClC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC/E,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,mBAAmB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,CAAC;IACvE,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,OAAsB;QAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,gBAAgB,IAAI,CAAC,MAAM,CAAC,aAAa,eAAe;aAClE,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,GAAW,EAAE,GAAW;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAChE,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;gBAAE,OAAO;YAC9B,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,sBAAsB,KAAK,CAAC,GAAG,IAAI,qBAAqB,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAS,CAAC,eAAe,CAAC,GAAG,EAAE,6BAA6B,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;QACrF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,KAAK,GAAG,IAAI,SAAS,CAAC,GAAG,KAAK,GAAG,CAAC;gBAAE,OAAO;YACpF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,OAAuB;QACnD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEjC,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;QACjD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;YACzE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,eAAe,CAAC,KAAK,CAAC;gBACnD,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;aACzC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACrF,OAAO,YAAY,GAAG,WAAW,CAAC;IACpC,CAAC;IAEO,WAAW,CAAC,OAA4B,EAAE,OAAqD;QACrG,IAAI,CAAC,cAAc,GAAG;YACpB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO;SACR,CAAC;IACJ,CAAC;IAEO,QAAQ;QACd,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC;YAAE,OAAO;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO;QAChC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,KAAK,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAClE,CAAC,EAAE,KAAK,CAAC,CAAC;QACV,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IACvB,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { CommitOptions, CommitOutcome } from '../git/index.js';
|
|
2
|
+
export declare const HISTORY_MODES: readonly ["audit", "feed", "read", "batch", "snapshot"];
|
|
3
|
+
export type HistoryMode = (typeof HISTORY_MODES)[number];
|
|
4
|
+
/** How the effective mode was selected for a project. */
|
|
5
|
+
export type HistoryModeSource = 'project' | 'environment' | 'inferred';
|
|
6
|
+
/** Public `history_options` shape from instance.yaml. */
|
|
7
|
+
export interface HistoryOptions {
|
|
8
|
+
max_writes?: number;
|
|
9
|
+
max_delay_ms?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface HistoryAdvisory {
|
|
12
|
+
code: 'HISTORY_MODE_INFERRED';
|
|
13
|
+
message: string;
|
|
14
|
+
}
|
|
15
|
+
/** Fully resolved history configuration passed from the pool to the engine. */
|
|
16
|
+
export interface ResolvedHistoryConfig {
|
|
17
|
+
effectiveMode: HistoryMode;
|
|
18
|
+
/** The project-level `history_mode`, excluding environment defaults. */
|
|
19
|
+
configuredMode: HistoryMode | null;
|
|
20
|
+
modeSource: HistoryModeSource;
|
|
21
|
+
options: HistoryOptions;
|
|
22
|
+
advisories: HistoryAdvisory[];
|
|
23
|
+
}
|
|
24
|
+
export type HistoryFlushTrigger = 'threshold' | 'timer' | 'explicit' | 'shutdown' | 'recovery' | 'snapshot';
|
|
25
|
+
export interface HistoryFlushError {
|
|
26
|
+
at: string;
|
|
27
|
+
code: string;
|
|
28
|
+
message: string;
|
|
29
|
+
trigger: HistoryFlushTrigger;
|
|
30
|
+
}
|
|
31
|
+
/** Stable history portion of engine health. */
|
|
32
|
+
export interface HistoryHealthState {
|
|
33
|
+
effectiveMode: HistoryMode;
|
|
34
|
+
configuredMode: HistoryMode | null;
|
|
35
|
+
modeSource: HistoryModeSource;
|
|
36
|
+
pendingWrites: number;
|
|
37
|
+
lastSuccessfulFlush: string | null;
|
|
38
|
+
lastFlushError: HistoryFlushError | null;
|
|
39
|
+
advisories: HistoryAdvisory[];
|
|
40
|
+
}
|
|
41
|
+
export interface HistoryFlushResult {
|
|
42
|
+
trigger: HistoryFlushTrigger;
|
|
43
|
+
pendingWrites: number;
|
|
44
|
+
outcome: CommitOutcome;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Engine-facing seam implemented by the history runtime. Keeping this on the
|
|
48
|
+
* context lets write paths delegate commit policy without knowing whether the
|
|
49
|
+
* effective mode commits immediately, batches, or disables Git.
|
|
50
|
+
*/
|
|
51
|
+
export interface HistoryRuntime {
|
|
52
|
+
readonly config: ResolvedHistoryConfig;
|
|
53
|
+
commit(options: CommitOptions): Promise<CommitOutcome>;
|
|
54
|
+
flush(trigger: HistoryFlushTrigger): Promise<HistoryFlushResult>;
|
|
55
|
+
health(): HistoryHealthState;
|
|
56
|
+
close(): Promise<void>;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/history/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEpE,eAAO,MAAM,aAAa,yDAA0D,CAAC;AAErF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,yDAAyD;AACzD,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;AAEvE,yDAAyD;AACzD,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,+EAA+E;AAC/E,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,WAAW,CAAC;IAC3B,wEAAwE;IACxE,cAAc,EAAE,WAAW,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,mBAAmB,GAC3B,WAAW,GACX,OAAO,GACP,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAED,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,WAAW,CAAC;IAC3B,cAAc,EAAE,WAAW,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACzC,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACvD,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjE,MAAM,IAAI,kBAAkB,CAAC;IAC7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// History Modes - shared configuration and runtime contracts
|
|
3
|
+
// ============================================================================
|
|
4
|
+
export const HISTORY_MODES = ['audit', 'feed', 'read', 'batch', 'snapshot'];
|
|
5
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/history/types.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6DAA6D;AAC7D,+EAA+E;AAI/E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAU,CAAC"}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { type Result } from '../errors.js';
|
|
2
2
|
import { type Role } from '../mcp/roles.js';
|
|
3
|
+
import type { HistoryAdvisory, HistoryMode, HistoryModeSource, HistoryOptions, ResolvedHistoryConfig } from '../history/types.js';
|
|
3
4
|
export interface ProjectConfig {
|
|
4
5
|
name: string;
|
|
5
6
|
path: string;
|
|
6
7
|
role: Role;
|
|
7
8
|
description?: string;
|
|
9
|
+
/** Effective mode after project/env/inference precedence. */
|
|
10
|
+
historyMode?: HistoryMode;
|
|
11
|
+
/** Project-level mode only; null when env/default inference selected it. */
|
|
12
|
+
configuredHistoryMode?: HistoryMode | null;
|
|
13
|
+
historyModeSource?: HistoryModeSource;
|
|
14
|
+
historyOptions?: HistoryOptions;
|
|
15
|
+
historyAdvisories?: HistoryAdvisory[];
|
|
8
16
|
}
|
|
9
17
|
export interface InstanceConfig {
|
|
10
18
|
name: string;
|
|
@@ -12,8 +20,10 @@ export interface InstanceConfig {
|
|
|
12
20
|
source: 'file' | 'synthetic';
|
|
13
21
|
configPath?: string;
|
|
14
22
|
}
|
|
15
|
-
export declare function loadInstance(configPath: string): Promise<Result<InstanceConfig>>;
|
|
16
|
-
export declare function validateInstance(data: Record<string, unknown>, configPath?: string): Result<InstanceConfig>;
|
|
23
|
+
export declare function loadInstance(configPath: string, env?: NodeJS.ProcessEnv): Promise<Result<InstanceConfig>>;
|
|
24
|
+
export declare function validateInstance(data: Record<string, unknown>, configPath?: string, env?: NodeJS.ProcessEnv): Result<InstanceConfig>;
|
|
17
25
|
export declare function synthesizeLegacyInstance(projectPath: string, role: Role): InstanceConfig;
|
|
26
|
+
export declare function applyResolvedHistory(project: ProjectConfig, history: ResolvedHistoryConfig): void;
|
|
27
|
+
export declare function projectHistoryConfig(project: ProjectConfig, env?: NodeJS.ProcessEnv): Result<ResolvedHistoryConfig>;
|
|
18
28
|
export declare function getProject(instance: InstanceConfig, name: string): ProjectConfig | undefined;
|
|
19
29
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/instance/config.ts"],"names":[],"mappings":"AAYA,OAAO,EAAiC,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/instance/config.ts"],"names":[],"mappings":"AAYA,OAAO,EAAiC,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,4EAA4E;IAC5E,qBAAqB,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3C,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CA4BjC;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,CAAC,EAAE,MAAM,EACnB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAAC,cAAc,CAAC,CA6DxB;AAKD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,IAAI,GACT,cAAc,CAahB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAMjG;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,aAAa,EACtB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAAC,qBAAqB,CAAC,CAuC/B;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE5F"}
|
package/dist/instance/config.js
CHANGED
|
@@ -11,8 +11,9 @@ import path from 'node:path';
|
|
|
11
11
|
import { parseMatter } from '../parser/matter.js';
|
|
12
12
|
import { ok, err, singleErr, maadError } from '../errors.js';
|
|
13
13
|
import { parseRole } from '../mcp/roles.js';
|
|
14
|
+
import { resolveHistoryConfig } from '../history/config.js';
|
|
14
15
|
const VALID_PROJECT_NAME = /^[a-z][a-z0-9_-]*$/;
|
|
15
|
-
export async function loadInstance(configPath) {
|
|
16
|
+
export async function loadInstance(configPath, env = process.env) {
|
|
16
17
|
const resolved = path.resolve(configPath);
|
|
17
18
|
if (!existsSync(resolved)) {
|
|
18
19
|
return singleErr('INSTANCE_CONFIG_NOT_FOUND', `Instance config not found: ${resolved}`);
|
|
@@ -38,9 +39,9 @@ export async function loadInstance(configPath) {
|
|
|
38
39
|
const message = e instanceof Error ? e.message : 'Unknown parse error';
|
|
39
40
|
return singleErr('PARSE_ERROR', `Failed to parse instance YAML: ${message}`);
|
|
40
41
|
}
|
|
41
|
-
return validateInstance(data, resolved);
|
|
42
|
+
return validateInstance(data, resolved, env);
|
|
42
43
|
}
|
|
43
|
-
export function validateInstance(data, configPath) {
|
|
44
|
+
export function validateInstance(data, configPath, env = process.env) {
|
|
44
45
|
const errors = [];
|
|
45
46
|
const configDir = configPath ? path.dirname(configPath) : process.cwd();
|
|
46
47
|
if (typeof data.name !== 'string' || data.name.length === 0) {
|
|
@@ -80,6 +81,12 @@ export function validateInstance(data, configPath) {
|
|
|
80
81
|
const project = { name: pname, path: absPath, role };
|
|
81
82
|
if (typeof raw.description === 'string')
|
|
82
83
|
project.description = raw.description;
|
|
84
|
+
const history = resolveHistoryConfig(raw, absPath, env, where);
|
|
85
|
+
if (!history.ok) {
|
|
86
|
+
errors.push(...history.errors);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
applyResolvedHistory(project, history.value);
|
|
83
90
|
projects.push(project);
|
|
84
91
|
}
|
|
85
92
|
if (errors.length > 0)
|
|
@@ -95,12 +102,50 @@ export function validateInstance(data, configPath) {
|
|
|
95
102
|
export function synthesizeLegacyInstance(projectPath, role) {
|
|
96
103
|
const absPath = path.resolve(projectPath);
|
|
97
104
|
const basename = path.basename(absPath).toLowerCase().replace(/[^a-z0-9_-]/g, '-') || 'default';
|
|
105
|
+
const project = { name: 'default', path: absPath, role };
|
|
106
|
+
const history = resolveHistoryConfig({}, absPath, process.env, 'projects[0]');
|
|
107
|
+
// Keep this legacy helper non-throwing. EnginePool re-resolves and returns a
|
|
108
|
+
// Result error if an invalid environment default prevented resolution here.
|
|
109
|
+
if (history.ok)
|
|
110
|
+
applyResolvedHistory(project, history.value);
|
|
98
111
|
return {
|
|
99
112
|
name: `${basename}-legacy`,
|
|
100
|
-
projects: [
|
|
113
|
+
projects: [project],
|
|
101
114
|
source: 'synthetic',
|
|
102
115
|
};
|
|
103
116
|
}
|
|
117
|
+
export function applyResolvedHistory(project, history) {
|
|
118
|
+
project.historyMode = history.effectiveMode;
|
|
119
|
+
project.configuredHistoryMode = history.configuredMode;
|
|
120
|
+
project.historyModeSource = history.modeSource;
|
|
121
|
+
project.historyOptions = { ...history.options };
|
|
122
|
+
project.historyAdvisories = [...history.advisories];
|
|
123
|
+
}
|
|
124
|
+
export function projectHistoryConfig(project, env = process.env) {
|
|
125
|
+
if (project.historyMode !== undefined
|
|
126
|
+
&& project.configuredHistoryMode !== undefined
|
|
127
|
+
&& project.historyModeSource !== undefined
|
|
128
|
+
&& project.historyOptions !== undefined
|
|
129
|
+
&& project.historyAdvisories !== undefined) {
|
|
130
|
+
if ((project.historyMode === 'audit' || project.historyMode === 'batch' || project.historyMode === 'snapshot')
|
|
131
|
+
&& !existsSync(path.join(project.path, '.git'))) {
|
|
132
|
+
return singleErr('GIT_NOT_INITIALIZED', `history_mode ${project.historyMode} requires a Git repository at the project root`, undefined, { historyMode: project.historyMode, modeSource: project.historyModeSource });
|
|
133
|
+
}
|
|
134
|
+
return ok({
|
|
135
|
+
effectiveMode: project.historyMode,
|
|
136
|
+
configuredMode: project.configuredHistoryMode,
|
|
137
|
+
modeSource: project.historyModeSource,
|
|
138
|
+
options: { ...project.historyOptions },
|
|
139
|
+
advisories: [...project.historyAdvisories],
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return resolveHistoryConfig({
|
|
143
|
+
...(project.configuredHistoryMode !== undefined && project.configuredHistoryMode !== null
|
|
144
|
+
? { history_mode: project.configuredHistoryMode }
|
|
145
|
+
: {}),
|
|
146
|
+
...(project.historyOptions !== undefined ? { history_options: project.historyOptions } : {}),
|
|
147
|
+
}, project.path, env, `project "${project.name}"`);
|
|
148
|
+
}
|
|
104
149
|
export function getProject(instance, name) {
|
|
105
150
|
return instance.projects.find((p) => p.name === name);
|
|
106
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/instance/config.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,sDAAsD;AACtD,EAAE;AACF,qEAAqE;AACrE,yEAAyE;AACzE,4EAA4E;AAC5E,+EAA+E;AAE/E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAe,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAa,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/instance/config.ts"],"names":[],"mappings":"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"}
|
package/dist/instance/pool.d.ts
CHANGED
|
@@ -135,9 +135,9 @@ export declare class EnginePool {
|
|
|
135
135
|
* Must be called between `tryBeginReload` and `endReload` — does not manage
|
|
136
136
|
* the reload slot itself.
|
|
137
137
|
*
|
|
138
|
-
* Mutations (same name, different path
|
|
139
|
-
*
|
|
140
|
-
*
|
|
138
|
+
* Mutations (same name, different path, role, effective history mode, or
|
|
139
|
+
* history thresholds) fail the whole reload with
|
|
140
|
+
* INSTANCE_MUTATION_UNSUPPORTED — no partial apply.
|
|
141
141
|
*/
|
|
142
142
|
applyDiff(newInstance: InstanceConfig): Promise<Result<InstanceDiff>>;
|
|
143
143
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/instance/pool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/instance/pool.ts"],"names":[],"mappings":"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"}
|