@context-forge/core 0.3.3 → 0.3.6

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 (37) hide show
  1. package/dist/config/ConfigKeys.d.ts.map +1 -1
  2. package/dist/config/ConfigKeys.js +10 -0
  3. package/dist/config/ConfigKeys.js.map +1 -1
  4. package/dist/guides/GuideManager.d.ts +2 -0
  5. package/dist/guides/GuideManager.d.ts.map +1 -1
  6. package/dist/guides/GuideManager.js +18 -1
  7. package/dist/guides/GuideManager.js.map +1 -1
  8. package/dist/introspection/ArtifactIntrospector.d.ts.map +1 -1
  9. package/dist/introspection/ArtifactIntrospector.js +18 -16
  10. package/dist/introspection/ArtifactIntrospector.js.map +1 -1
  11. package/dist/introspection/ConsistencyChecker.d.ts +38 -0
  12. package/dist/introspection/ConsistencyChecker.d.ts.map +1 -0
  13. package/dist/introspection/ConsistencyChecker.js +381 -0
  14. package/dist/introspection/ConsistencyChecker.js.map +1 -0
  15. package/dist/introspection/WorkflowNavigator.d.ts +30 -0
  16. package/dist/introspection/WorkflowNavigator.d.ts.map +1 -0
  17. package/dist/introspection/WorkflowNavigator.js +265 -0
  18. package/dist/introspection/WorkflowNavigator.js.map +1 -0
  19. package/dist/introspection/parsers/slicePlanParser.d.ts +3 -0
  20. package/dist/introspection/parsers/slicePlanParser.d.ts.map +1 -1
  21. package/dist/introspection/parsers/slicePlanParser.js +34 -14
  22. package/dist/introspection/parsers/slicePlanParser.js.map +1 -1
  23. package/dist/introspection/types.d.ts +74 -0
  24. package/dist/introspection/types.d.ts.map +1 -1
  25. package/dist/introspection/writers/markdownWriter.d.ts +12 -0
  26. package/dist/introspection/writers/markdownWriter.d.ts.map +1 -0
  27. package/dist/introspection/writers/markdownWriter.js +93 -0
  28. package/dist/introspection/writers/markdownWriter.js.map +1 -0
  29. package/dist/node.d.ts +4 -1
  30. package/dist/node.d.ts.map +1 -1
  31. package/dist/node.js +4 -1
  32. package/dist/node.js.map +1 -1
  33. package/dist/schema/resolveFileByIndex.d.ts +11 -0
  34. package/dist/schema/resolveFileByIndex.d.ts.map +1 -1
  35. package/dist/schema/resolveFileByIndex.js +38 -0
  36. package/dist/schema/resolveFileByIndex.js.map +1 -1
  37. package/package.json +1 -1
