specweave 0.28.68 → 0.29.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/CLAUDE.md +3 -2
- package/README.md +19 -2
- package/dist/src/cli/commands/discrepancies.d.ts +89 -0
- package/dist/src/cli/commands/discrepancies.d.ts.map +1 -0
- package/dist/src/cli/commands/discrepancies.js +385 -0
- package/dist/src/cli/commands/discrepancies.js.map +1 -0
- package/dist/src/cli/commands/notifications.d.ts +70 -0
- package/dist/src/cli/commands/notifications.d.ts.map +1 -0
- package/dist/src/cli/commands/notifications.js +236 -0
- package/dist/src/cli/commands/notifications.js.map +1 -0
- package/dist/src/cli/commands/sync-logs.d.ts +54 -0
- package/dist/src/cli/commands/sync-logs.d.ts.map +1 -0
- package/dist/src/cli/commands/sync-logs.js +240 -0
- package/dist/src/cli/commands/sync-logs.js.map +1 -0
- package/dist/src/cli/commands/sync-monitor.d.ts +42 -0
- package/dist/src/cli/commands/sync-monitor.d.ts.map +1 -0
- package/dist/src/cli/commands/sync-monitor.js +191 -0
- package/dist/src/cli/commands/sync-monitor.js.map +1 -0
- package/dist/src/cli/helpers/init/brownfield-analysis.d.ts +45 -0
- package/dist/src/cli/helpers/init/brownfield-analysis.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/brownfield-analysis.js +431 -0
- package/dist/src/cli/helpers/init/brownfield-analysis.js.map +1 -0
- package/dist/src/cli/helpers/init/index.d.ts +1 -0
- package/dist/src/cli/helpers/init/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/index.js +2 -0
- package/dist/src/cli/helpers/init/index.js.map +1 -1
- package/dist/src/cli/workers/brownfield-worker.d.ts +66 -0
- package/dist/src/cli/workers/brownfield-worker.d.ts.map +1 -0
- package/dist/src/cli/workers/brownfield-worker.js +417 -0
- package/dist/src/cli/workers/brownfield-worker.js.map +1 -0
- package/dist/src/core/background/brownfield-launcher.d.ts +86 -0
- package/dist/src/core/background/brownfield-launcher.d.ts.map +1 -0
- package/dist/src/core/background/brownfield-launcher.js +295 -0
- package/dist/src/core/background/brownfield-launcher.js.map +1 -0
- package/dist/src/core/background/index.d.ts +2 -0
- package/dist/src/core/background/index.d.ts.map +1 -1
- package/dist/src/core/background/index.js +2 -0
- package/dist/src/core/background/index.js.map +1 -1
- package/dist/src/core/background/types.d.ts +23 -2
- package/dist/src/core/background/types.d.ts.map +1 -1
- package/dist/src/core/config/index.d.ts +1 -0
- package/dist/src/core/config/index.d.ts.map +1 -1
- package/dist/src/core/config/index.js +1 -0
- package/dist/src/core/config/index.js.map +1 -1
- package/dist/src/core/config/types.d.ts +6 -0
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/dashboard/dashboard-data.d.ts +156 -0
- package/dist/src/core/dashboard/dashboard-data.d.ts.map +1 -0
- package/dist/src/core/dashboard/dashboard-data.js +191 -0
- package/dist/src/core/dashboard/dashboard-data.js.map +1 -0
- package/dist/src/core/dashboard/index.d.ts +9 -0
- package/dist/src/core/dashboard/index.d.ts.map +1 -0
- package/dist/src/core/dashboard/index.js +9 -0
- package/dist/src/core/dashboard/index.js.map +1 -0
- package/dist/src/core/discrepancy/analyzers/api-route-analyzer.d.ts +77 -0
- package/dist/src/core/discrepancy/analyzers/api-route-analyzer.d.ts.map +1 -0
- package/dist/src/core/discrepancy/analyzers/api-route-analyzer.js +286 -0
- package/dist/src/core/discrepancy/analyzers/api-route-analyzer.js.map +1 -0
- package/dist/src/core/discrepancy/analyzers/index.d.ts +8 -0
- package/dist/src/core/discrepancy/analyzers/index.d.ts.map +1 -0
- package/dist/src/core/discrepancy/analyzers/index.js +8 -0
- package/dist/src/core/discrepancy/analyzers/index.js.map +1 -0
- package/dist/src/core/discrepancy/analyzers/typescript-analyzer.d.ts +96 -0
- package/dist/src/core/discrepancy/analyzers/typescript-analyzer.d.ts.map +1 -0
- package/dist/src/core/discrepancy/analyzers/typescript-analyzer.js +247 -0
- package/dist/src/core/discrepancy/analyzers/typescript-analyzer.js.map +1 -0
- package/dist/src/core/discrepancy/brownfield-manager.d.ts +88 -0
- package/dist/src/core/discrepancy/brownfield-manager.d.ts.map +1 -0
- package/dist/src/core/discrepancy/brownfield-manager.js +520 -0
- package/dist/src/core/discrepancy/brownfield-manager.js.map +1 -0
- package/dist/src/core/discrepancy/brownfield-types.d.ts +174 -0
- package/dist/src/core/discrepancy/brownfield-types.d.ts.map +1 -0
- package/dist/src/core/discrepancy/brownfield-types.js +11 -0
- package/dist/src/core/discrepancy/brownfield-types.js.map +1 -0
- package/dist/src/core/discrepancy/detector.d.ts +92 -0
- package/dist/src/core/discrepancy/detector.d.ts.map +1 -0
- package/dist/src/core/discrepancy/detector.js +346 -0
- package/dist/src/core/discrepancy/detector.js.map +1 -0
- package/dist/src/core/discrepancy/increment-generator.d.ts +51 -0
- package/dist/src/core/discrepancy/increment-generator.d.ts.map +1 -0
- package/dist/src/core/discrepancy/increment-generator.js +234 -0
- package/dist/src/core/discrepancy/increment-generator.js.map +1 -0
- package/dist/src/core/discrepancy/index.d.ts +18 -0
- package/dist/src/core/discrepancy/index.d.ts.map +1 -0
- package/dist/src/core/discrepancy/index.js +24 -0
- package/dist/src/core/discrepancy/index.js.map +1 -0
- package/dist/src/core/discrepancy/severity-classifier.d.ts +81 -0
- package/dist/src/core/discrepancy/severity-classifier.d.ts.map +1 -0
- package/dist/src/core/discrepancy/severity-classifier.js +289 -0
- package/dist/src/core/discrepancy/severity-classifier.js.map +1 -0
- package/dist/src/core/discrepancy/spec-parser.d.ts +74 -0
- package/dist/src/core/discrepancy/spec-parser.d.ts.map +1 -0
- package/dist/src/core/discrepancy/spec-parser.js +213 -0
- package/dist/src/core/discrepancy/spec-parser.js.map +1 -0
- package/dist/src/core/discrepancy/update-recommender.d.ts +77 -0
- package/dist/src/core/discrepancy/update-recommender.d.ts.map +1 -0
- package/dist/src/core/discrepancy/update-recommender.js +323 -0
- package/dist/src/core/discrepancy/update-recommender.js.map +1 -0
- package/dist/src/core/living-docs/living-docs-sync.d.ts +13 -16
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +31 -112
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/logs/index.d.ts +10 -0
- package/dist/src/core/logs/index.d.ts.map +1 -0
- package/dist/src/core/logs/index.js +10 -0
- package/dist/src/core/logs/index.js.map +1 -0
- package/dist/src/core/logs/log-aggregator.d.ts +130 -0
- package/dist/src/core/logs/log-aggregator.d.ts.map +1 -0
- package/dist/src/core/logs/log-aggregator.js +206 -0
- package/dist/src/core/logs/log-aggregator.js.map +1 -0
- package/dist/src/core/logs/log-exporter.d.ts +81 -0
- package/dist/src/core/logs/log-exporter.d.ts.map +1 -0
- package/dist/src/core/logs/log-exporter.js +141 -0
- package/dist/src/core/logs/log-exporter.js.map +1 -0
- package/dist/src/core/notifications/command-integration.d.ts +82 -0
- package/dist/src/core/notifications/command-integration.d.ts.map +1 -0
- package/dist/src/core/notifications/command-integration.js +80 -0
- package/dist/src/core/notifications/command-integration.js.map +1 -0
- package/dist/src/core/notifications/index.d.ts +12 -0
- package/dist/src/core/notifications/index.d.ts.map +1 -0
- package/dist/src/core/notifications/index.js +12 -0
- package/dist/src/core/notifications/index.js.map +1 -0
- package/dist/src/core/notifications/notification-display.d.ts +70 -0
- package/dist/src/core/notifications/notification-display.d.ts.map +1 -0
- package/dist/src/core/notifications/notification-display.js +177 -0
- package/dist/src/core/notifications/notification-display.js.map +1 -0
- package/dist/src/core/notifications/notification-manager.d.ts +126 -0
- package/dist/src/core/notifications/notification-manager.d.ts.map +1 -0
- package/dist/src/core/notifications/notification-manager.js +287 -0
- package/dist/src/core/notifications/notification-manager.js.map +1 -0
- package/dist/src/core/notifications/notification-types.d.ts +159 -0
- package/dist/src/core/notifications/notification-types.d.ts.map +1 -0
- package/dist/src/core/notifications/notification-types.js +93 -0
- package/dist/src/core/notifications/notification-types.js.map +1 -0
- package/dist/src/core/scheduler/index.d.ts +11 -0
- package/dist/src/core/scheduler/index.d.ts.map +1 -0
- package/dist/src/core/scheduler/index.js +11 -0
- package/dist/src/core/scheduler/index.js.map +1 -0
- package/dist/src/core/scheduler/job-scheduler.d.ts +179 -0
- package/dist/src/core/scheduler/job-scheduler.d.ts.map +1 -0
- package/dist/src/core/scheduler/job-scheduler.js +282 -0
- package/dist/src/core/scheduler/job-scheduler.js.map +1 -0
- package/dist/src/core/scheduler/schedule-persistence.d.ts +83 -0
- package/dist/src/core/scheduler/schedule-persistence.d.ts.map +1 -0
- package/dist/src/core/scheduler/schedule-persistence.js +180 -0
- package/dist/src/core/scheduler/schedule-persistence.js.map +1 -0
- package/dist/src/core/scheduler/scheduled-job.d.ts +188 -0
- package/dist/src/core/scheduler/scheduled-job.d.ts.map +1 -0
- package/dist/src/core/scheduler/scheduled-job.js +182 -0
- package/dist/src/core/scheduler/scheduled-job.js.map +1 -0
- package/dist/src/core/sync/permission-enforcer.d.ts +206 -0
- package/dist/src/core/sync/permission-enforcer.d.ts.map +1 -0
- package/dist/src/core/sync/permission-enforcer.js +268 -0
- package/dist/src/core/sync/permission-enforcer.js.map +1 -0
- package/dist/src/core/sync/sync-audit-logger.d.ts +217 -0
- package/dist/src/core/sync/sync-audit-logger.d.ts.map +1 -0
- package/dist/src/core/sync/sync-audit-logger.js +327 -0
- package/dist/src/core/sync/sync-audit-logger.js.map +1 -0
- package/dist/src/core/sync/sync-interceptor.d.ts +190 -0
- package/dist/src/core/sync/sync-interceptor.d.ts.map +1 -0
- package/dist/src/core/sync/sync-interceptor.js +224 -0
- package/dist/src/core/sync/sync-interceptor.js.map +1 -0
- package/dist/src/core/types/increment-metadata.d.ts +5 -2
- package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
- package/dist/src/core/types/sync-config.d.ts +267 -0
- package/dist/src/core/types/sync-config.d.ts.map +1 -0
- package/dist/src/core/types/sync-config.js +304 -0
- package/dist/src/core/types/sync-config.js.map +1 -0
- package/dist/src/hooks/index.d.ts +11 -0
- package/dist/src/hooks/index.d.ts.map +1 -0
- package/dist/src/hooks/index.js +11 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/hooks/platform.d.ts +125 -0
- package/dist/src/hooks/platform.d.ts.map +1 -0
- package/dist/src/hooks/platform.js +325 -0
- package/dist/src/hooks/platform.js.map +1 -0
- package/dist/src/hooks/processor.d.ts +20 -0
- package/dist/src/hooks/processor.d.ts.map +1 -0
- package/dist/src/hooks/processor.js +317 -0
- package/dist/src/hooks/processor.js.map +1 -0
- package/dist/src/hooks/scheduler-startup.d.ts +19 -0
- package/dist/src/hooks/scheduler-startup.d.ts.map +1 -0
- package/dist/src/hooks/scheduler-startup.js +92 -0
- package/dist/src/hooks/scheduler-startup.js.map +1 -0
- package/dist/src/hooks/session-start.d.ts +16 -0
- package/dist/src/hooks/session-start.d.ts.map +1 -0
- package/dist/src/hooks/session-start.js +92 -0
- package/dist/src/hooks/session-start.js.map +1 -0
- package/dist/src/importers/duplicate-detector.d.ts +13 -2
- package/dist/src/importers/duplicate-detector.d.ts.map +1 -1
- package/dist/src/importers/duplicate-detector.js +21 -2
- package/dist/src/importers/duplicate-detector.js.map +1 -1
- package/dist/src/importers/item-converter.d.ts +41 -2
- package/dist/src/importers/item-converter.d.ts.map +1 -1
- package/dist/src/importers/item-converter.js +225 -38
- package/dist/src/importers/item-converter.js.map +1 -1
- package/dist/src/living-docs/fs-id-allocator.d.ts +7 -0
- package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -1
- package/dist/src/living-docs/fs-id-allocator.js +30 -4
- package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
- package/dist/src/sync/ado-sync-wrapper.d.ts +137 -0
- package/dist/src/sync/ado-sync-wrapper.d.ts.map +1 -0
- package/dist/src/sync/ado-sync-wrapper.js +148 -0
- package/dist/src/sync/ado-sync-wrapper.js.map +1 -0
- package/dist/src/sync/github-sync-wrapper.d.ts +195 -0
- package/dist/src/sync/github-sync-wrapper.d.ts.map +1 -0
- package/dist/src/sync/github-sync-wrapper.js +220 -0
- package/dist/src/sync/github-sync-wrapper.js.map +1 -0
- package/dist/src/sync/jira-sync-wrapper.d.ts +155 -0
- package/dist/src/sync/jira-sync-wrapper.d.ts.map +1 -0
- package/dist/src/sync/jira-sync-wrapper.js +175 -0
- package/dist/src/sync/jira-sync-wrapper.js.map +1 -0
- package/dist/src/utils/feature-id-derivation.d.ts +58 -0
- package/dist/src/utils/feature-id-derivation.d.ts.map +1 -0
- package/dist/src/utils/feature-id-derivation.js +77 -0
- package/dist/src/utils/feature-id-derivation.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/commands/specweave-discrepancies.md +141 -0
- package/plugins/specweave/commands/specweave-discrepancy-to-increment.md +160 -0
- package/plugins/specweave/commands/specweave-jobs.md +45 -2
- package/plugins/specweave/commands/specweave-notifications.md +92 -0
- package/plugins/specweave/commands/specweave-sync-logs.md +131 -0
- package/plugins/specweave/commands/specweave-sync-monitor.md +57 -0
- package/plugins/specweave/hooks/hooks.json +3 -3
- package/plugins/specweave/hooks/lib/scheduler-startup.sh +72 -0
- package/plugins/specweave/hooks/universal/dispatcher.mjs +246 -0
- package/plugins/specweave/hooks/universal/session-start.cmd +16 -0
- package/plugins/specweave/hooks/universal/session-start.ps1 +16 -0
- package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +14 -5
- package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +5 -2
- package/plugins/specweave/skills/discrepancy-viewer.md +154 -0
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +34 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +51 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discrepancy to Increment Generator
|
|
3
|
+
*
|
|
4
|
+
* Converts brownfield discrepancies into actionable increments.
|
|
5
|
+
*/
|
|
6
|
+
import { Logger } from '../../utils/logger.js';
|
|
7
|
+
import { BrownfieldDiscrepancy } from './brownfield-types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Options for generating an increment from discrepancies
|
|
10
|
+
*/
|
|
11
|
+
export interface GenerateIncrementOptions {
|
|
12
|
+
discrepancyIds: string[];
|
|
13
|
+
projectPath: string;
|
|
14
|
+
incrementTitle?: string;
|
|
15
|
+
logger?: Logger;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Result of increment generation
|
|
19
|
+
*/
|
|
20
|
+
export interface GenerateIncrementResult {
|
|
21
|
+
success: boolean;
|
|
22
|
+
incrementId: string;
|
|
23
|
+
incrementPath: string;
|
|
24
|
+
discrepanciesLinked: number;
|
|
25
|
+
error?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Generate an increment spec from discrepancies
|
|
29
|
+
*/
|
|
30
|
+
export declare function generateSpecFromDiscrepancies(discrepancies: BrownfieldDiscrepancy[], incrementId: string, incrementTitle?: string): Promise<string>;
|
|
31
|
+
/**
|
|
32
|
+
* Link discrepancies to an increment
|
|
33
|
+
*/
|
|
34
|
+
export declare function linkDiscrepanciesToIncrement(projectPath: string, discrepancyIds: string[], incrementId: string, options?: {
|
|
35
|
+
logger?: Logger;
|
|
36
|
+
}): Promise<number>;
|
|
37
|
+
/**
|
|
38
|
+
* Resolve discrepancies when increment is completed
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveDiscrepanciesOnCompletion(projectPath: string, incrementId: string, options?: {
|
|
41
|
+
logger?: Logger;
|
|
42
|
+
}): Promise<number>;
|
|
43
|
+
/**
|
|
44
|
+
* Get the next increment ID for documentation improvements
|
|
45
|
+
*/
|
|
46
|
+
export declare function getNextIncrementId(projectPath: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Generate increment from discrepancies
|
|
49
|
+
*/
|
|
50
|
+
export declare function generateIncrementFromDiscrepancies(options: GenerateIncrementOptions): Promise<GenerateIncrementResult>;
|
|
51
|
+
//# sourceMappingURL=increment-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"increment-generator.d.ts","sourceRoot":"","sources":["../../../../src/core/discrepancy/increment-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAG9D;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CACjD,aAAa,EAAE,qBAAqB,EAAE,EACtC,WAAW,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,MAAM,CAAC,CAgFjB;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EAAE,EACxB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAChC,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED;;GAEG;AACH,wBAAsB,gCAAgC,CACpD,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAChC,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAiB9D;AAED;;GAEG;AACH,wBAAsB,kCAAkC,CACtD,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,uBAAuB,CAAC,CAoGlC"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discrepancy to Increment Generator
|
|
3
|
+
*
|
|
4
|
+
* Converts brownfield discrepancies into actionable increments.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import { consoleLogger } from '../../utils/logger.js';
|
|
9
|
+
import { BrownfieldDiscrepancyManager } from './brownfield-manager.js';
|
|
10
|
+
/**
|
|
11
|
+
* Generate an increment spec from discrepancies
|
|
12
|
+
*/
|
|
13
|
+
export async function generateSpecFromDiscrepancies(discrepancies, incrementId, incrementTitle) {
|
|
14
|
+
// Group by module
|
|
15
|
+
const byModule = new Map();
|
|
16
|
+
for (const disc of discrepancies) {
|
|
17
|
+
const module = disc.module || 'unknown';
|
|
18
|
+
if (!byModule.has(module)) {
|
|
19
|
+
byModule.set(module, []);
|
|
20
|
+
}
|
|
21
|
+
byModule.get(module).push(disc);
|
|
22
|
+
}
|
|
23
|
+
const modules = Array.from(byModule.keys());
|
|
24
|
+
const primaryModule = modules[0];
|
|
25
|
+
const title = incrementTitle || `Documentation Improvement: ${primaryModule}`;
|
|
26
|
+
// Build discrepancy table
|
|
27
|
+
const discTable = discrepancies.map(d => `| ${d.id} | ${d.type} | ${d.priority} | ${d.summary.slice(0, 50)}${d.summary.length > 50 ? '...' : ''} |`).join('\n');
|
|
28
|
+
// Build acceptance criteria
|
|
29
|
+
const acs = discrepancies.map((d, i) => `- [ ] **AC-US1-${String(i + 1).padStart(2, '0')}**: ${d.summary} (${d.id})`).join('\n');
|
|
30
|
+
// Build affected files section
|
|
31
|
+
const affectedFiles = discrepancies
|
|
32
|
+
.filter(d => d.codeLocation)
|
|
33
|
+
.map(d => `- \`${d.codeLocation}\` (${d.id})`)
|
|
34
|
+
.join('\n');
|
|
35
|
+
const spec = `---
|
|
36
|
+
increment: ${incrementId}
|
|
37
|
+
status: planning
|
|
38
|
+
type: documentation
|
|
39
|
+
created: ${new Date().toISOString().split('T')[0]}
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
# ${title}
|
|
43
|
+
|
|
44
|
+
## Context
|
|
45
|
+
|
|
46
|
+
This increment addresses documentation gaps detected during brownfield analysis.
|
|
47
|
+
|
|
48
|
+
### Source Discrepancies
|
|
49
|
+
|
|
50
|
+
| ID | Type | Priority | Summary |
|
|
51
|
+
|----|------|----------|---------|
|
|
52
|
+
${discTable}
|
|
53
|
+
|
|
54
|
+
## User Stories
|
|
55
|
+
|
|
56
|
+
### US-001: Document ${primaryModule} Module
|
|
57
|
+
|
|
58
|
+
**As a** new developer joining the team,
|
|
59
|
+
**I want** comprehensive documentation for the ${primaryModule} module,
|
|
60
|
+
**So that** I can understand and contribute to this area of the codebase.
|
|
61
|
+
|
|
62
|
+
#### Acceptance Criteria
|
|
63
|
+
|
|
64
|
+
${acs}
|
|
65
|
+
|
|
66
|
+
## Technical Notes
|
|
67
|
+
|
|
68
|
+
### Affected Files
|
|
69
|
+
|
|
70
|
+
${affectedFiles || 'No specific files identified.'}
|
|
71
|
+
|
|
72
|
+
### Linked Discrepancies
|
|
73
|
+
|
|
74
|
+
${discrepancies.map(d => `- **${d.id}**: ${d.type} - ${d.summary}`).join('\n')}
|
|
75
|
+
|
|
76
|
+
## Success Criteria
|
|
77
|
+
|
|
78
|
+
- All acceptance criteria marked complete
|
|
79
|
+
- Documentation reviewed by at least one team member
|
|
80
|
+
- No new discrepancies detected in this module on next analysis
|
|
81
|
+
`;
|
|
82
|
+
return spec;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Link discrepancies to an increment
|
|
86
|
+
*/
|
|
87
|
+
export async function linkDiscrepanciesToIncrement(projectPath, discrepancyIds, incrementId, options = {}) {
|
|
88
|
+
const logger = options.logger ?? consoleLogger;
|
|
89
|
+
const manager = new BrownfieldDiscrepancyManager(projectPath, { logger });
|
|
90
|
+
let linked = 0;
|
|
91
|
+
for (const id of discrepancyIds) {
|
|
92
|
+
try {
|
|
93
|
+
const success = await manager.linkToIncrement(id, incrementId);
|
|
94
|
+
if (success) {
|
|
95
|
+
linked++;
|
|
96
|
+
logger.log(`Linked ${id} to increment ${incrementId}`);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
logger.warn(`Discrepancy ${id} not found`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
logger.error(`Failed to link ${id}:`, error);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return linked;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Resolve discrepancies when increment is completed
|
|
110
|
+
*/
|
|
111
|
+
export async function resolveDiscrepanciesOnCompletion(projectPath, incrementId, options = {}) {
|
|
112
|
+
const logger = options.logger ?? consoleLogger;
|
|
113
|
+
const manager = new BrownfieldDiscrepancyManager(projectPath, { logger });
|
|
114
|
+
// Find all discrepancies linked to this increment
|
|
115
|
+
const discrepancies = await manager.listDiscrepancies({
|
|
116
|
+
incrementId,
|
|
117
|
+
status: 'in-progress',
|
|
118
|
+
});
|
|
119
|
+
let resolved = 0;
|
|
120
|
+
for (const disc of discrepancies) {
|
|
121
|
+
try {
|
|
122
|
+
await manager.resolveDiscrepancy(disc.id, {
|
|
123
|
+
type: 'doc-updated',
|
|
124
|
+
resolvedAt: new Date().toISOString(),
|
|
125
|
+
resolvedBy: 'increment-completion',
|
|
126
|
+
notes: `Resolved via increment ${incrementId}`,
|
|
127
|
+
});
|
|
128
|
+
resolved++;
|
|
129
|
+
logger.log(`Resolved ${disc.id}`);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
logger.error(`Failed to resolve ${disc.id}:`, error);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return resolved;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get the next increment ID for documentation improvements
|
|
139
|
+
*/
|
|
140
|
+
export function getNextIncrementId(projectPath) {
|
|
141
|
+
const incrementsDir = path.join(projectPath, '.specweave', 'increments');
|
|
142
|
+
if (!fs.existsSync(incrementsDir)) {
|
|
143
|
+
return '0001';
|
|
144
|
+
}
|
|
145
|
+
const folders = fs.readdirSync(incrementsDir, { withFileTypes: true })
|
|
146
|
+
.filter(d => d.isDirectory() && /^\d{4}-/.test(d.name))
|
|
147
|
+
.map(d => parseInt(d.name.slice(0, 4), 10));
|
|
148
|
+
if (folders.length === 0) {
|
|
149
|
+
return '0001';
|
|
150
|
+
}
|
|
151
|
+
const maxId = Math.max(...folders);
|
|
152
|
+
return String(maxId + 1).padStart(4, '0');
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Generate increment from discrepancies
|
|
156
|
+
*/
|
|
157
|
+
export async function generateIncrementFromDiscrepancies(options) {
|
|
158
|
+
const logger = options.logger ?? consoleLogger;
|
|
159
|
+
const manager = new BrownfieldDiscrepancyManager(options.projectPath, { logger });
|
|
160
|
+
try {
|
|
161
|
+
// Load discrepancies
|
|
162
|
+
const discrepancies = [];
|
|
163
|
+
for (const id of options.discrepancyIds) {
|
|
164
|
+
const disc = await manager.getDiscrepancy(id);
|
|
165
|
+
if (disc) {
|
|
166
|
+
if (disc.status !== 'pending') {
|
|
167
|
+
logger.warn(`Discrepancy ${id} is not in pending status (${disc.status})`);
|
|
168
|
+
}
|
|
169
|
+
discrepancies.push(disc);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
logger.warn(`Discrepancy ${id} not found`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (discrepancies.length === 0) {
|
|
176
|
+
return {
|
|
177
|
+
success: false,
|
|
178
|
+
incrementId: '',
|
|
179
|
+
incrementPath: '',
|
|
180
|
+
discrepanciesLinked: 0,
|
|
181
|
+
error: 'No valid discrepancies found',
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
// Determine module name and generate increment ID
|
|
185
|
+
const primaryModule = discrepancies[0].module.replace(/[^a-z0-9-]/gi, '-').toLowerCase();
|
|
186
|
+
const incrementNum = getNextIncrementId(options.projectPath);
|
|
187
|
+
const incrementId = `${incrementNum}-${primaryModule}-docs`;
|
|
188
|
+
// Create increment directory
|
|
189
|
+
const incrementPath = path.join(options.projectPath, '.specweave', 'increments', incrementId);
|
|
190
|
+
fs.mkdirSync(incrementPath, { recursive: true });
|
|
191
|
+
// Generate and write spec.md
|
|
192
|
+
const specContent = await generateSpecFromDiscrepancies(discrepancies, incrementId, options.incrementTitle);
|
|
193
|
+
fs.writeFileSync(path.join(incrementPath, 'spec.md'), specContent);
|
|
194
|
+
// Create metadata.json
|
|
195
|
+
const metadata = {
|
|
196
|
+
incrementId,
|
|
197
|
+
title: options.incrementTitle || `Documentation: ${primaryModule}`,
|
|
198
|
+
status: 'planning',
|
|
199
|
+
type: 'documentation',
|
|
200
|
+
createdAt: new Date().toISOString(),
|
|
201
|
+
updatedAt: new Date().toISOString(),
|
|
202
|
+
linkedDiscrepancies: options.discrepancyIds,
|
|
203
|
+
userStories: [
|
|
204
|
+
{
|
|
205
|
+
id: 'US-001',
|
|
206
|
+
title: `Document ${primaryModule} module`,
|
|
207
|
+
status: 'pending',
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
};
|
|
211
|
+
fs.writeFileSync(path.join(incrementPath, 'metadata.json'), JSON.stringify(metadata, null, 2));
|
|
212
|
+
// Link discrepancies to increment
|
|
213
|
+
const linked = await linkDiscrepanciesToIncrement(options.projectPath, options.discrepancyIds, incrementId, { logger });
|
|
214
|
+
logger.log(`Created increment ${incrementId} with ${linked} discrepancies`);
|
|
215
|
+
return {
|
|
216
|
+
success: true,
|
|
217
|
+
incrementId,
|
|
218
|
+
incrementPath,
|
|
219
|
+
discrepanciesLinked: linked,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
224
|
+
logger.error('Failed to generate increment:', error);
|
|
225
|
+
return {
|
|
226
|
+
success: false,
|
|
227
|
+
incrementId: '',
|
|
228
|
+
incrementPath: '',
|
|
229
|
+
discrepanciesLinked: 0,
|
|
230
|
+
error: errorMsg,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=increment-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"increment-generator.js","sourceRoot":"","sources":["../../../../src/core/discrepancy/increment-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code-to-Spec Discrepancy Detection
|
|
3
|
+
*
|
|
4
|
+
* Detects discrepancies between code and specifications.
|
|
5
|
+
* Core principle: CODE is source of truth.
|
|
6
|
+
*
|
|
7
|
+
* @module core/discrepancy
|
|
8
|
+
*/
|
|
9
|
+
export { TypeScriptAnalyzer, type FunctionSignature, type FunctionParam, type TypeDefinition, type TypeScriptAnalyzerConfig, type AnalysisResult, } from './analyzers/typescript-analyzer.js';
|
|
10
|
+
export { ApiRouteAnalyzer, type ApiRoute, type HttpMethod, type ApiRouteAnalyzerConfig, type RouteAnalysisResult, } from './analyzers/api-route-analyzer.js';
|
|
11
|
+
export { SpecParser, type ParsedSpec, type SpecType, type SpecParserConfig, type SpecParseResult, } from './spec-parser.js';
|
|
12
|
+
export { DiscrepancyDetector, type Discrepancy, type DiscrepancyType, type DiscrepancyCategory, type DiscrepancySeverity, type DiscrepancyRecommendation, type CodeSignatures, type DetectionResult, } from './detector.js';
|
|
13
|
+
export { SeverityClassifier, type ChangeDetails, type ClassificationResult, type SeverityClassifierConfig, } from './severity-classifier.js';
|
|
14
|
+
export { UpdateRecommender, type UpdatePatch, type RecommendationResult, type UpdateRecommenderConfig, } from './update-recommender.js';
|
|
15
|
+
export type { BrownfieldDiscrepancyType, BrownfieldDiscrepancyStatus, BrownfieldDiscrepancyPriority, BrownfieldDiscrepancySource, BrownfieldResolutionType, BrownfieldDiscrepancyEvidence, BrownfieldDiscrepancyResolution, BrownfieldDiscrepancy, BrownfieldDiscrepancyStats, BrownfieldDiscrepancyIndex, BrownfieldDiscrepancyFilter, BrownfieldDiscrepancyCreate, BrownfieldDiscrepancyUpdate, } from './brownfield-types.js';
|
|
16
|
+
export { BrownfieldDiscrepancyManager } from './brownfield-manager.js';
|
|
17
|
+
export { generateSpecFromDiscrepancies, linkDiscrepanciesToIncrement, resolveDiscrepanciesOnCompletion, getNextIncrementId, generateIncrementFromDiscrepancies, type GenerateIncrementOptions, type GenerateIncrementResult, } from './increment-generator.js';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/discrepancy/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,GACpB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,gBAAgB,EAChB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACzB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EACL,UAAU,EACV,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,mBAAmB,EACnB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,GAC9B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EACV,yBAAyB,EACzB,2BAA2B,EAC3B,6BAA6B,EAC7B,2BAA2B,EAC3B,wBAAwB,EACxB,6BAA6B,EAC7B,+BAA+B,EAC/B,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAGvE,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,kBAAkB,EAClB,kCAAkC,EAClC,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code-to-Spec Discrepancy Detection
|
|
3
|
+
*
|
|
4
|
+
* Detects discrepancies between code and specifications.
|
|
5
|
+
* Core principle: CODE is source of truth.
|
|
6
|
+
*
|
|
7
|
+
* @module core/discrepancy
|
|
8
|
+
*/
|
|
9
|
+
// Analyzers
|
|
10
|
+
export { TypeScriptAnalyzer, } from './analyzers/typescript-analyzer.js';
|
|
11
|
+
export { ApiRouteAnalyzer, } from './analyzers/api-route-analyzer.js';
|
|
12
|
+
// Spec Parser
|
|
13
|
+
export { SpecParser, } from './spec-parser.js';
|
|
14
|
+
// Detector
|
|
15
|
+
export { DiscrepancyDetector, } from './detector.js';
|
|
16
|
+
// Severity Classifier
|
|
17
|
+
export { SeverityClassifier, } from './severity-classifier.js';
|
|
18
|
+
// Update Recommender
|
|
19
|
+
export { UpdateRecommender, } from './update-recommender.js';
|
|
20
|
+
// Brownfield Discrepancy Manager
|
|
21
|
+
export { BrownfieldDiscrepancyManager } from './brownfield-manager.js';
|
|
22
|
+
// Increment Generator (discrepancy → increment conversion)
|
|
23
|
+
export { generateSpecFromDiscrepancies, linkDiscrepanciesToIncrement, resolveDiscrepanciesOnCompletion, getNextIncrementId, generateIncrementFromDiscrepancies, } from './increment-generator.js';
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/discrepancy/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY;AACZ,OAAO,EACL,kBAAkB,GAMnB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,gBAAgB,GAKjB,MAAM,mCAAmC,CAAC;AAE3C,cAAc;AACd,OAAO,EACL,UAAU,GAKX,MAAM,kBAAkB,CAAC;AAE1B,WAAW;AACX,OAAO,EACL,mBAAmB,GAQpB,MAAM,eAAe,CAAC;AAEvB,sBAAsB;AACtB,OAAO,EACL,kBAAkB,GAInB,MAAM,0BAA0B,CAAC;AAElC,qBAAqB;AACrB,OAAO,EACL,iBAAiB,GAIlB,MAAM,yBAAyB,CAAC;AAmBjC,iCAAiC;AACjC,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAEvE,2DAA2D;AAC3D,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,kBAAkB,EAClB,kCAAkC,GAGnC,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Severity Classifier
|
|
3
|
+
*
|
|
4
|
+
* Classifies discrepancy severity to determine appropriate action.
|
|
5
|
+
* Conservative by default: when uncertain, classify higher severity.
|
|
6
|
+
*
|
|
7
|
+
* @module core/discrepancy/severity-classifier
|
|
8
|
+
*/
|
|
9
|
+
import { Logger } from '../../utils/logger.js';
|
|
10
|
+
/**
|
|
11
|
+
* Severity levels for discrepancies.
|
|
12
|
+
*/
|
|
13
|
+
export type DiscrepancySeverity = 'trivial' | 'minor' | 'major' | 'breaking';
|
|
14
|
+
/**
|
|
15
|
+
* Category of change.
|
|
16
|
+
*/
|
|
17
|
+
export type ChangeCategory = 'added' | 'removed' | 'modified';
|
|
18
|
+
/**
|
|
19
|
+
* Type of item that changed.
|
|
20
|
+
*/
|
|
21
|
+
export type ItemType = 'api-route' | 'function-signature' | 'type-definition';
|
|
22
|
+
/**
|
|
23
|
+
* Details about a change for classification.
|
|
24
|
+
*/
|
|
25
|
+
export interface ChangeDetails {
|
|
26
|
+
category: ChangeCategory;
|
|
27
|
+
itemType: ItemType;
|
|
28
|
+
specValue: string;
|
|
29
|
+
codeValue: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Classification result with reasoning.
|
|
34
|
+
*/
|
|
35
|
+
export interface ClassificationResult {
|
|
36
|
+
severity: DiscrepancySeverity;
|
|
37
|
+
reason: string;
|
|
38
|
+
confidence: 'high' | 'medium' | 'low';
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Configuration for severity classification.
|
|
42
|
+
*/
|
|
43
|
+
export interface SeverityClassifierConfig {
|
|
44
|
+
/** Be conservative: when uncertain, classify higher */
|
|
45
|
+
conservative?: boolean;
|
|
46
|
+
/** Treat all removals as breaking */
|
|
47
|
+
strictRemovals?: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Classifies discrepancy severity based on change type and details.
|
|
51
|
+
*/
|
|
52
|
+
export declare class SeverityClassifier {
|
|
53
|
+
private readonly logger;
|
|
54
|
+
private readonly config;
|
|
55
|
+
constructor(options?: {
|
|
56
|
+
logger?: Logger;
|
|
57
|
+
config?: SeverityClassifierConfig;
|
|
58
|
+
});
|
|
59
|
+
/**
|
|
60
|
+
* Classify the severity of a discrepancy.
|
|
61
|
+
*/
|
|
62
|
+
classify(change: ChangeDetails): ClassificationResult;
|
|
63
|
+
private classifyRemoval;
|
|
64
|
+
private classifyAddition;
|
|
65
|
+
private classifyModification;
|
|
66
|
+
private isTrivialChange;
|
|
67
|
+
private normalize;
|
|
68
|
+
private isBreakingSignatureChange;
|
|
69
|
+
private hasFewerParams;
|
|
70
|
+
private getBreakingChangeReason;
|
|
71
|
+
private classifyApiRouteChange;
|
|
72
|
+
private classifyFunctionChange;
|
|
73
|
+
private extractPath;
|
|
74
|
+
private isVersionChange;
|
|
75
|
+
private isPathStructureChange;
|
|
76
|
+
/**
|
|
77
|
+
* Map severity to recommended action.
|
|
78
|
+
*/
|
|
79
|
+
getRecommendation(severity: DiscrepancySeverity): 'auto-update' | 'review-required' | 'notify' | 'alert';
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=severity-classifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"severity-classifier.d.ts","sourceRoot":"","sources":["../../../../src/core/discrepancy/severity-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,oBAAoB,GAAG,iBAAiB,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,uDAAuD;IACvD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qCAAqC;IACrC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAEhD,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,wBAAwB,CAAA;KAAO;IAQhF;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,oBAAoB;IAerD,OAAO,CAAC,eAAe;IAyCvB,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,oBAAoB;IAuC5B,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,yBAAyB;IAqBjC,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,uBAAuB;IAkB/B,OAAO,CAAC,sBAAsB;IA8B9B,OAAO,CAAC,sBAAsB;IA4B9B,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,qBAAqB;IAY7B;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,aAAa,GAAG,iBAAiB,GAAG,QAAQ,GAAG,OAAO;CAYzG"}
|