@seanmars/tospec 0.7.0 → 0.9.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.
Files changed (196) hide show
  1. package/README.md +19 -0
  2. package/assets/dashboard/app.js +168 -0
  3. package/assets/dashboard/index.html +4 -0
  4. package/assets/dashboard/style.css +158 -0
  5. package/dist/cli/index.d.ts.map +1 -1
  6. package/dist/cli/index.js +18 -31
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/commands/config.d.ts +1 -2
  9. package/dist/commands/config.d.ts.map +1 -1
  10. package/dist/commands/config.js +8 -13
  11. package/dist/commands/config.js.map +1 -1
  12. package/dist/commands/dashboard.d.ts +3 -0
  13. package/dist/commands/dashboard.d.ts.map +1 -1
  14. package/dist/commands/dashboard.js +36 -3
  15. package/dist/commands/dashboard.js.map +1 -1
  16. package/dist/commands/decision.d.ts +8 -0
  17. package/dist/commands/decision.d.ts.map +1 -1
  18. package/dist/commands/decision.js +9 -10
  19. package/dist/commands/decision.js.map +1 -1
  20. package/dist/commands/shared-output.d.ts +18 -4
  21. package/dist/commands/shared-output.d.ts.map +1 -1
  22. package/dist/commands/shared-output.js +16 -3
  23. package/dist/commands/shared-output.js.map +1 -1
  24. package/dist/commands/show.d.ts.map +1 -1
  25. package/dist/commands/show.js +9 -13
  26. package/dist/commands/show.js.map +1 -1
  27. package/dist/commands/validate.d.ts +10 -0
  28. package/dist/commands/validate.d.ts.map +1 -1
  29. package/dist/commands/validate.js +48 -32
  30. package/dist/commands/validate.js.map +1 -1
  31. package/dist/commands/workflow/instructions.d.ts.map +1 -1
  32. package/dist/commands/workflow/instructions.js +20 -6
  33. package/dist/commands/workflow/instructions.js.map +1 -1
  34. package/dist/commands/workflow/new-change.d.ts +2 -0
  35. package/dist/commands/workflow/new-change.d.ts.map +1 -1
  36. package/dist/commands/workflow/new-change.js +15 -7
  37. package/dist/commands/workflow/new-change.js.map +1 -1
  38. package/dist/commands/workflow/schemas.d.ts.map +1 -1
  39. package/dist/commands/workflow/schemas.js +12 -3
  40. package/dist/commands/workflow/schemas.js.map +1 -1
  41. package/dist/commands/workflow/shared.d.ts +1 -3
  42. package/dist/commands/workflow/shared.d.ts.map +1 -1
  43. package/dist/commands/workflow/shared.js +2 -14
  44. package/dist/commands/workflow/shared.js.map +1 -1
  45. package/dist/commands/workflow/status.d.ts.map +1 -1
  46. package/dist/commands/workflow/status.js +6 -2
  47. package/dist/commands/workflow/status.js.map +1 -1
  48. package/dist/commands/workflow/templates.d.ts.map +1 -1
  49. package/dist/commands/workflow/templates.js +13 -2
  50. package/dist/commands/workflow/templates.js.map +1 -1
  51. package/dist/core/archive.d.ts +9 -0
  52. package/dist/core/archive.d.ts.map +1 -1
  53. package/dist/core/archive.js +63 -114
  54. package/dist/core/archive.js.map +1 -1
  55. package/dist/core/artifact-graph/instruction-loader.d.ts +4 -2
  56. package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -1
  57. package/dist/core/artifact-graph/instruction-loader.js +54 -0
  58. package/dist/core/artifact-graph/instruction-loader.js.map +1 -1
  59. package/dist/core/change-metadata/schema.d.ts +1 -0
  60. package/dist/core/change-metadata/schema.d.ts.map +1 -1
  61. package/dist/core/change-metadata/schema.js +4 -0
  62. package/dist/core/change-metadata/schema.js.map +1 -1
  63. package/dist/core/change-presenter.d.ts.map +1 -1
  64. package/dist/core/change-presenter.js +2 -8
  65. package/dist/core/change-presenter.js.map +1 -1
  66. package/dist/core/change-status-policy.d.ts +1 -1
  67. package/dist/core/change-status-policy.d.ts.map +1 -1
  68. package/dist/core/command-generation/adapters/index.d.ts +1 -2
  69. package/dist/core/command-generation/adapters/index.d.ts.map +1 -1
  70. package/dist/core/command-generation/adapters/index.js +1 -2
  71. package/dist/core/command-generation/adapters/index.js.map +1 -1
  72. package/dist/core/command-generation/index.d.ts +4 -15
  73. package/dist/core/command-generation/index.d.ts.map +1 -1
  74. package/dist/core/command-generation/index.js +5 -17
  75. package/dist/core/command-generation/index.js.map +1 -1
  76. package/dist/core/config-schema.d.ts +0 -14
  77. package/dist/core/config-schema.d.ts.map +1 -1
  78. package/dist/core/config-schema.js +0 -57
  79. package/dist/core/config-schema.js.map +1 -1
  80. package/dist/core/config.d.ts +0 -1
  81. package/dist/core/config.d.ts.map +1 -1
  82. package/dist/core/config.js +0 -4
  83. package/dist/core/config.js.map +1 -1
  84. package/dist/core/dashboard-data.d.ts +19 -1
  85. package/dist/core/dashboard-data.d.ts.map +1 -1
  86. package/dist/core/dashboard-data.js +24 -1
  87. package/dist/core/dashboard-data.js.map +1 -1
  88. package/dist/core/global-config.d.ts +0 -5
  89. package/dist/core/global-config.d.ts.map +1 -1
  90. package/dist/core/global-config.js +3 -20
  91. package/dist/core/global-config.js.map +1 -1
  92. package/dist/core/init.d.ts +0 -1
  93. package/dist/core/init.d.ts.map +1 -1
  94. package/dist/core/init.js +18 -62
  95. package/dist/core/init.js.map +1 -1
  96. package/dist/core/list.d.ts.map +1 -1
  97. package/dist/core/list.js +6 -5
  98. package/dist/core/list.js.map +1 -1
  99. package/dist/core/migrate.d.ts +20 -3
  100. package/dist/core/migrate.d.ts.map +1 -1
  101. package/dist/core/migrate.js +140 -40
  102. package/dist/core/migrate.js.map +1 -1
  103. package/dist/core/parsers/change-parser.d.ts +0 -2
  104. package/dist/core/parsers/change-parser.d.ts.map +1 -1
  105. package/dist/core/parsers/change-parser.js +7 -72
  106. package/dist/core/parsers/change-parser.js.map +1 -1
  107. package/dist/core/parsers/markdown-parser.d.ts +1 -1
  108. package/dist/core/parsers/markdown-parser.d.ts.map +1 -1
  109. package/dist/core/parsers/markdown-parser.js +13 -4
  110. package/dist/core/parsers/markdown-parser.js.map +1 -1
  111. package/dist/core/parsers/requirement-blocks.d.ts +19 -0
  112. package/dist/core/parsers/requirement-blocks.d.ts.map +1 -1
  113. package/dist/core/parsers/requirement-blocks.js +56 -26
  114. package/dist/core/parsers/requirement-blocks.js.map +1 -1
  115. package/dist/core/parsers/requirement-text.d.ts +33 -0
  116. package/dist/core/parsers/requirement-text.d.ts.map +1 -1
  117. package/dist/core/parsers/requirement-text.js +55 -13
  118. package/dist/core/parsers/requirement-text.js.map +1 -1
  119. package/dist/core/profiles.d.ts +2 -10
  120. package/dist/core/profiles.d.ts.map +1 -1
  121. package/dist/core/profiles.js +5 -9
  122. package/dist/core/profiles.js.map +1 -1
  123. package/dist/core/project-config.d.ts +0 -22
  124. package/dist/core/project-config.d.ts.map +1 -1
  125. package/dist/core/project-config.js +5 -75
  126. package/dist/core/project-config.js.map +1 -1
  127. package/dist/core/root-selection.d.ts.map +1 -1
  128. package/dist/core/root-selection.js +2 -2
  129. package/dist/core/root-selection.js.map +1 -1
  130. package/dist/core/shared/index.d.ts +1 -1
  131. package/dist/core/shared/index.d.ts.map +1 -1
  132. package/dist/core/shared/index.js +1 -1
  133. package/dist/core/shared/index.js.map +1 -1
  134. package/dist/core/shared/skill-generation.d.ts +47 -1
  135. package/dist/core/shared/skill-generation.d.ts.map +1 -1
  136. package/dist/core/shared/skill-generation.js +37 -33
  137. package/dist/core/shared/skill-generation.js.map +1 -1
  138. package/dist/core/shared/tool-detection.d.ts +4 -10
  139. package/dist/core/shared/tool-detection.d.ts.map +1 -1
  140. package/dist/core/shared/tool-detection.js +5 -27
  141. package/dist/core/shared/tool-detection.js.map +1 -1
  142. package/dist/core/spec-presenter.d.ts.map +1 -1
  143. package/dist/core/spec-presenter.js +3 -4
  144. package/dist/core/spec-presenter.js.map +1 -1
  145. package/dist/core/specs-apply.d.ts.map +1 -1
  146. package/dist/core/specs-apply.js +1 -0
  147. package/dist/core/specs-apply.js.map +1 -1
  148. package/dist/core/templates/skill-templates.d.ts +1 -0
  149. package/dist/core/templates/skill-templates.d.ts.map +1 -1
  150. package/dist/core/templates/skill-templates.js +1 -0
  151. package/dist/core/templates/skill-templates.js.map +1 -1
  152. package/dist/core/templates/workflows/apply.d.ts.map +1 -1
  153. package/dist/core/templates/workflows/apply.js +35 -57
  154. package/dist/core/templates/workflows/apply.js.map +1 -1
  155. package/dist/core/templates/workflows/archive.d.ts.map +1 -1
  156. package/dist/core/templates/workflows/archive.js +5 -3
  157. package/dist/core/templates/workflows/archive.js.map +1 -1
  158. package/dist/core/templates/workflows/decision.js +3 -3
  159. package/dist/core/templates/workflows/decision.js.map +1 -1
  160. package/dist/core/templates/workflows/explore.js +1 -1
  161. package/dist/core/templates/workflows/grill.d.ts +12 -0
  162. package/dist/core/templates/workflows/grill.d.ts.map +1 -0
  163. package/dist/core/templates/workflows/grill.js +61 -0
  164. package/dist/core/templates/workflows/grill.js.map +1 -0
  165. package/dist/core/templates/workflows/propose.d.ts.map +1 -1
  166. package/dist/core/templates/workflows/propose.js +3 -1
  167. package/dist/core/templates/workflows/propose.js.map +1 -1
  168. package/dist/core/templates/workflows/update.js +2 -2
  169. package/dist/core/templates/workflows/update.js.map +1 -1
  170. package/dist/core/update.d.ts +0 -9
  171. package/dist/core/update.d.ts.map +1 -1
  172. package/dist/core/update.js +9 -55
  173. package/dist/core/update.js.map +1 -1
  174. package/dist/core/validation/validator.d.ts +7 -1
  175. package/dist/core/validation/validator.d.ts.map +1 -1
  176. package/dist/core/validation/validator.js +98 -17
  177. package/dist/core/validation/validator.js.map +1 -1
  178. package/dist/ui/welcome-screen.d.ts.map +1 -1
  179. package/dist/ui/welcome-screen.js +6 -3
  180. package/dist/ui/welcome-screen.js.map +1 -1
  181. package/dist/utils/change-utils.d.ts +1 -1
  182. package/dist/utils/change-utils.d.ts.map +1 -1
  183. package/dist/utils/link.d.ts +2 -18
  184. package/dist/utils/link.d.ts.map +1 -1
  185. package/dist/utils/link.js +2 -65
  186. package/dist/utils/link.js.map +1 -1
  187. package/package.json +1 -1
  188. package/schemas/decision/templates/decision.md +12 -3
  189. package/dist/core/command-generation/adapters/cursor.d.ts +0 -14
  190. package/dist/core/command-generation/adapters/cursor.d.ts.map +0 -1
  191. package/dist/core/command-generation/adapters/cursor.js +0 -31
  192. package/dist/core/command-generation/adapters/cursor.js.map +0 -1
  193. package/dist/core/command-generation/registry.d.ts +0 -24
  194. package/dist/core/command-generation/registry.d.ts.map +0 -1
  195. package/dist/core/command-generation/registry.js +0 -38
  196. package/dist/core/command-generation/registry.js.map +0 -1