@@ -0,0 +1,93 @@
1
+ import { readFile, writeFile } from 'node:fs/promises';
2
+ /**
3
+ * Update a checkbox on a specific line in a markdown file.
4
+ * Toggles between `[ ]` and `[x]` based on the `checked` parameter.
5
+ */
6
+ export async function updateCheckbox(filePath, lineIndex, checked) {
7
+ const content = await readFile(filePath, 'utf-8');
8
+ const lines = content.split('\n');
9
+ if (lineIndex < 0 || lineIndex >= lines.length) {
10
+ throw new Error(`Line index ${lineIndex} out of range (file has ${lines.length} lines)`);
11
+ }
12
+ const line = lines[lineIndex];
13
+ const uncheckedPattern = /\[ \]/;
14
+ const checkedPattern = /\[x\]/i;
15
+ if (!uncheckedPattern.test(line) && !checkedPattern.test(line)) {
16
+ throw new Error(`Line ${lineIndex} does not contain a checkbox pattern: "${line.trim()}"`);
17
+ }
18
+ const before = uncheckedPattern.test(line) ? '[ ]' : '[x]';
19
+ const after = checked ? '[x]' : '[ ]';
20
+ if (checked) {
21
+ lines[lineIndex] = line.replace(uncheckedPattern, '[x]');
22
+ }
23
+ else {
24
+ lines[lineIndex] = line.replace(checkedPattern, '[ ]');
25
+ }
26
+ await writeFile(filePath, lines.join('\n'), 'utf-8');
27
+ return {
28
+ rule: '',
29
+ action: 'update-checkbox',
30
+ filePath,
31
+ before,
32
+ after,
33
+ };
34
+ }
35
+ /**
36
+ * Update a YAML frontmatter field value in a markdown file.
37
+ * Finds the key in the frontmatter block and replaces its value.
38
+ */
39
+ export async function updateFrontmatterField(filePath, key, value) {
40
+ const content = await readFile(filePath, 'utf-8');
41
+ const lines = content.split('\n');
42
+ if (lines.length === 0 || lines[0].trim() !== '---') {
43
+ throw new Error(`File does not contain YAML frontmatter: ${filePath}`);
44
+ }
45
+ let closingIndex = -1;
46
+ for (let i = 1; i < lines.length; i++) {
47
+ if (lines[i].trim() === '---') {
48
+ closingIndex = i;
49
+ break;
50
+ }
51
+ }
52
+ if (closingIndex === -1) {
53
+ throw new Error(`Frontmatter not closed in: ${filePath}`);
54
+ }
55
+ // Find the key within frontmatter bounds
56
+ let keyLineIndex = -1;
57
+ let beforeValue = '';
58
+ for (let i = 1; i < closingIndex; i++) {
59
+ const line = lines[i];
60
+ const colonIdx = line.indexOf(':');
61
+ if (colonIdx === -1)
62
+ continue;
63
+ const lineKey = line.slice(0, colonIdx).trim();
64
+ if (lineKey === key) {
65
+ keyLineIndex = i;
66
+ beforeValue = line.slice(colonIdx + 1).trim();
67
+ // Strip surrounding quotes
68
+ if (beforeValue.length >= 2 &&
69
+ ((beforeValue.startsWith("'") && beforeValue.endsWith("'")) ||
70
+ (beforeValue.startsWith('"') && beforeValue.endsWith('"')))) {
71
+ beforeValue = beforeValue.slice(1, -1);
72
+ }
73
+ break;
74
+ }
75
+ }
76
+ if (keyLineIndex === -1) {
77
+ throw new Error(`Frontmatter key "${key}" not found in: ${filePath}`);
78
+ }
79
+ // Replace the value, preserving the key and any leading whitespace
80
+ const originalLine = lines[keyLineIndex];
81
+ const colonIdx = originalLine.indexOf(':');
82
+ lines[keyLineIndex] = originalLine.slice(0, colonIdx + 1) + ' ' + value;
83
+ await writeFile(filePath, lines.join('\n'), 'utf-8');
84
+ return {
85
+ rule: '',
86
+ action: 'update-frontmatter',
87
+ filePath,
88
+ field: key,
89
+ before: beforeValue,
90
+ after: value,
91
+ };
92
+ }
93
+ //# sourceMappingURL=markdownWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownWriter.js","sourceRoot":"","sources":["../../../src/introspection/writers/markdownWriter.ts"],"names":[],"mappings":"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"}
package/dist/node.d.ts CHANGED
@@ -5,8 +5,9 @@ export { createContextPipeline } from './services/CoreServiceFactory.js';
5
5
  export * from './storage/index.js';
6
6
  export * from './config/index.js';
7
7
  export * from './guides/index.js';
8
- export { resolveFileByIndex } from './schema/resolveFileByIndex.js';
8
+ export { resolveFileByIndex, resolveArtifactPath, deriveArtifactStem } from './schema/resolveFileByIndex.js';
9
9
  export { ArtifactIntrospector } from './introspection/ArtifactIntrospector.js';
10
+ export { WorkflowNavigator, extractSliceIndex } from './introspection/WorkflowNavigator.js';
10
11
  export { parseFrontmatter } from './introspection/parsers/frontmatterParser.js';
11
12
  export { parseSlicePlan } from './introspection/parsers/slicePlanParser.js';
