@context-forge/cli 0.4.2 → 0.5.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 +22 -8
- package/dist/commands/arch.d.ts.map +1 -1
- package/dist/commands/arch.js +6 -4
- package/dist/commands/arch.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +9 -6
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +59 -21
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/next.d.ts.map +1 -1
- package/dist/commands/next.js +6 -4
- package/dist/commands/next.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +6 -4
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/project.d.ts +2 -0
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +144 -36
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/slice.d.ts.map +1 -1
- package/dist/commands/slice.js +6 -4
- package/dist/commands/slice.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +148 -7
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/task.d.ts.map +1 -1
- package/dist/commands/task.js +11 -8
- package/dist/commands/task.js.map +1 -1
- package/dist/commands/worktree.d.ts +3 -0
- package/dist/commands/worktree.d.ts.map +1 -0
- package/dist/commands/worktree.js +332 -0
- package/dist/commands/worktree.js.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/confirm.d.ts +3 -0
- package/dist/utils/confirm.d.ts.map +1 -0
- package/dist/utils/confirm.js +12 -0
- package/dist/utils/confirm.js.map +1 -0
- package/dist/utils/project.d.ts +40 -7
- package/dist/utils/project.d.ts.map +1 -1
- package/dist/utils/project.js +97 -19
- package/dist/utils/project.js.map +1 -1
- package/dist/utils/worktree-overlay.d.ts +2 -0
- package/dist/utils/worktree-overlay.d.ts.map +1 -0
- package/dist/utils/worktree-overlay.js +3 -0
- package/dist/utils/worktree-overlay.js.map +1 -0
- package/package.json +2 -2
package/dist/commands/project.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import * as os from 'node:os';
|
|
2
|
-
import * as readline from 'node:readline';
|
|
3
2
|
import { join } from 'node:path';
|
|
4
|
-
import { FileProjectStore, ConfigManager, resolveFileByIndex, resolveArtifactPath, deriveArtifactStem, parseSlicePlan } from '@context-forge/core/node';
|
|
3
|
+
import { FileProjectStore, ConfigManager, resolveFileByIndex, resolveArtifactPath, deriveArtifactStem, parseSlicePlan, WorktreeService } from '@context-forge/core/node';
|
|
5
4
|
import { resolveFieldName, resolvePhaseValue, validateFieldValue, PROJECT_FIELDS, FIELD_GROUPS, } from '@context-forge/core';
|
|
6
|
-
import { resolveProjectId, findByNameOrId, findProjectByCwd } from '../utils/project.js';
|
|
5
|
+
import { resolveProjectId, resolveProjectWorktree, findByNameOrId, findProjectByCwd } from '../utils/project.js';
|
|
6
|
+
import { applyWorktreeOverlay } from '../utils/worktree-overlay.js';
|
|
7
7
|
import { handleError, UserError } from '../utils/errors.js';
|
|
8
|
+
import { askConfirmation } from '../utils/confirm.js';
|
|
8
9
|
import { printJson } from '../output/formatter.js';
|
|
9
10
|
import { renderTable } from '../output/tables.js';
|
|
10
11
|
import { label, value as valueStyle, success, dim } from '../output/styles.js';
|
|
@@ -36,6 +37,29 @@ function shortenPath(p) {
|
|
|
36
37
|
return '~' + p.slice(home.length);
|
|
37
38
|
return p;
|
|
38
39
|
}
|
|
40
|
+
/** Fields that are routed to WorktreeContext when a worktree is active. */
|
|
41
|
+
const WORKTREE_SCOPED_FIELDS = new Set([
|
|
42
|
+
'developmentPhase',
|
|
43
|
+
'instruction',
|
|
44
|
+
'workType',
|
|
45
|
+
'fileArch',
|
|
46
|
+
'fileSlicePlan',
|
|
47
|
+
'fileSlice',
|
|
48
|
+
'fileTasks',
|
|
49
|
+
]);
|
|
50
|
+
/** Map ProjectData field names to their WorktreeContext counterparts. */
|
|
51
|
+
const PROJECT_TO_WORKTREE_FIELD = {
|
|
52
|
+
fileSlice: 'activeSlice',
|
|
53
|
+
fileTasks: 'activeTaskFile',
|
|
54
|
+
fileArch: 'archDoc',
|
|
55
|
+
fileSlicePlan: 'slicePlan',
|
|
56
|
+
developmentPhase: 'developmentPhase',
|
|
57
|
+
instruction: 'instruction',
|
|
58
|
+
workType: 'workType',
|
|
59
|
+
};
|
|
60
|
+
function isWorktreeField(field) {
|
|
61
|
+
return WORKTREE_SCOPED_FIELDS.has(field);
|
|
62
|
+
}
|
|
39
63
|
/** Display the project schema grouped by category. */
|
|
40
64
|
function displaySchema() {
|
|
41
65
|
const groupLabels = {
|
|
@@ -125,7 +149,9 @@ export async function projectSetAction(field, val, opts) {
|
|
|
125
149
|
throw new UserError(validation.error);
|
|
126
150
|
}
|
|
127
151
|
const store = new FileProjectStore();
|
|
128
|
-
const
|
|
152
|
+
const resolved = await resolveProjectWorktree({ project: opts.project }, store);
|
|
153
|
+
const id = resolved.id;
|
|
154
|
+
const worktreeId = resolved.worktreeId;
|
|
129
155
|
const existing = await store.getById(id);
|
|
130
156
|
if (!existing) {
|
|
131
157
|
throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
|
|
@@ -133,15 +159,18 @@ export async function projectSetAction(field, val, opts) {
|
|
|
133
159
|
// Index-based file resolution: cf set slice 171 → scans for matching file
|
|
134
160
|
// Falls back to slice plan entry name if file doesn't exist on disk
|
|
135
161
|
if (fieldDef?.group === 'artifacts' && /^\d+$/.test(resolvedValue) && existing.projectPath) {
|
|
162
|
+
// Use worktree-overlaid project for slice plan lookup (project-level fields
|
|
163
|
+
// may be cleared after migration, but the worktree context has the values)
|
|
164
|
+
const overlaid = worktreeId ? applyWorktreeOverlay(existing, worktreeId) : existing;
|
|
136
165
|
try {
|
|
137
|
-
const
|
|
138
|
-
if (
|
|
139
|
-
resolvedValue =
|
|
166
|
+
const fileResolved = resolveFileByIndex(existing.projectPath, resolvedField, resolvedValue);
|
|
167
|
+
if (fileResolved !== null) {
|
|
168
|
+
resolvedValue = fileResolved;
|
|
140
169
|
}
|
|
141
170
|
}
|
|
142
171
|
catch {
|
|
143
172
|
// File doesn't exist — try deriving from slice plan
|
|
144
|
-
const derived = await deriveFromSlicePlan(
|
|
173
|
+
const derived = await deriveFromSlicePlan(overlaid, resolvedField, resolvedValue);
|
|
145
174
|
if (derived) {
|
|
146
175
|
resolvedValue = derived;
|
|
147
176
|
}
|
|
@@ -150,20 +179,79 @@ export async function projectSetAction(field, val, opts) {
|
|
|
150
179
|
}
|
|
151
180
|
}
|
|
152
181
|
}
|
|
153
|
-
//
|
|
182
|
+
// Determine worktree context name for display
|
|
183
|
+
const worktreeName = worktreeId
|
|
184
|
+
? (existing.worktrees ?? []).find((wt) => wt.id === worktreeId)?.name
|
|
185
|
+
: undefined;
|
|
186
|
+
// Route worktree-scoped fields to WorktreeService when worktree is resolved
|
|
187
|
+
if (worktreeId && isWorktreeField(resolvedField) && !opts.projectLevel) {
|
|
188
|
+
const svc = new WorktreeService(store);
|
|
189
|
+
const wtField = PROJECT_TO_WORKTREE_FIELD[resolvedField] ?? resolvedField;
|
|
190
|
+
if (resolvedField === 'developmentPhase') {
|
|
191
|
+
// Auto-set instruction on worktree context
|
|
192
|
+
await svc.updateWorktree(id, worktreeId, { [wtField]: resolvedValue, instruction: resolvedValue });
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
await svc.updateWorktree(id, worktreeId, { [wtField]: resolvedValue });
|
|
196
|
+
}
|
|
197
|
+
// Auto-set slicePlan when archDoc changes on worktree
|
|
198
|
+
if (resolvedField === 'fileArch' && existing.projectPath) {
|
|
199
|
+
const archIndex = /^(\d+)-/.exec(resolvedValue);
|
|
200
|
+
if (archIndex) {
|
|
201
|
+
let planResolved = null;
|
|
202
|
+
try {
|
|
203
|
+
planResolved = resolveFileByIndex(existing.projectPath, 'fileSlicePlan', archIndex[1]);
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
const derived = resolvedValue.replace(/^(\d+)-arch\./, '$1-slices.');
|
|
207
|
+
if (derived !== resolvedValue)
|
|
208
|
+
planResolved = derived;
|
|
209
|
+
}
|
|
210
|
+
if (planResolved !== null) {
|
|
211
|
+
await svc.updateWorktree(id, worktreeId, { slicePlan: planResolved });
|
|
212
|
+
console.log(success(`Updated plan = ${planResolved} (auto-set from arch) on worktree context "${worktreeName}"`));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Auto-set activeTaskFile when activeSlice changes on worktree
|
|
217
|
+
if (resolvedField === 'fileSlice' && existing.projectPath) {
|
|
218
|
+
const sliceIndex = /^(\d+)-/.exec(resolvedValue);
|
|
219
|
+
if (sliceIndex) {
|
|
220
|
+
let tasksResolved = null;
|
|
221
|
+
try {
|
|
222
|
+
tasksResolved = resolveFileByIndex(existing.projectPath, 'fileTasks', sliceIndex[1]);
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
const derived = resolvedValue.replace(/^(\d+)-slice\./, '$1-tasks.');
|
|
226
|
+
if (derived !== resolvedValue)
|
|
227
|
+
tasksResolved = derived;
|
|
228
|
+
}
|
|
229
|
+
if (tasksResolved !== null) {
|
|
230
|
+
await svc.updateWorktree(id, worktreeId, { activeTaskFile: tasksResolved });
|
|
231
|
+
console.log(success(`Updated tasks = ${tasksResolved} (auto-set from slice) on worktree context "${worktreeName}"`));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const displayName = fieldDef?.aliases[0] ?? resolvedField;
|
|
236
|
+
console.log(success(`Updated ${displayName} = ${resolvedValue} on worktree context "${worktreeName}"`));
|
|
237
|
+
if (resolvedField === 'developmentPhase') {
|
|
238
|
+
console.log(success(`Updated instruction = ${resolvedValue} (auto-set from phase) on worktree context "${worktreeName}"`));
|
|
239
|
+
}
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
// Project-level update (no worktree, or --project-level, or non-worktree field)
|
|
154
243
|
if (resolvedField.startsWith('customData.')) {
|
|
155
244
|
const subField = resolvedField.split('.')[1];
|
|
156
245
|
const merged = { ...existing.customData, [subField]: resolvedValue };
|
|
157
246
|
await store.update(id, { customData: merged });
|
|
158
247
|
}
|
|
159
248
|
else if (resolvedField === 'developmentPhase') {
|
|
160
|
-
// Auto-set instruction to match when phase changes
|
|
161
249
|
await store.update(id, { [resolvedField]: resolvedValue, instruction: resolvedValue });
|
|
162
250
|
}
|
|
163
251
|
else {
|
|
164
252
|
await store.update(id, { [resolvedField]: resolvedValue });
|
|
165
253
|
}
|
|
166
|
-
// Auto-set fileSlicePlan when fileArch changes
|
|
254
|
+
// Auto-set fileSlicePlan when fileArch changes (project-level)
|
|
167
255
|
if (resolvedField === 'fileArch' && existing.projectPath) {
|
|
168
256
|
const archIndex = /^(\d+)-/.exec(resolvedValue);
|
|
169
257
|
if (archIndex) {
|
|
@@ -172,11 +260,9 @@ export async function projectSetAction(field, val, opts) {
|
|
|
172
260
|
planResolved = resolveFileByIndex(existing.projectPath, 'fileSlicePlan', archIndex[1]);
|
|
173
261
|
}
|
|
174
262
|
catch {
|
|
175
|
-
// File doesn't exist yet — derive stem from arch value
|
|
176
263
|
const derived = resolvedValue.replace(/^(\d+)-arch\./, '$1-slices.');
|
|
177
|
-
if (derived !== resolvedValue)
|
|
264
|
+
if (derived !== resolvedValue)
|
|
178
265
|
planResolved = derived;
|
|
179
|
-
}
|
|
180
266
|
}
|
|
181
267
|
if (planResolved !== null) {
|
|
182
268
|
await store.update(id, { fileSlicePlan: planResolved });
|
|
@@ -184,7 +270,7 @@ export async function projectSetAction(field, val, opts) {
|
|
|
184
270
|
}
|
|
185
271
|
}
|
|
186
272
|
}
|
|
187
|
-
// Auto-set fileTasks when fileSlice changes
|
|
273
|
+
// Auto-set fileTasks when fileSlice changes (project-level)
|
|
188
274
|
if (resolvedField === 'fileSlice' && existing.projectPath) {
|
|
189
275
|
const sliceIndex = /^(\d+)-/.exec(resolvedValue);
|
|
190
276
|
if (sliceIndex) {
|
|
@@ -193,11 +279,9 @@ export async function projectSetAction(field, val, opts) {
|
|
|
193
279
|
tasksResolved = resolveFileByIndex(existing.projectPath, 'fileTasks', sliceIndex[1]);
|
|
194
280
|
}
|
|
195
281
|
catch {
|
|
196
|
-
// File doesn't exist yet — derive stem from slice value
|
|
197
282
|
const derived = resolvedValue.replace(/^(\d+)-slice\./, '$1-tasks.');
|
|
198
|
-
if (derived !== resolvedValue)
|
|
283
|
+
if (derived !== resolvedValue)
|
|
199
284
|
tasksResolved = derived;
|
|
200
|
-
}
|
|
201
285
|
}
|
|
202
286
|
if (tasksResolved !== null) {
|
|
203
287
|
await store.update(id, { fileTasks: tasksResolved });
|
|
@@ -205,7 +289,6 @@ export async function projectSetAction(field, val, opts) {
|
|
|
205
289
|
}
|
|
206
290
|
}
|
|
207
291
|
}
|
|
208
|
-
// Show alias-friendly name in confirmation
|
|
209
292
|
const displayName = fieldDef?.aliases[0] ?? resolvedField;
|
|
210
293
|
console.log(success(`Updated ${displayName} = ${resolvedValue} on project ${existing.name}`));
|
|
211
294
|
if (resolvedField === 'developmentPhase') {
|
|
@@ -215,13 +298,22 @@ export async function projectSetAction(field, val, opts) {
|
|
|
215
298
|
/** Shared action handler for `cf get` and `cf project get`. */
|
|
216
299
|
export async function projectGetAction(opts) {
|
|
217
300
|
const store = new FileProjectStore();
|
|
218
|
-
const
|
|
219
|
-
const project = await store.getById(id);
|
|
301
|
+
const resolved = await resolveProjectWorktree({ project: opts.project }, store);
|
|
302
|
+
const project = await store.getById(resolved.id);
|
|
220
303
|
if (!project) {
|
|
221
|
-
throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
|
|
304
|
+
throw new UserError(`Project not found: '${resolved.id}'. Run cf project list to see available projects.`);
|
|
222
305
|
}
|
|
306
|
+
const worktreeId = resolved.worktreeId;
|
|
307
|
+
const worktree = worktreeId && !opts.projectLevel
|
|
308
|
+
? (project.worktrees ?? []).find((wt) => wt.id === worktreeId)
|
|
309
|
+
: undefined;
|
|
223
310
|
if (opts.json) {
|
|
224
|
-
|
|
311
|
+
if (worktree) {
|
|
312
|
+
printJson({ ...project, worktree });
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
printJson(project);
|
|
316
|
+
}
|
|
225
317
|
return;
|
|
226
318
|
}
|
|
227
319
|
const groupLabels = {
|
|
@@ -231,18 +323,42 @@ export async function projectGetAction(opts) {
|
|
|
231
323
|
metadata: 'Metadata',
|
|
232
324
|
custom: 'Custom',
|
|
233
325
|
};
|
|
326
|
+
// Show worktree header when active
|
|
327
|
+
if (worktree) {
|
|
328
|
+
console.log(`\n${label('Worktree')}`);
|
|
329
|
+
console.log(` ${label('Name:'.padEnd(16))}${valueStyle(worktree.name)}`);
|
|
330
|
+
console.log(` ${label('Range:'.padEnd(16))}${valueStyle(`${worktree.indexRange[0]}-${worktree.indexRange[1]}`)}`);
|
|
331
|
+
if (worktree.worktreePath) {
|
|
332
|
+
console.log(` ${label('Path:'.padEnd(16))}${valueStyle(worktree.worktreePath)}`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// Build a worktree overlay map for worktree-scoped fields
|
|
336
|
+
const wtOverlay = {};
|
|
337
|
+
if (worktree) {
|
|
338
|
+
wtOverlay['developmentPhase'] = worktree.developmentPhase;
|
|
339
|
+
wtOverlay['instruction'] = worktree.instruction;
|
|
340
|
+
wtOverlay['workType'] = worktree.workType;
|
|
341
|
+
wtOverlay['fileArch'] = worktree.archDoc;
|
|
342
|
+
wtOverlay['fileSlicePlan'] = worktree.slicePlan;
|
|
343
|
+
wtOverlay['fileSlice'] = worktree.activeSlice;
|
|
344
|
+
wtOverlay['fileTasks'] = worktree.activeTaskFile;
|
|
345
|
+
}
|
|
234
346
|
const projectRecord = project;
|
|
235
347
|
const customData = project.customData;
|
|
236
348
|
for (const group of FIELD_GROUPS) {
|
|
237
349
|
const groupFields = PROJECT_FIELDS.filter((f) => f.group === group);
|
|
238
350
|
console.log(`\n${label(groupLabels[group])}`);
|
|
239
351
|
for (const f of groupFields) {
|
|
240
|
-
// Read from customData sub-object for dot-notation fields
|
|
241
352
|
let v;
|
|
242
353
|
if (f.field.startsWith('customData.')) {
|
|
243
354
|
const subField = f.field.split('.')[1];
|
|
244
355
|
v = customData?.[subField];
|
|
245
356
|
}
|
|
357
|
+
else if (worktree && isWorktreeField(f.field)) {
|
|
358
|
+
// Worktree overlay: use worktree value if set, fall back to project
|
|
359
|
+
const wtVal = wtOverlay[f.field];
|
|
360
|
+
v = (wtVal !== undefined && wtVal !== '') ? wtVal : projectRecord[f.field];
|
|
361
|
+
}
|
|
246
362
|
else {
|
|
247
363
|
v = projectRecord[f.field];
|
|
248
364
|
}
|
|
@@ -280,8 +396,8 @@ export function registerProjectCommand(program) {
|
|
|
280
396
|
if (defaultRef) {
|
|
281
397
|
defaultProject = await findByNameOrId(defaultRef, store);
|
|
282
398
|
}
|
|
283
|
-
const
|
|
284
|
-
const activeId =
|
|
399
|
+
const cwdMatch = await findProjectByCwd(store);
|
|
400
|
+
const activeId = cwdMatch?.project.id ?? defaultProject?.id ?? null;
|
|
285
401
|
if (opts.json) {
|
|
286
402
|
printJson(projects.map((p) => ({
|
|
287
403
|
id: p.id,
|
|
@@ -313,6 +429,7 @@ export function registerProjectCommand(program) {
|
|
|
313
429
|
.description('Get details for the active project')
|
|
314
430
|
.option('--json', 'Output as JSON')
|
|
315
431
|
.option('--project <id>', 'Project ID or name (overrides default)')
|
|
432
|
+
.option('--project-level', 'Show project-level fields only (skip worktree overlay)')
|
|
316
433
|
.action(async (opts) => {
|
|
317
434
|
try {
|
|
318
435
|
await projectGetAction(opts);
|
|
@@ -325,6 +442,7 @@ export function registerProjectCommand(program) {
|
|
|
325
442
|
.command('set [field] [value]')
|
|
326
443
|
.description('Update a field on the active project')
|
|
327
444
|
.option('--project <id>', 'Project ID or name (overrides default)')
|
|
445
|
+
.option('--project-level', 'Force update at project level (skip worktree routing)')
|
|
328
446
|
.addHelpText('after', buildSettableFieldsHelp)
|
|
329
447
|
.action(async (field, val, opts) => {
|
|
330
448
|
if (!field || !val) {
|
|
@@ -366,14 +484,4 @@ export function registerProjectCommand(program) {
|
|
|
366
484
|
}
|
|
367
485
|
});
|
|
368
486
|
}
|
|
369
|
-
/** Prompt user for y/N confirmation via stdin. Returns true if confirmed. */
|
|
370
|
-
function askConfirmation(prompt) {
|
|
371
|
-
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
372
|
-
return new Promise((resolve) => {
|
|
373
|
-
rl.question(prompt, (answer) => {
|
|
374
|
-
rl.close();
|
|
375
|
-
resolve(answer.trim().toLowerCase() === 'y');
|
|
376
|
-
});
|
|
377
|
-
});
|
|
378
|
-
}
|
|
379
487
|
//# sourceMappingURL=project.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAExJ,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,YAAY,GACb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE/E;;;GAGG;AACH,KAAK,UAAU,mBAAmB,CAChC,OAAoB,EACpB,KAAa,EACb,KAAa;IAEb,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAChE,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAEhE,MAAM,WAAW,GAAG,mBAAmB,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAChF,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,OAAO,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,uEAAuE;AACvE,SAAS,WAAW,CAAC,CAAS;IAC5B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IAC3B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChE,OAAO,CAAC,CAAC;AACX,CAAC;AAGD,sDAAsD;AACtD,SAAS,aAAa;IACpB,MAAM,WAAW,GAA+B;QAC9C,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,WAAW;QACtB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,QAAQ;KACjB,CAAC;IAEF,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,UAAU,GAAyC,EAAE,CAAC;IAE5D,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QAEpE,sBAAsB;QACtB,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvB,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YACnG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAClC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEzB,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;gBACjB,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAE/E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACxC,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,uBAAuB;IACrC,MAAM,WAAW,GAA+B;QAC9C,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,WAAW;QACtB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,QAAQ;KACjB,CAAC;IAEF,MAAM,KAAK,GAAa,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAEjD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CACxC,CAAC;QACF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEvC,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,sEAAsE,CAAC,CAAC;IACvF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAa,EACb,GAAW,EACX,IAA0B;IAE1B,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,SAAS,CACjB,mBAAmB,KAAK,uDAAuD,CAChF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,CAAC;IACvE,IAAI,QAAQ,EAAE,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,SAAS,CAAC,UAAU,aAAa,mCAAmC,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,aAAa,GAAG,GAAG,CAAC;IACxB,IAAI,aAAa,KAAK,kBAAkB,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;QAC5E,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACvD,MAAM,IAAI,SAAS,CACjB,kBAAkB,GAAG,gBAAgB,aAAa,sBAAsB,OAAO,EAAE,CAClF,CAAC;QACJ,CAAC;QACD,aAAa,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACpE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,SAAS,CAAC,UAAU,CAAC,KAAM,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACrC,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,SAAS,CAAC,uBAAuB,EAAE,mDAAmD,CAAC,CAAC;IACpG,CAAC;IAED,0EAA0E;IAC1E,oEAAoE;IACpE,IAAI,QAAQ,EAAE,KAAK,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC3F,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;YACxF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,aAAa,GAAG,QAAQ,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;YACpD,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;YAClF,IAAI,OAAO,EAAE,CAAC;gBACZ,aAAa,GAAG,OAAO,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,SAAS,CACjB,2BAA2B,aAAa,gBAAgB,aAAa,kDAAkD,CACxH,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,IAAI,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;QACrE,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;SAAM,IAAI,aAAa,KAAK,kBAAkB,EAAE,CAAC;QAChD,mDAAmD;QACnD,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;IACzF,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,+CAA+C;IAC/C,IAAI,aAAa,KAAK,UAAU,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,YAAY,GAAkB,IAAI,CAAC;YACvC,IAAI,CAAC;gBACH,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,WAAW,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACzF,CAAC;YAAC,MAAM,CAAC;gBACP,uDAAuD;gBACvD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;gBACrE,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;oBAC9B,YAAY,GAAG,OAAO,CAAC;gBACzB,CAAC;YACH,CAAC;YACD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC1B,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,YAAY,uBAAuB,CAAC,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,IAAI,aAAa,KAAK,WAAW,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,aAAa,GAAkB,IAAI,CAAC;YACxC,IAAI,CAAC;gBACH,aAAa,GAAG,kBAAkB,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YACvF,CAAC;YAAC,MAAM,CAAC;gBACP,wDAAwD;gBACxD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;gBACrE,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;oBAC9B,aAAa,GAAG,OAAO,CAAC;gBAC1B,CAAC;YACH,CAAC;YACD,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;gBAC3B,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,aAAa,wBAAwB,CAAC,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,MAAM,WAAW,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,WAAW,MAAM,aAAa,eAAe,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9F,IAAI,aAAa,KAAK,kBAAkB,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,yBAAyB,aAAa,wBAAwB,CAAC,CAAC,CAAC;IACvF,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAA0C;IAE1C,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACrC,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAExC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,SAAS,CAAC,uBAAuB,EAAE,mDAAmD,CAAC,CAAC;IACpG,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,SAAS,CAAC,OAAO,CAAC,CAAC;QACnB,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAA+B;QAC9C,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,WAAW;QACtB,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,QAAQ;KACjB,CAAC;IAEF,MAAM,aAAa,GAAG,OAA6C,CAAC;IACpE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAiD,CAAC;IAE7E,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QAEpE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAE9C,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,0DAA0D;YAC1D,IAAI,CAAU,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,CAAC,GAAG,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,QAAQ,GAAG,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,UAAU,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,CAAC,IAA0B,EAAE,EAAE;QACrC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,aAAa,EAAE,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,YAAY,CAAC,gCAAgC,GAAG,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;QACnH,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;YAEtC,wEAAwE;YACxE,MAAM,EAAE,GAAG,IAAI,aAAa,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAe,CAAC;YACrE,IAAI,cAAc,GAAuB,IAAI,CAAC;YAC9C,IAAI,UAAU,EAAE,CAAC;gBACf,cAAc,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC3D,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,UAAU,EAAE,EAAE,IAAI,cAAc,EAAE,EAAE,IAAI,IAAI,CAAC;YAE9D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC7B,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,QAAQ;iBAC5B,CAAC,CAAC,CAAC,CAAC;gBACL,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC9B,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;gBACjC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;gBACpB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;gBAC9C,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;gBAChC,OAAO,MAAM;oBACX,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;oBAChD,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAClC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CACzC,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,IAA0C,EAAE,EAAE;QAC3D,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;SAClE,WAAW,CAAC,OAAO,EAAE,uBAAuB,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,KAAyB,EAAE,GAAuB,EAAE,IAA0B,EAAE,EAAE;QAC/F,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,2FAA2F,CAAC,CAAC;YACzG,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,qEAAqE,CAAC;SAClF,MAAM,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;SAClE,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,QAA4B,EAAE,IAAyC,EAAE,EAAE;QACxF,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,gBAAgB,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAExC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,SAAS,CAAC,uBAAuB,EAAE,mDAAmD,CAAC,CAAC;YACpG,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,mBAAmB,OAAO,CAAC,IAAI,QAAQ,OAAO,CAAC,WAAW,IAAI,SAAS,iEAAiE,CACzI,CAAC;gBACF,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC1B,OAAO;gBACT,CAAC;YACH,CAAC;YAED,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,6EAA6E;AAC7E,SAAS,eAAe,CAAC,MAAc;IACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YAC7B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slice.d.ts","sourceRoot":"","sources":["../../src/commands/slice.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"slice.d.ts","sourceRoot":"","sources":["../../src/commands/slice.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6G3D"}
|
package/dist/commands/slice.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
2
|
import { FileProjectStore, ArtifactIntrospector, resolveArtifactPath } from '@context-forge/core/node';
|
|
3
3
|
import { extractSliceIndex } from '@context-forge/core/node';
|
|
4
|
-
import {
|
|
4
|
+
import { resolveProjectWorktree } from '../utils/project.js';
|
|
5
|
+
import { applyWorktreeOverlay } from '../utils/worktree-overlay.js';
|
|
5
6
|
import { handleError, UserError } from '../utils/errors.js';
|
|
6
7
|
import { printJson } from '../output/formatter.js';
|
|
7
8
|
import { renderTable } from '../output/tables.js';
|
|
@@ -18,11 +19,12 @@ export function registerSliceCommand(program) {
|
|
|
18
19
|
.action(async (opts) => {
|
|
19
20
|
try {
|
|
20
21
|
const store = new FileProjectStore();
|
|
21
|
-
const { id } = await
|
|
22
|
-
const
|
|
23
|
-
if (!
|
|
22
|
+
const { id, worktreeId } = await resolveProjectWorktree({ project: opts.project }, store);
|
|
23
|
+
const rawProject = await store.getById(id);
|
|
24
|
+
if (!rawProject) {
|
|
24
25
|
throw new UserError(`Project not found: '${id}'.`);
|
|
25
26
|
}
|
|
27
|
+
const project = worktreeId ? applyWorktreeOverlay(rawProject, worktreeId) : rawProject;
|
|
26
28
|
if (!project.fileSlicePlan) {
|
|
27
29
|
throw new UserError('No slice plan configured. Set one with: cf set slicePlan <path>');
|
|
28
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slice.js","sourceRoot":"","sources":["../../src/commands/slice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"slice.js","sourceRoot":"","sources":["../../src/commands/slice.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkK5D"}
|
package/dist/commands/status.js
CHANGED
|
@@ -1,39 +1,124 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { FileProjectStore, WorkflowNavigator, GitWorktreeDiscovery, parseSlicePlan, resolveArtifactPath } from '@context-forge/core/node';
|
|
3
|
+
import { resolveProjectWorktree, findWorktreeByNameOrId } from '../utils/project.js';
|
|
4
|
+
import { applyWorktreeOverlay } from '../utils/worktree-overlay.js';
|
|
3
5
|
import { handleError, UserError } from '../utils/errors.js';
|
|
4
6
|
import { printJson } from '../output/formatter.js';
|
|
5
|
-
import {
|
|
7
|
+
import { renderTable } from '../output/tables.js';
|
|
8
|
+
import { label, value as valueStyle, success, dim, warn } from '../output/styles.js';
|
|
6
9
|
export function registerStatusCommand(program) {
|
|
7
10
|
program
|
|
8
11
|
.command('status')
|
|
9
12
|
.description('Show workflow status for the active project')
|
|
10
13
|
.option('--json', 'Output as JSON')
|
|
11
14
|
.option('--project <id>', 'Project ID or name (overrides default)')
|
|
15
|
+
.option('--worktree <name>', 'Show status for a specific worktree')
|
|
16
|
+
.option('--worktrees', 'Show summary of all worktrees')
|
|
12
17
|
.action(async (opts) => {
|
|
13
18
|
try {
|
|
19
|
+
if (opts.worktree && opts.worktrees) {
|
|
20
|
+
throw new UserError('--worktree and --worktrees are mutually exclusive.');
|
|
21
|
+
}
|
|
14
22
|
const store = new FileProjectStore();
|
|
15
|
-
const { id, source } = await
|
|
16
|
-
const
|
|
17
|
-
if (!
|
|
23
|
+
const { id, source, worktreeId: cwdWorktreeId } = await resolveProjectWorktree({ project: opts.project }, store);
|
|
24
|
+
const rawProject = await store.getById(id);
|
|
25
|
+
if (!rawProject) {
|
|
18
26
|
throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
|
|
19
27
|
}
|
|
28
|
+
// ── --worktrees dashboard ──────────────────────────────────────────
|
|
29
|
+
if (opts.worktrees) {
|
|
30
|
+
const worktrees = rawProject.worktrees ?? [];
|
|
31
|
+
if (worktrees.length === 0) {
|
|
32
|
+
if (opts.json) {
|
|
33
|
+
printJson([]);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log(dim('No worktrees configured.'));
|
|
37
|
+
}
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const summaries = await Promise.all(worktrees.map(async (wt) => {
|
|
41
|
+
const overlaid = applyWorktreeOverlay(rawProject, wt.id);
|
|
42
|
+
let sliceProgress = '—';
|
|
43
|
+
if (overlaid.fileSlicePlan && rawProject.projectPath) {
|
|
44
|
+
const planRelPath = resolveArtifactPath('fileSlicePlan', overlaid.fileSlicePlan);
|
|
45
|
+
if (planRelPath) {
|
|
46
|
+
try {
|
|
47
|
+
const planPath = join(rawProject.projectPath, planRelPath);
|
|
48
|
+
const plan = await parseSlicePlan(planPath);
|
|
49
|
+
sliceProgress = `${plan.completedSlices}/${plan.totalSlices} slices`;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Plan file may not exist on disk
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const isActive = wt.id === cwdWorktreeId;
|
|
57
|
+
return {
|
|
58
|
+
id: wt.id,
|
|
59
|
+
name: wt.name,
|
|
60
|
+
range: wt.indexRange ? `${wt.indexRange[0]}-${wt.indexRange[1]}` : '—',
|
|
61
|
+
phase: overlaid.developmentPhase || '—',
|
|
62
|
+
slice: overlaid.fileSlice || '—',
|
|
63
|
+
progress: sliceProgress,
|
|
64
|
+
isActive,
|
|
65
|
+
};
|
|
66
|
+
}));
|
|
67
|
+
if (opts.json) {
|
|
68
|
+
printJson(summaries);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
console.log(label('Project: ') + valueStyle(rawProject.name));
|
|
72
|
+
console.log('');
|
|
73
|
+
const rows = summaries.map((s) => {
|
|
74
|
+
const activeSuffix = s.isActive ? success(' ← active') : '';
|
|
75
|
+
return [s.name + activeSuffix, s.range, s.phase, s.slice, s.progress];
|
|
76
|
+
});
|
|
77
|
+
console.log(label('Worktrees'));
|
|
78
|
+
console.log(renderTable(['Name', 'Range', 'Phase', 'Slice', 'Progress'], rows));
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// ── Single worktree / default status ───────────────────────────────
|
|
82
|
+
// Resolve worktree: explicit --worktree flag takes priority over CWD resolution
|
|
83
|
+
let resolvedWorktreeId = cwdWorktreeId;
|
|
84
|
+
if (opts.worktree) {
|
|
85
|
+
const wt = await findWorktreeByNameOrId(id, opts.worktree, store);
|
|
86
|
+
if (!wt) {
|
|
87
|
+
throw new UserError(`Worktree '${opts.worktree}' not found. Run cf worktree list to see available worktrees.`);
|
|
88
|
+
}
|
|
89
|
+
resolvedWorktreeId = wt.id;
|
|
90
|
+
}
|
|
91
|
+
// Apply worktree overlay so navigator and display use correct fields
|
|
92
|
+
const project = resolvedWorktreeId ? applyWorktreeOverlay(rawProject, resolvedWorktreeId) : rawProject;
|
|
93
|
+
const worktreeCtx = resolvedWorktreeId
|
|
94
|
+
? (rawProject.worktrees ?? []).find((w) => w.id === resolvedWorktreeId)
|
|
95
|
+
: undefined;
|
|
20
96
|
const nav = new WorkflowNavigator();
|
|
21
97
|
const status = await nav.getStatus(project);
|
|
22
98
|
if (opts.json) {
|
|
23
|
-
printJson({ ...status, resolutionSource: source });
|
|
99
|
+
printJson({ ...status, resolutionSource: source, ...(worktreeCtx ? { worktree: worktreeCtx } : {}) });
|
|
24
100
|
return;
|
|
25
101
|
}
|
|
26
102
|
const sourceLabels = {
|
|
27
103
|
flag: '(--project flag)',
|
|
28
104
|
cwd: '(from CWD)',
|
|
105
|
+
worktree: '(from CWD)',
|
|
29
106
|
default: '(default)',
|
|
30
107
|
none: '',
|
|
31
108
|
};
|
|
109
|
+
// When worktree is resolved, show a dedicated Worktree line instead of
|
|
110
|
+
// embedding worktree info in the Project line's source label.
|
|
32
111
|
const sourceLabel = sourceLabels[source];
|
|
33
112
|
const projectLine = sourceLabel
|
|
34
113
|
? `${valueStyle(status.project)} ${dim(sourceLabel)}`
|
|
35
114
|
: valueStyle(status.project);
|
|
36
115
|
console.log(label('Project: ') + projectLine);
|
|
116
|
+
if (worktreeCtx) {
|
|
117
|
+
const range = worktreeCtx.indexRange
|
|
118
|
+
? ` [${worktreeCtx.indexRange[0]}-${worktreeCtx.indexRange[1]}]`
|
|
119
|
+
: '';
|
|
120
|
+
console.log(label('Worktree: ') + valueStyle(`${worktreeCtx.name}${range}`));
|
|
121
|
+
}
|
|
37
122
|
console.log(label('Date: ') + valueStyle(project.dateProject || 'Not set'));
|
|
38
123
|
console.log(label('Phase: ') + valueStyle(status.phase ?? 'Not set'));
|
|
39
124
|
console.log(label('Arch: ') + valueStyle(project.fileArch || 'Not set'));
|
|
@@ -54,8 +139,64 @@ export function registerStatusCommand(program) {
|
|
|
54
139
|
}
|
|
55
140
|
}
|
|
56
141
|
catch (err) {
|
|
142
|
+
// First-run messaging: suggest cf worktree init if CWD is a git worktree of a known project
|
|
143
|
+
if (err instanceof UserError) {
|
|
144
|
+
const shown = await showWorktreeSuggestion();
|
|
145
|
+
if (shown)
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
57
148
|
handleError(err);
|
|
58
149
|
}
|
|
59
150
|
});
|
|
60
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* When project resolution fails, check if CWD is a git worktree of a known project.
|
|
154
|
+
* If so, display a helpful suggestion to create a worktree context.
|
|
155
|
+
* Returns true if a suggestion was displayed.
|
|
156
|
+
*/
|
|
157
|
+
async function showWorktreeSuggestion() {
|
|
158
|
+
try {
|
|
159
|
+
const discovery = new GitWorktreeDiscovery();
|
|
160
|
+
const gitWorktrees = await discovery.listWorktrees(process.cwd());
|
|
161
|
+
if (gitWorktrees.length === 0)
|
|
162
|
+
return false;
|
|
163
|
+
// Main worktree is the first entry from git worktree list
|
|
164
|
+
const mainWorktreePath = gitWorktrees[0].path;
|
|
165
|
+
// Check if main worktree path matches a registered project
|
|
166
|
+
const store = new FileProjectStore();
|
|
167
|
+
const projects = await store.getAll();
|
|
168
|
+
const matchingProject = projects.find((p) => p.projectPath === mainWorktreePath);
|
|
169
|
+
if (!matchingProject)
|
|
170
|
+
return false;
|
|
171
|
+
// Derive suggested name from current git branch
|
|
172
|
+
const currentBranch = gitWorktrees.find((wt) => {
|
|
173
|
+
const cwd = process.cwd();
|
|
174
|
+
return wt.path === cwd || cwd.startsWith(wt.path + '/');
|
|
175
|
+
})?.branch;
|
|
176
|
+
let suggestedName = 'my-worktree';
|
|
177
|
+
if (currentBranch) {
|
|
178
|
+
// Strip refs/heads/ and common prefixes like feature/, bugfix/
|
|
179
|
+
suggestedName = currentBranch
|
|
180
|
+
.replace(/^refs\/heads\//, '')
|
|
181
|
+
.replace(/^(feature|bugfix|hotfix|fix|chore|refactor)\//, '');
|
|
182
|
+
}
|
|
183
|
+
// Suggest next available 100-block range
|
|
184
|
+
const existingWorktrees = matchingProject.worktrees ?? [];
|
|
185
|
+
let maxEnd = 99;
|
|
186
|
+
for (const wt of existingWorktrees) {
|
|
187
|
+
if (wt.indexRange[1] > maxEnd)
|
|
188
|
+
maxEnd = wt.indexRange[1];
|
|
189
|
+
}
|
|
190
|
+
const rangeStart = Math.ceil((maxEnd + 1) / 100) * 100;
|
|
191
|
+
const rangeEnd = rangeStart + 99;
|
|
192
|
+
console.log('');
|
|
193
|
+
console.log(warn(`This directory appears to be a git worktree of project '${matchingProject.name}'.`));
|
|
194
|
+
console.log(`Create a worktree context: ${dim(`cf worktree init --name '${suggestedName}' --range ${rangeStart}-${rangeEnd}`)}`);
|
|
195
|
+
console.log('');
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
61
202
|
//# sourceMappingURL=status.js.map
|