@@ -15,7 +15,9 @@ export class MarkdownParser {
15
15
  parseSpec(name) {
16
16
  const sections = this.parseSections();
17
17
  const purpose = this.findSection(sections, 'Purpose')?.content || '';
18
- const requirementsSection = this.findSection(sections, 'Requirements');
18
+ // Level 2 only — the same definition extractRequirementsSection uses
19
+ // (`## Requirements`); a nested `### Requirements` is not the section.
20
+ const requirementsSection = this.findSection(sections, 'Requirements', 2);
19
21
  if (!purpose) {
20
22
  throw new Error('Spec must have a Purpose section');
21
23
  }
@@ -108,12 +110,13 @@ export class MarkdownParser {
108
110
  }
109
111
  return contentLines.join('\n').trim();
110
112
  }
111
- findSection(sections, title) {
113
+ findSection(sections, title, level) {
112
114
  for (const section of sections) {
113
- if (section.title.toLowerCase() === title.toLowerCase()) {
115
+ if (section.title.toLowerCase() === title.toLowerCase() &&
116
+ (level === undefined || section.level === level)) {
114
117
  return section;
115
118
  }
116
- const child = this.findSection(section.children, title);
119
+ const child = this.findSection(section.children, title, level);
117
120
  if (child) {
118
121
  return child;
119
122
  }
@@ -137,6 +140,12 @@ export class MarkdownParser {
137
140
  parseScenarios(requirementSection) {
138
141
  const scenarios = [];
139
142
  for (const scenarioSection of requirementSection.children) {
143
+ // Only `#### Scenario:` children are scenarios — a `#### Notes` header
144
+ // is not one (report 2.1; kept in parity with the delta path's
145
+ // SCENARIO_HEADER in requirement-text.ts).
146
+ if (!/^Scenario:/i.test(scenarioSection.title.trim())) {
147
+ continue;
148
+ }
140
149
  // Store the raw text content of the scenario section
141
150
  if (scenarioSection.content.trim()) {
142
151
  scenarios.push({
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../../src/core/parsers/markdown-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../../src/core/parsers/markdown-parser.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ export interface RequirementBlock {
2
2
  headerLine: string;
3
3
  name: string;
4
4
  raw: string;
5
+ /** 1-based line number of headerLine in the source document. */
6
+ startLine: number;
5
7
  }
6
8
  export interface RequirementsSectionParts {
7
9
  before: string;
@@ -15,14 +17,31 @@ export declare function normalizeRequirementName(name: string): string;
15
17
  * Extracts the Requirements section from a spec file and parses requirement blocks.
16
18
  */
17
19
  export declare function extractRequirementsSection(content: string): RequirementsSectionParts;
20
+ export interface RemovedEntry {
21
+ name: string;
22
+ /** 1-based line number of the entry in the source document. */
23
+ startLine: number;
24
+ hasReason: boolean;
25
+ hasMigration: boolean;
26
+ }
27
+ export interface RenamedIssue {
28
+ kind: 'from-without-to' | 'to-without-from';
29
+ name: string;
30
+ /** 1-based line number of the orphaned FROM:/TO: line. */
31
+ line: number;
32
+ }
18
33
  export interface DeltaPlan {
19
34
  added: RequirementBlock[];
20
35
  modified: RequirementBlock[];
21
36
  removed: string[];
37
+ /** REMOVED entries with per-entry Reason/Migration presence (report 2.4). */
38
+ removedEntries: RemovedEntry[];
22
39
  renamed: Array<{
23
40
  from: string;
24
41
  to: string;
25
42
  }>;
43
+ /** Orphaned FROM:/TO: lines that would otherwise be silently dropped. */
44
+ renamedIssues: RenamedIssue[];
26
45
  sectionPresence: {
27
46
  added: boolean;
28
47
  modified: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"requirement-blocks.d.ts","sourceRoot":"","sources":["../../../src/core/parsers/requirement-blocks.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7D;AAID;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB,CA8EpF;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,eAAe,EAAE;QACf,KAAK,EAAE,OAAO,CAAC;QACf,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAyBzD"}
1
+ {"version":3,"file":"requirement-blocks.d.ts","sourceRoot":"","sources":["../../../src/core/parsers/requirement-blocks.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7D;AAID;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB,CA+EpF;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,iBAAiB,GAAG,iBAAiB,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,6EAA6E;IAC7E,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,yEAAyE;IACzE,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,eAAe,EAAE;QACf,KAAK,EAAE,OAAO,CAAC;QACf,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CA2BzD"}
@@ -55,6 +55,7 @@ export function extractRequirementsSection(content) {
55
55
  }
56
56
  const headerMatch = headerLineCandidate.match(REQUIREMENT_HEADER_REGEX);
57
57
  const name = normalizeRequirementName(headerMatch[1]);
58
+ const startLine = reqHeaderIndex + 1 + cursor + 1;
58
59
  cursor++;
59
60
  // Gather lines until next requirement header or end of section
60
61
  const bodyLines = [headerLineCandidate];
@@ -63,7 +64,7 @@ export function extractRequirementsSection(content) {
63
64
  cursor++;
64
65
  }
65
66
  const raw = bodyLines.join('\n').trimEnd();
66
- blocks.push({ headerLine: headerLineCandidate, name, raw });
67
+ blocks.push({ headerLine: headerLineCandidate, name, raw, startLine });
67
68
  }
68
69
  const after = lines.slice(endIndex).join('\n');
69
70
  const preamble = preambleLines.join('\n').trimEnd();
@@ -92,13 +93,15 @@ export function parseDeltaSpec(content) {
92
93
  const renamedLookup = getSectionCaseInsensitive(sections, 'RENAMED Requirements');
93
94
  const added = parseRequirementBlocksFromSection(addedLookup.body);
94
95
  const modified = parseRequirementBlocksFromSection(modifiedLookup.body);
95
- const removedNames = parseRemovedNames(removedLookup.body);
96
- const renamedPairs = parseRenamedPairs(renamedLookup.body);
96
+ const removedEntries = parseRemovedEntries(removedLookup.body);
97
+ const { pairs: renamedPairs, issues: renamedIssues } = parseRenamedPairs(renamedLookup.body);
97
98
  return {
98
99
  added,
99
100
  modified,
100
- removed: removedNames,
101
+ removed: removedEntries.map((e) => e.name),
102
+ removedEntries,
101
103
  renamed: renamedPairs,
104
+ renamedIssues,
102
105
  sectionPresence: {
103
106
  added: addedLookup.found,
104
107
  modified: modifiedLookup.found,
@@ -107,7 +110,7 @@ export function parseDeltaSpec(content) {
107
110
  },
108
111
  };
109
112
  }
110
- const EMPTY_SECTION_BODY = { lines: [], fenceMask: [] };
113
+ const EMPTY_SECTION_BODY = { lines: [], fenceMask: [], offset: 0 };
111
114
  function splitTopLevelSections(lines, fenceMask) {
112
115
  const result = {};
113
116
  const indices = [];
@@ -126,6 +129,7 @@ function splitTopLevelSections(lines, fenceMask) {
126
129
  result[current.title] = {
127
130
  lines: lines.slice(current.index + 1, end),
128
131
  fenceMask: fenceMask.slice(current.index + 1, end),
132
+ offset: current.index + 1,
129
133
  };
130
134
  }
131
135
  return result;
@@ -153,6 +157,7 @@ function parseRequirementBlocksFromSection(sectionBody) {
153
157
  if (i >= lines.length)
154
158
  break;
155
159
  const headerLine = lines[i];
160
+ const startLine = sectionBody.offset + i + 1;
156
161
  const name = normalizeRequirementName(headerLine.match(REQUIREMENT_HEADER_REGEX)[1]);
157
162
  const buf = [headerLine];
158
163
  i++;
@@ -160,38 +165,52 @@ function parseRequirementBlocksFromSection(sectionBody) {
160
165
  buf.push(lines[i]);
161
166
  i++;
162
167
  }
163
- blocks.push({ headerLine, name, raw: buf.join('\n').trimEnd() });
168
+ blocks.push({ headerLine, name, raw: buf.join('\n').trimEnd(), startLine });
164
169
  }
165
170
  return blocks;
166
171
  }
167
- function parseRemovedNames(sectionBody) {
168
- const { lines, fenceMask } = sectionBody;
172
+ /** `**Reason**:` / `- Reason:` style field line inside a REMOVED entry. */
173
+ const REMOVED_REASON_LINE = /^\s*-?\s*(\*\*)?Reason(\*\*)?\s*:/i;
174
+ const REMOVED_MIGRATION_LINE = /^\s*-?\s*(\*\*)?Migration(\*\*)?\s*:/i;
175
+ function parseRemovedEntries(sectionBody) {
176
+ const { lines, fenceMask, offset } = sectionBody;
169
177
  if (lines.length === 0)
170
178
  return [];
171
- const names = [];
179
+ const entries = [];
180
+ let current = null;
172
181
  for (let i = 0; i < lines.length; i++) {
173
182
  if (fenceMask[i])
174
183
  continue;
175
184
  const line = lines[i];
176
- const m = line.match(REQUIREMENT_HEADER_REGEX);
185
+ const m = line.match(REQUIREMENT_HEADER_REGEX) ??
186
+ // Also support bullet list of headers
187
+ line.match(/^\s*-\s*`?###\s*Requirement:\s*(.+?)`?\s*$/);
177
188
  if (m) {
178
- names.push(normalizeRequirementName(m[1]));
189
+ current = {
190
+ name: normalizeRequirementName(m[1]),
191
+ startLine: offset + i + 1,
192
+ hasReason: false,
193
+ hasMigration: false,
194
+ };
195
+ entries.push(current);
179
196
  continue;
180
197
  }
181
- // Also support bullet list of headers
182
- const bullet = line.match(/^\s*-\s*`?###\s*Requirement:\s*(.+?)`?\s*$/);
183
- if (bullet) {
184
- names.push(normalizeRequirementName(bullet[1]));
185
- }
198
+ if (!current)
199
+ continue;
200
+ if (REMOVED_REASON_LINE.test(line))
201
+ current.hasReason = true;
202
+ if (REMOVED_MIGRATION_LINE.test(line))
203
+ current.hasMigration = true;
186
204
  }
187
- return names;
205
+ return entries;
188
206
  }
189
207
  function parseRenamedPairs(sectionBody) {
190
- const { lines, fenceMask } = sectionBody;
208
+ const { lines, fenceMask, offset } = sectionBody;
191
209
  if (lines.length === 0)
192
- return [];
210
+ return { pairs: [], issues: [] };
193
211
  const pairs = [];
194
- let current = {};
212
+ const issues = [];
213
+ let current = null;
195
214
  for (let i = 0; i < lines.length; i++) {
196
215
  if (fenceMask[i])
197
216
  continue;
@@ -199,16 +218,27 @@ function parseRenamedPairs(sectionBody) {
199
218
  const fromMatch = line.match(/^\s*-?\s*FROM:\s*`?###\s*Requirement:\s*(.+?)`?\s*$/);
200
219
  const toMatch = line.match(/^\s*-?\s*TO:\s*`?###\s*Requirement:\s*(.+?)`?\s*$/);
201
220
  if (fromMatch) {
202
- current.from = normalizeRequirementName(fromMatch[1]);
221
+ if (current) {
222
+ // Two FROMs in a row: the first one has no TO (report 2.4 — was
223
+ // silently dropped before).
224
+ issues.push({ kind: 'from-without-to', name: current.from, line: current.line });
225
+ }
226
+ current = { from: normalizeRequirementName(fromMatch[1]), line: offset + i + 1 };
203
227
  }
204
228
  else if (toMatch) {
205
- current.to = normalizeRequirementName(toMatch[1]);
206
- if (current.from && current.to) {
207
- pairs.push({ from: current.from, to: current.to });
208
- current = {};
229
+ const to = normalizeRequirementName(toMatch[1]);
230
+ if (current) {
231
+ pairs.push({ from: current.from, to });
232
+ current = null;
233
+ }
234
+ else {
235
+ issues.push({ kind: 'to-without-from', name: to, line: offset + i + 1 });
209
236
  }
210
237
  }
211
238
  }
212
- return pairs;
239
+ if (current) {
240
+ issues.push({ kind: 'from-without-to', name: current.from, line: current.line });
241
+ }
242
+ return { pairs, issues };
213
243
  }
214
244
  //# sourceMappingURL=requirement-blocks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"requirement-blocks.js","sourceRoot":"","sources":["../../../src/core/parsers/requirement-blocks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requirement-blocks.js","sourceRoot":"","sources":["../../../src/core/parsers/requirement-blocks.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,18 @@
15
15
  * length >= 3 and closes on a line of the same marker whose length is >= the
16
16
  * opening length, with nothing but whitespace after it.
17
17
  */
18
+ export interface CodeFenceScan {
19
+ mask: boolean[];
20
+ /** 1-based line of a fence that was opened but never closed, else null. */
21
+ unclosedFenceLine: number | null;
22
+ }
23
+ /**
24
+ * Fence scan that also reports an unclosed fence: a fence opened without a
25
+ * closing line masks every following line, which silently hides all content
26
+ * after it — callers on the validation path must surface that as an ERROR
27
+ * instead of letting the document degrade silently (report 2.3).
28
+ */
29
+ export declare function scanCodeFences(lines: string[]): CodeFenceScan;
18
30
  export declare function buildCodeFenceMask(lines: string[]): boolean[];
19
31
  /**
20
32
  * The one predicate for normative-keyword detection. Matches `SHALL` or `MUST`
@@ -52,4 +64,25 @@ export declare function extractRequirementText(headerTitle: string, bodyLines: s
52
64
  * scenario and is not counted.
53
65
  */
54
66
  export declare function countScenarios(bodyLines: string[]): number;
67
+ export interface ScenarioAnalysis {
68
+ scenarios: Array<{
69
+ title: string;
70
+ /** 0-based index of the scenario header within the given lines. */
71
+ relLine: number;
72
+ hasWhen: boolean;
73
+ hasThen: boolean;
74
+ }>;
75
+ /** Level-4 headers that are not `#### Scenario:` (e.g. `#### Notes`). */
76
+ nonScenarioHeaders: Array<{
77
+ title: string;
78
+ relLine: number;
79
+ }>;
80
+ }
81
+ /**
82
+ * Analyze the scenarios of a requirement block: which `####` headers are real
83
+ * scenarios, whether each scenario body contains the WHEN and THEN keywords
84
+ * (uppercase, per the spec convention), and which level-4 headers are not
85
+ * scenarios at all. Fence-aware like the other readers.
86
+ */
87
+ export declare function analyzeScenarios(lines: string[]): ScenarioAnalysis;
55
88
  //# sourceMappingURL=requirement-text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"requirement-text.d.ts","sourceRoot":"","sources":["../../../src/core/parsers/requirement-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAsB7D;AAwCD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAoBlE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAEvF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAQ1D"}
1
+ {"version":3,"file":"requirement-text.d.ts","sourceRoot":"","sources":["../../../src/core/parsers/requirement-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,CAsB7D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAE7D;AA2CD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAoBlE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAEvF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAQ1D;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,KAAK,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,mEAAmE;QACnE,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAAC;IACH,yEAAyE;IACzE,kBAAkB,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,gBAAgB,CA8BlE"}
@@ -9,20 +9,19 @@
9
9
  * `validate <change>`, `validate <spec>`, and `archive`.
10
10
  */
11
11
  /**
12
- * Build a per-line mask marking lines that fall inside a fenced code block
13
- * (``` ``` ``` or ``` ~~~ ```), including the fence lines themselves. Mirrors the
14
- * fence rules markdown uses: a fence opens on the first ```` ```/~~~ ```` of
15
- * length >= 3 and closes on a line of the same marker whose length is >= the
16
- * opening length, with nothing but whitespace after it.
12
+ * Fence scan that also reports an unclosed fence: a fence opened without a
13
+ * closing line masks every following line, which silently hides all content
14
+ * after it callers on the validation path must surface that as an ERROR
15
+ * instead of letting the document degrade silently (report 2.3).
17
16
  */
18
- export function buildCodeFenceMask(lines) {
17
+ export function scanCodeFences(lines) {
19
18
  const mask = new Array(lines.length).fill(false);
20
19
  let activeFence = null;
21
20
  for (let i = 0; i < lines.length; i++) {
22
21
  const fence = getFenceMarker(lines[i]);
23
22
  if (!activeFence) {
24
23
  if (fence) {
25
- activeFence = fence;
24
+ activeFence = { ...fence, openLine: i + 1 };
26
25
  mask[i] = true;
27
26
  }
28
27
  continue;
@@ -32,7 +31,10 @@ export function buildCodeFenceMask(lines) {
32
31
  activeFence = null;
33
32
  }
34
33
  }
35
- return mask;
34
+ return { mask, unclosedFenceLine: activeFence ? activeFence.openLine : null };
35
+ }
36
+ export function buildCodeFenceMask(lines) {
37
+ return scanCodeFences(lines).mask;
36
38
  }
37
39
  function getFenceMarker(line) {
38
40
  const fenceMatch = line.match(/^\s*(`{3,}|~{3,})/);
@@ -55,12 +57,14 @@ const METADATA_LINE = /^\*\*[^*]+\*\*:/;
55
57
  /** Any markdown header line — the boundary where a requirement body ends. */
56
58
  const HEADER_LINE = /^#{1,6}\s/;
57
59
  /**
58
- * A level-4 header. Deliberately matches ANY `####` header, not only
59
- * `#### Scenario:` the spec path treats every level-4 child of a requirement
60
- * as a scenario, so the delta counter must too (parity). Don't tighten this to
61
- * `Scenario:` without changing both paths together.
60
+ * A scenario header. Only `#### Scenario:` counts a `#### Notes` or other
61
+ * level-4 header under a requirement is NOT a scenario (report 2.1). The spec
62
+ * path (`MarkdownParser.parseScenarios`) applies the same filter, so both
63
+ * paths stay in parity.
62
64
  */
63
- const SCENARIO_HEADER = /^####\s+/;
65
+ const SCENARIO_HEADER = /^####\s+Scenario:/i;
66
+ /** Any level-4 header — used to detect non-scenario `####` headers. */
67
+ const ANY_H4_HEADER = /^####\s+/;
64
68
  /**
65
69
  * The one predicate for normative-keyword detection. Matches `SHALL` or `MUST`
66
70
  * as whole words so the change-delta reader and the schema-based reader accept
@@ -133,4 +137,42 @@ export function countScenarios(bodyLines) {
133
137
  }
134
138
  return count;
135
139
  }
140
+ /**
141
+ * Analyze the scenarios of a requirement block: which `####` headers are real
142
+ * scenarios, whether each scenario body contains the WHEN and THEN keywords
143
+ * (uppercase, per the spec convention), and which level-4 headers are not
144
+ * scenarios at all. Fence-aware like the other readers.
145
+ */
146
+ export function analyzeScenarios(lines) {
147
+ const mask = buildCodeFenceMask(lines);
148
+ const analysis = { scenarios: [], nonScenarioHeaders: [] };
149
+ let current = null;
150
+ for (let i = 0; i < lines.length; i++) {
151
+ if (mask[i])
152
+ continue;
153
+ const line = lines[i];
154
+ if (SCENARIO_HEADER.test(line)) {
155
+ current = {
156
+ title: line.replace(SCENARIO_HEADER, '').trim(),
157
+ relLine: i,
158
+ hasWhen: false,
159
+ hasThen: false,
160
+ };
161
+ analysis.scenarios.push(current);
162
+ continue;
163
+ }
164
+ if (ANY_H4_HEADER.test(line)) {
165
+ analysis.nonScenarioHeaders.push({ title: line.trim(), relLine: i });
166
+ current = null; // body lines after a non-scenario header belong to it
167
+ continue;
168
+ }
169
+ if (current) {
170
+ if (/\bWHEN\b/.test(line))
171
+ current.hasWhen = true;
172
+ if (/\bTHEN\b/.test(line))
173
+ current.hasThen = true;
174
+ }
175
+ }
176
+ return analysis;
177
+ }
136
178
  //# sourceMappingURL=requirement-text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"requirement-text.js","sourceRoot":"","sources":["../../../src/core/parsers/requirement-text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requirement-text.js","sourceRoot":"","sources":["../../../src/core/parsers/requirement-text.ts"],"names":[],"mappings":"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"}
@@ -2,18 +2,10 @@
2
2
  * Profile System
3
3
  *
4
4
  * Defines workflow profiles that control which workflows are installed.
5
- * Profiles determine WHICH workflows; delivery (in global config) determines HOW.
5
+ * Profiles determine WHICH workflows are installed.
6
6
  */
7
7
  import type { Profile } from './global-config.js';
8
- /**
9
- * All seven tospec workflows. There is only one profile's worth of
10
- * workflows now (no more core/custom split) — every install gets the
11
- * full explore → propose/issue → update → apply → sync → archive set.
12
- * verify runs automatically at the end of apply; sync is a standalone
13
- * skill the archive workflow offers to run when it judges one is needed.
14
- */
15
- export declare const ALL_WORKFLOWS: readonly ["explore", "propose", "issue", "decision", "update", "apply", "apply-with-tdd", "sync", "archive"];
16
- export type WorkflowId = (typeof ALL_WORKFLOWS)[number];
8
+ export { ALL_WORKFLOWS, type WorkflowId } from './shared/skill-generation.js';
17
9
  /**
18
10
  * Resolves which workflows should be active for a given profile configuration.
19
11
  *
@@ -1 +1 @@
1
- {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,8GAA+G,CAAC;AAE1I,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,SAAS,MAAM,EAAE,CAKnB"}
1
+ {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAIlD,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG9E;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,SAAS,MAAM,EAAE,CAKnB"}
@@ -2,16 +2,12 @@
2
2
  * Profile System
3
3
  *
4
4
  * Defines workflow profiles that control which workflows are installed.
5
- * Profiles determine WHICH workflows; delivery (in global config) determines HOW.
5
+ * Profiles determine WHICH workflows are installed.
6
6
  */
7
- /**
8
- * All seven tospec workflows. There is only one profile's worth of
9
- * workflows now (no more core/custom split) — every install gets the
10
- * full explore propose/issue → update → apply → sync → archive set.
11
- * verify runs automatically at the end of apply; sync is a standalone
12
- * skill the archive workflow offers to run when it judges one is needed.
13
- */
14
- export const ALL_WORKFLOWS = ['explore', 'propose', 'issue', 'decision', 'update', 'apply', 'apply-with-tdd', 'sync', 'archive'];
7
+ // The workflow id list lives in the single workflow registry
8
+ // (shared/skill-generation.ts) re-exported here for existing importers.
9
+ export { ALL_WORKFLOWS } from './shared/skill-generation.js';
10
+ import { ALL_WORKFLOWS } from './shared/skill-generation.js';
15
11
  /**
16
12
  * Resolves which workflows should be active for a given profile configuration.
17
13
  *
@@ -1 +1 @@
1
- {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AAI1I;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,eAA0B;IAE1B,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,eAAe,IAAI,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,6DAA6D;AAC7D,0EAA0E;AAC1E,OAAO,EAAE,aAAa,EAAmB,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,eAA0B;IAE1B,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,eAAe,IAAI,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -19,17 +19,6 @@ export declare const ProjectConfigSchema: z.ZodObject<{
19
19
  dashboard: z.ZodOptional<z.ZodObject<{
20
20
  staleDays: z.ZodOptional<z.ZodNumber>;
21
21
  }, z.core.$strip>>;
22
- agentsLinkMode: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
23
- skills: z.ZodOptional<z.ZodEnum<{
24
- link: "link";
25
- hardlink: "hardlink";
26
- copy: "copy";
27
- }>>;
28
- commands: z.ZodOptional<z.ZodEnum<{
29
- link: "link";
30
- copy: "copy";
31
- }>>;
32
- }, z.core.$strip>>>;
33
22
  }, z.core.$strip>;
34
23
  /** Normalized in-memory shape of a referenced store declaration. */
35
24
  export interface DeclarationEntry {
@@ -86,15 +75,4 @@ export declare function suggestSchemas(invalidSchemaName: string, availableSchem
86
75
  }[]): string;
87
76
  /** Shared .yaml/.yml probe used by project-config readers. */
88
77
  export declare function resolveConfigFilePath(projectRoot: string): string | null;
89
- /**
90
- * Records how a tool's skills/commands were delivered (link vs copy) into
91
- * tospec/config.yaml. Read-modify-write via the yaml package: does not
92
- * preserve config-prompts.ts's hand-authored comment block if present —
93
- * an accepted tradeoff of round-tripping a machine-owned field through a
94
- * plain YAML parser/stringifier.
95
- */
96
- export declare function writeAgentsLinkMode(projectRoot: string, toolId: string, modes: {
97
- skills?: 'hardlink' | 'link' | 'copy';
98
- commands?: 'link' | 'copy';
99
- }): void;
100
78
  //# sourceMappingURL=project-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/core/project-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;iBAoD9B,CAAC;AAEH,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,GAAG;IAChE,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACjC,CAAC;AAiEF,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAE1C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAyI3E;AAMD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC/B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAcV;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,iBAAiB,EAAE,MAAM,EACzB,gBAAgB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,EAAE,GACvD,MAAM,CA4DR;AAED,8DAA8D;AAC9D,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOxE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;IAAE,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAC3E,IAAI,CA4BN"}
1
+ {"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/core/project-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB;;;;;;;iBAwC9B,CAAC;AAEH,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,GAAG;IAChE,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACjC,CAAC;AAiEF,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAE1C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CA6G3E;AAMD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC/B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAcV;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,iBAAiB,EAAE,MAAM,EACzB,gBAAgB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,EAAE,GACvD,MAAM,CA4DR;AAED,8DAA8D;AAC9D,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOxE"}