12
13
  export { parseTaskItems, parseTaskFile } from './introspection/parsers/taskFileParser.js';
@@ -14,4 +15,6 @@ export { parseFutureWork } from './introspection/parsers/futureWorkParser.js';
14
15
  export { detectDocuments, checkFileExists } from './introspection/parsers/documentDetector.js';
15
16
  export { buildModel, scanDirectory } from './introspection/ProjectModelBuilder.js';
16
17
  export { FutureWorkCollector } from './introspection/FutureWorkCollector.js';
18
+ export { ConsistencyChecker } from './introspection/ConsistencyChecker.js';
19
+ export { updateCheckbox, updateFrontmatterField } from './introspection/writers/markdownWriter.js';
17
20
  //# sourceMappingURL=node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAG7G,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC"}
package/dist/node.js CHANGED
@@ -12,9 +12,10 @@ export * from './config/index.js';
12
12
  // Guides — guide lifecycle management (git/fs dependent)
13
13
  export * from './guides/index.js';
14
14
  // Schema — fs-dependent helpers (index-based file resolution)
15
- export { resolveFileByIndex } from './schema/resolveFileByIndex.js';
15
+ export { resolveFileByIndex, resolveArtifactPath, deriveArtifactStem } from './schema/resolveFileByIndex.js';
16
16
  // Introspection — artifact parsing and document detection (fs dependent)
17
17
  export { ArtifactIntrospector } from './introspection/ArtifactIntrospector.js';
18
+ export { WorkflowNavigator, extractSliceIndex } from './introspection/WorkflowNavigator.js';
18
19
  export { parseFrontmatter } from './introspection/parsers/frontmatterParser.js';
19
20
  export { parseSlicePlan } from './introspection/parsers/slicePlanParser.js';
20
21
  export { parseTaskItems, parseTaskFile } from './introspection/parsers/taskFileParser.js';
@@ -22,4 +23,6 @@ export { parseFutureWork } from './introspection/parsers/futureWorkParser.js';
22
23
  export { detectDocuments, checkFileExists } from './introspection/parsers/documentDetector.js';
23
24
  export { buildModel, scanDirectory } from './introspection/ProjectModelBuilder.js';
24
25
  export { FutureWorkCollector } from './introspection/FutureWorkCollector.js';
26
+ export { ConsistencyChecker } from './introspection/ConsistencyChecker.js';
27
+ export { updateCheckbox, updateFrontmatterField } from './introspection/writers/markdownWriter.js';
25
28
  //# sourceMappingURL=node.js.map
package/dist/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,oEAAoE;AACpE,uEAAuE;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,0EAA0E;AAC1E,cAAc,oBAAoB,CAAC;AAEnC,8DAA8D;AAC9D,cAAc,mBAAmB,CAAC;AAElC,yDAAyD;AACzD,cAAc,mBAAmB,CAAC;AAElC,8DAA8D;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,yEAAyE;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,oEAAoE;AACpE,uEAAuE;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,0EAA0E;AAC1E,cAAc,oBAAoB,CAAC;AAEnC,8DAA8D;AAC9D,cAAc,mBAAmB,CAAC;AAElC,yDAAyD;AACzD,cAAc,mBAAmB,CAAC;AAElC,8DAA8D;AAC9D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAE7G,yEAAyE;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC"}
@@ -8,4 +8,15 @@
8
8
  * @throws If no matching file is found or multiple matches exist.
9
9
  */
10
10
  export declare function resolveFileByIndex(projectPath: string, field: string, index: string): string | null;
11
+ /**
12
+ * Derive an artifact stem from a numeric index and a human-readable name.
13
+ * Uses the field's first prefix from ARTIFACT_DIR_MAP.
14
+ *
15
+ * Example: deriveArtifactStem('fileSlice', '166', 'Consistency Checker')
16
+ * → "166-slice.consistency-checker"
17
+ *
18
+ * @returns The derived stem, or null if the field is unknown.
19
+ */
20
+ export declare function deriveArtifactStem(field: string, index: string, name: string): string | null;
21
+ export declare function resolveArtifactPath(field: string, stem: string): string | null;
11
22
  //# sourceMappingURL=resolveFileByIndex.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveFileByIndex.d.ts","sourceRoot":"","sources":["../../src/schema/resolveFileByIndex.ts"],"names":[],"mappings":"AAcA;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CAuCf"}
1
+ {"version":3,"file":"resolveFileByIndex.d.ts","sourceRoot":"","sources":["../../src/schema/resolveFileByIndex.ts"],"names":[],"mappings":"AAcA;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CAuCf;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK5F;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI9E"}
@@ -50,4 +50,42 @@ export function resolveFileByIndex(projectPath, field, index) {
50
50
  // Return stem without .md extension
51
51
  return matches[0].replace(/\.md$/, '');
52
52
  }
53
+ /**
54
+ * Resolve an artifact stem (e.g. "160-slices.project-workflow-system") to its
55
+ * full relative path within the project (e.g. "project-documents/user/architecture/160-slices.project-workflow-system.md").
56
+ *
57
+ * @returns The relative path including directory and .md extension, or null if the field is unknown.
58
+ */
59
+ /**
60
+ * Slugify a human-readable name for use in artifact filenames.
61
+ * "Consistency Checker" → "consistency-checker"
62
+ */
63
+ function slugify(name) {
64
+ return name
65
+ .toLowerCase()
66
+ .replace(/[^a-z0-9]+/g, '-')
67
+ .replace(/^-|-$/g, '');
68
+ }
69
+ /**
70
+ * Derive an artifact stem from a numeric index and a human-readable name.
71
+ * Uses the field's first prefix from ARTIFACT_DIR_MAP.
72
+ *
73
+ * Example: deriveArtifactStem('fileSlice', '166', 'Consistency Checker')
74
+ * → "166-slice.consistency-checker"
75
+ *
76
+ * @returns The derived stem, or null if the field is unknown.
77
+ */
78
+ export function deriveArtifactStem(field, index, name) {
79
+ const mapping = ARTIFACT_DIR_MAP[field];
80
+ if (!mapping)
81
+ return null;
82
+ const prefix = mapping.prefixes[0];
83
+ return `${index}-${prefix}${slugify(name)}`;
84
+ }
85
+ export function resolveArtifactPath(field, stem) {
86
+ const mapping = ARTIFACT_DIR_MAP[field];
87
+ if (!mapping)
88
+ return null;
89
+ return join(mapping.dir, `${stem}.md`);
90
+ }
53
91
  //# sourceMappingURL=resolveFileByIndex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveFileByIndex.js","sourceRoot":"","sources":["../../src/schema/resolveFileByIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,4EAA4E;AAC5E,MAAM,gBAAgB,GAAwD;IAC5E,SAAS,EAAE,EAAE,GAAG,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IACzE,SAAS,EAAE,EAAE,GAAG,EAAE,8BAA8B,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IACxE,QAAQ,EAAE,EAAE,GAAG,EAAE,qCAAqC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IAC7E,aAAa,EAAE,EAAE,GAAG,EAAE,qCAAqC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE;IACpF,OAAO,EAAE,EAAE,GAAG,EAAE,qCAAqC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;IACxF,QAAQ,EAAE,EAAE,GAAG,EAAE,qCAAqC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;CAC9E,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,KAAa,EACb,KAAa;IAEb,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,sDAAsD;IACtD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAC/D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAE7D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAE/C,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,0BAA0B,OAAO,CAAC,GAAG,8BAA8B,OAAO,EAAE,CAC7E,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACjC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACrC,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,2BAA2B,KAAK,gBAAgB,KAAK,QAAQ,OAAO,CAAC,GAAG,GAAG,CAC5E,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,+BAA+B,KAAK,gBAAgB,KAAK,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpF,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"resolveFileByIndex.js","sourceRoot":"","sources":["../../src/schema/resolveFileByIndex.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@context-forge/core",
3
- "version": "0.3.3",
3
+ "version": "0.3.6",
4
4
  "description": "Core context generation engine for Context Forge — template processing, project state, prompt assembly",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",