@warpgogol/forge 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/AGENTS.md +116 -4
  2. package/dist/os/adr/handlers/validate.d.ts.map +1 -1
  3. package/dist/os/adr/handlers/validate.js +31 -3
  4. package/dist/os/adr/handlers/validate.js.map +1 -1
  5. package/dist/os/core/core.module.d.ts.map +1 -1
  6. package/dist/os/core/core.module.js +76 -2
  7. package/dist/os/core/core.module.js.map +1 -1
  8. package/dist/os/core/handlers/knowledge-compact.d.ts +4 -0
  9. package/dist/os/core/handlers/knowledge-compact.d.ts.map +1 -0
  10. package/dist/os/core/handlers/knowledge-compact.js +198 -0
  11. package/dist/os/core/handlers/knowledge-compact.js.map +1 -0
  12. package/dist/os/rfc/handlers/lifecycle.d.ts.map +1 -1
  13. package/dist/os/rfc/handlers/lifecycle.js +3 -4
  14. package/dist/os/rfc/handlers/lifecycle.js.map +1 -1
  15. package/dist/os/rfc/handlers/validate-rules.d.ts.map +1 -1
  16. package/dist/os/rfc/handlers/validate-rules.js +41 -3
  17. package/dist/os/rfc/handlers/validate-rules.js.map +1 -1
  18. package/dist/os/spec/spec-schema.d.ts +1 -1
  19. package/dist/src/config/forge-config.d.ts +67 -3
  20. package/dist/src/config/forge-config.d.ts.map +1 -1
  21. package/dist/src/config/forge-config.js +86 -2
  22. package/dist/src/config/forge-config.js.map +1 -1
  23. package/dist/src/index.d.ts +3 -1
  24. package/dist/src/index.d.ts.map +1 -1
  25. package/dist/src/index.js +6 -2
  26. package/dist/src/index.js.map +1 -1
  27. package/dist/src/knowledge/budgets.d.ts +38 -0
  28. package/dist/src/knowledge/budgets.d.ts.map +1 -0
  29. package/dist/src/knowledge/budgets.js +157 -0
  30. package/dist/src/knowledge/budgets.js.map +1 -0
  31. package/dist/src/knowledge/compact.d.ts +47 -0
  32. package/dist/src/knowledge/compact.d.ts.map +1 -0
  33. package/dist/src/knowledge/compact.js +322 -0
  34. package/dist/src/knowledge/compact.js.map +1 -0
  35. package/dist/src/knowledge/index.d.ts +7 -0
  36. package/dist/src/knowledge/index.d.ts.map +1 -0
  37. package/dist/src/knowledge/index.js +19 -0
  38. package/dist/src/knowledge/index.js.map +1 -0
  39. package/dist/src/knowledge/parse.d.ts +3 -0
  40. package/dist/src/knowledge/parse.d.ts.map +1 -0
  41. package/dist/src/knowledge/parse.js +205 -0
  42. package/dist/src/knowledge/parse.js.map +1 -0
  43. package/dist/src/knowledge/promote.d.ts +37 -0
  44. package/dist/src/knowledge/promote.d.ts.map +1 -0
  45. package/dist/src/knowledge/promote.js +120 -0
  46. package/dist/src/knowledge/promote.js.map +1 -0
  47. package/dist/src/knowledge/schema.d.ts +61 -0
  48. package/dist/src/knowledge/schema.d.ts.map +1 -0
  49. package/dist/src/knowledge/schema.js +64 -0
  50. package/dist/src/knowledge/schema.js.map +1 -0
  51. package/dist/src/knowledge/serialize.d.ts +3 -0
  52. package/dist/src/knowledge/serialize.d.ts.map +1 -0
  53. package/dist/src/knowledge/serialize.js +67 -0
  54. package/dist/src/knowledge/serialize.js.map +1 -0
  55. package/dist/src/onboarding/agents-generate.d.ts +15 -0
  56. package/dist/src/onboarding/agents-generate.d.ts.map +1 -1
  57. package/dist/src/onboarding/agents-generate.js +118 -58
  58. package/dist/src/onboarding/agents-generate.js.map +1 -1
  59. package/dist/src/onboarding/create.d.ts.map +1 -1
  60. package/dist/src/onboarding/create.js +62 -3
  61. package/dist/src/onboarding/create.js.map +1 -1
  62. package/dist/src/onboarding/doctor.d.ts +13 -1
  63. package/dist/src/onboarding/doctor.d.ts.map +1 -1
  64. package/dist/src/onboarding/doctor.js +527 -11
  65. package/dist/src/onboarding/doctor.js.map +1 -1
  66. package/dist/src/onboarding/init.d.ts +8 -1
  67. package/dist/src/onboarding/init.d.ts.map +1 -1
  68. package/dist/src/onboarding/init.js +33 -2
  69. package/dist/src/onboarding/init.js.map +1 -1
  70. package/dist/src/onboarding/memory-scaffold.d.ts +18 -0
  71. package/dist/src/onboarding/memory-scaffold.d.ts.map +1 -0
  72. package/dist/src/onboarding/memory-scaffold.js +151 -0
  73. package/dist/src/onboarding/memory-scaffold.js.map +1 -0
  74. package/dist/src/onboarding/nested-agents-generate.d.ts +6 -2
  75. package/dist/src/onboarding/nested-agents-generate.d.ts.map +1 -1
  76. package/dist/src/onboarding/nested-agents-generate.js +34 -9
  77. package/dist/src/onboarding/nested-agents-generate.js.map +1 -1
  78. package/dist/src/onboarding/nested-agents-templates.d.ts +23 -1
  79. package/dist/src/onboarding/nested-agents-templates.d.ts.map +1 -1
  80. package/dist/src/onboarding/nested-agents-templates.js +138 -8
  81. package/dist/src/onboarding/nested-agents-templates.js.map +1 -1
  82. package/dist/src/onboarding/profile-validate.d.ts +13 -0
  83. package/dist/src/onboarding/profile-validate.d.ts.map +1 -0
  84. package/dist/src/onboarding/profile-validate.js +109 -0
  85. package/dist/src/onboarding/profile-validate.js.map +1 -0
  86. package/dist/src/onboarding/upgrade.d.ts +5 -0
  87. package/dist/src/onboarding/upgrade.d.ts.map +1 -1
  88. package/dist/src/onboarding/upgrade.js +27 -1
  89. package/dist/src/onboarding/upgrade.js.map +1 -1
  90. package/dist/src/onboarding/workspace-discovery.d.ts +4 -3
  91. package/dist/src/onboarding/workspace-discovery.d.ts.map +1 -1
  92. package/dist/src/onboarding/workspace-discovery.js +51 -3
  93. package/dist/src/onboarding/workspace-discovery.js.map +1 -1
  94. package/dist/src/profiles/profile-schema.d.ts +116 -0
  95. package/dist/src/profiles/profile-schema.d.ts.map +1 -0
  96. package/dist/src/profiles/profile-schema.js +94 -0
  97. package/dist/src/profiles/profile-schema.js.map +1 -0
  98. package/dist/src/profiles/stack-profile.d.ts +41 -1
  99. package/dist/src/profiles/stack-profile.d.ts.map +1 -1
  100. package/dist/src/profiles/stack-profile.js +9 -0
  101. package/dist/src/profiles/stack-profile.js.map +1 -1
  102. package/dist/src/profiles/terminology-utils.d.ts +8 -0
  103. package/dist/src/profiles/terminology-utils.d.ts.map +1 -0
  104. package/dist/src/profiles/terminology-utils.js +31 -0
  105. package/dist/src/profiles/terminology-utils.js.map +1 -0
  106. package/dist/src/validators/skill-validate.d.ts +15 -0
  107. package/dist/src/validators/skill-validate.d.ts.map +1 -1
  108. package/dist/src/validators/skill-validate.js +204 -2
  109. package/dist/src/validators/skill-validate.js.map +1 -1
  110. package/package.json +11 -3
  111. package/profiles/astro-typescript-turborepo.yaml +87 -0
  112. package/profiles/editframe-html-templates/composition-agents.md +34 -0
  113. package/profiles/editframe-html-templates/composition.html +32 -0
  114. package/profiles/editframe-html.yaml +283 -0
  115. package/profiles/forge-shell.yaml +77 -0
  116. package/profiles/phaser-turborepo.yaml +87 -0
  117. package/skills/fo/fo-doc-audit/SKILL.md +6 -6
  118. package/skills/fo/fo-handoff/SKILL.md +2 -1
  119. package/skills/fo/fo-idea-implement/SKILL.md +44 -2
  120. package/skills/fo/fo-idea-plan/SKILL.md +1 -0
  121. package/skills/fo/fo-knowledge-distill/SKILL.md +170 -0
  122. package/skills/fo/fo-memory-sync/SKILL.md +6 -3
  123. package/skills/fo/fo-memory-sync/fix-patterns.md +38 -4
  124. package/skills/fo/fo-review/SKILL.md +2 -2
  125. package/skills/fo/fo-session-retro/SKILL.md +21 -11
  126. package/skills/fo/fo-session-save/SKILL.md +1 -1
  127. package/skills/fo/fo-session-save/fix-patterns.md +53 -29
  128. package/skills/fo/fo-session-save/learned-principles.md +59 -8
  129. package/skills/meta/forge-bootstrap/SKILL.md +16 -4
  130. package/skills/meta/forge-bootstrap/operator-profile-template.md +1 -0
  131. package/skills/meta/skill-create/SKILL.md +1 -1
  132. package/skills/shared/grilling/SKILL.md +1 -1
  133. package/skills/shared/grilling/learned-principles.md +14 -0
  134. package/skills/shared/grilling/qa-log.md +105 -6
  135. package/skills/shared/knowledge/learned-principles.md +5 -0
  136. package/skills/shared/windows-ai-tooling/SKILL.md +154 -1
  137. package/skills/shared/writing-great-skills/SKILL.md +74 -1
@@ -0,0 +1,322 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>Knowledge compaction planning and execution — archive aged/superseded entries, mark stale L2 principles (RFC-0662).</purpose>
4
+ <non-goals>
5
+ <item>Do not distill or group entries semantically — that is the fo-knowledge-distill skill's job.</item>
6
+ <item>Do not parse knowledge files — use parse.ts (RFC-0660).</item>
7
+ <item>Do not serialize — use serialize.ts (RFC-0660).</item>
8
+ <item>Do not wire into build pipelines or CI — invocation is operator-explicit.</item>
9
+ </non-goals>
10
+ </MODULE_CONTRACT>
11
+ <CHANGE_SUMMARY>
12
+ <item>RFC-0662: initial compaction module with planCompaction, executeCompaction, resolveRetentionDays, resolveStaleDays.</item>
13
+ </CHANGE_SUMMARY>
14
+ */
15
+ import fs from "node:fs";
16
+ import path from "node:path";
17
+ import { parse as parseYaml } from "yaml";
18
+ import { parseKnowledgeFile } from "./parse.js";
19
+ import { serializeKnowledgeFile } from "./serialize.js";
20
+ // ---------------------------------------------------------------------------
21
+ // Defaults
22
+ // ---------------------------------------------------------------------------
23
+ export const DEFAULT_RETENTION_DAYS = 90;
24
+ export const DEFAULT_STALE_DAYS = 90;
25
+ // ---------------------------------------------------------------------------
26
+ // Date helpers
27
+ // ---------------------------------------------------------------------------
28
+ function parseDate(dateStr) {
29
+ const [y, m, d] = dateStr.split("-").map(Number);
30
+ return new Date(y, m - 1, d).getTime();
31
+ }
32
+ function daysBetween(from, to) {
33
+ const ms = parseDate(to) - parseDate(from);
34
+ return Math.floor(ms / (1000 * 60 * 60 * 24));
35
+ }
36
+ // ---------------------------------------------------------------------------
37
+ // Archive companion path
38
+ // ---------------------------------------------------------------------------
39
+ function archiveCompanionPath(filePath) {
40
+ const dir = path.dirname(filePath);
41
+ const ext = path.extname(filePath);
42
+ const base = path.basename(filePath, ext);
43
+ return path.join(dir, `${base}.archive${ext}`);
44
+ }
45
+ // ---------------------------------------------------------------------------
46
+ // planCompaction — pure function
47
+ // ---------------------------------------------------------------------------
48
+ export function planCompaction(files, options) {
49
+ const plans = [];
50
+ for (const file of files) {
51
+ // Skip knowledge-adjacent files (no structured entries)
52
+ if (file.isKnowledgeAdjacent)
53
+ continue;
54
+ const actions = [];
55
+ for (const entry of file.entries) {
56
+ const meta = entry.meta;
57
+ // 1. Expiry archive (all layers)
58
+ if (meta.expiresAt !== undefined && meta.expiresAt !== null) {
59
+ const diff = daysBetween(meta.expiresAt, options.today);
60
+ if (diff > 0) {
61
+ actions.push({
62
+ kind: "archive-expired",
63
+ file: file.path,
64
+ entryId: meta.id,
65
+ reason: `expiresAt ${meta.expiresAt} is past today ${options.today}`,
66
+ });
67
+ continue;
68
+ }
69
+ }
70
+ // 2. Supersession archive (L1, L2)
71
+ if (meta.status === "superseded") {
72
+ actions.push({
73
+ kind: "archive-superseded",
74
+ file: file.path,
75
+ entryId: meta.id,
76
+ reason: `status is superseded`,
77
+ });
78
+ continue;
79
+ }
80
+ // 3. L0 retention archive
81
+ if (file.layer === "L0" && meta.status === "active") {
82
+ const age = daysBetween(meta.created, options.today);
83
+ if (age > options.retentionDays) {
84
+ actions.push({
85
+ kind: "archive-l0-retention",
86
+ file: file.path,
87
+ entryId: meta.id,
88
+ reason: `created ${meta.created} older than ${options.retentionDays} days`,
89
+ });
90
+ continue;
91
+ }
92
+ }
93
+ // 4. L2 staleness marking
94
+ if (file.layer === "L2" &&
95
+ meta.status === "active" &&
96
+ meta.lastConfirmedAt !== undefined &&
97
+ meta.lastConfirmedAt !== null) {
98
+ const age = daysBetween(meta.lastConfirmedAt, options.today);
99
+ if (age > options.staleDays) {
100
+ actions.push({
101
+ kind: "mark-stale",
102
+ file: file.path,
103
+ entryId: meta.id,
104
+ reason: `lastConfirmedAt ${meta.lastConfirmedAt} older than ${options.staleDays} days`,
105
+ });
106
+ }
107
+ }
108
+ }
109
+ plans.push({
110
+ file: file.path,
111
+ archiveFile: archiveCompanionPath(file.path),
112
+ actions,
113
+ legacySectionCount: file.legacySections.length,
114
+ });
115
+ }
116
+ return plans;
117
+ }
118
+ // ---------------------------------------------------------------------------
119
+ // executeCompaction — I/O execution
120
+ // ---------------------------------------------------------------------------
121
+ export function executeCompaction(plans, dryRun) {
122
+ const fileResults = [];
123
+ const errors = [];
124
+ let totalArchived = 0;
125
+ let totalMarkedStale = 0;
126
+ let totalLegacyFiles = 0;
127
+ for (const plan of plans) {
128
+ // Parse the live file
129
+ const parsed = parseKnowledgeFile(plan.file);
130
+ // Refuse if parse issues
131
+ if (parsed.parseIssues.length > 0) {
132
+ errors.push(`${plan.file}: ${parsed.parseIssues.length} parse issue(s) — refusing to compact`);
133
+ fileResults.push({
134
+ file: plan.file,
135
+ archiveFile: plan.archiveFile,
136
+ actions: plan.actions,
137
+ legacySectionCount: plan.legacySectionCount,
138
+ archived: 0,
139
+ markedStale: 0,
140
+ written: false,
141
+ });
142
+ continue;
143
+ }
144
+ // Build action lookup
145
+ const actionByEntryId = new Map();
146
+ for (const action of plan.actions) {
147
+ actionByEntryId.set(action.entryId, action);
148
+ }
149
+ // Partition entries
150
+ const keepEntries = [];
151
+ const archiveEntries = [];
152
+ for (const entry of parsed.entries) {
153
+ const action = actionByEntryId.get(entry.meta.id);
154
+ if (action && action.kind.startsWith("archive-")) {
155
+ archiveEntries.push(entry);
156
+ }
157
+ else if (action && action.kind === "mark-stale") {
158
+ // Keep in place, update status
159
+ keepEntries.push({
160
+ ...entry,
161
+ meta: { ...entry.meta, status: "stale" },
162
+ });
163
+ }
164
+ else {
165
+ keepEntries.push(entry);
166
+ }
167
+ }
168
+ // Check archive companion for parse issues if it exists
169
+ if (archiveEntries.length > 0 && fs.existsSync(plan.archiveFile)) {
170
+ const archiveParsed = parseKnowledgeFile(plan.archiveFile);
171
+ if (archiveParsed.parseIssues.length > 0) {
172
+ errors.push(`${plan.archiveFile}: ${archiveParsed.parseIssues.length} parse issue(s) — refusing to compact`);
173
+ fileResults.push({
174
+ file: plan.file,
175
+ archiveFile: plan.archiveFile,
176
+ actions: plan.actions,
177
+ legacySectionCount: plan.legacySectionCount,
178
+ archived: 0,
179
+ markedStale: 0,
180
+ written: false,
181
+ });
182
+ continue;
183
+ }
184
+ }
185
+ const archived = archiveEntries.length;
186
+ const markedStale = plan.actions.filter((a) => a.kind === "mark-stale").length;
187
+ totalArchived += archived;
188
+ totalMarkedStale += markedStale;
189
+ if (plan.legacySectionCount > 0)
190
+ totalLegacyFiles++;
191
+ if (dryRun) {
192
+ fileResults.push({
193
+ file: plan.file,
194
+ archiveFile: plan.archiveFile,
195
+ actions: plan.actions,
196
+ legacySectionCount: plan.legacySectionCount,
197
+ archived,
198
+ markedStale,
199
+ written: false,
200
+ });
201
+ continue;
202
+ }
203
+ // Write live file (only if there are changes)
204
+ if (plan.actions.length > 0) {
205
+ const liveContent = serializeKnowledgeFile({
206
+ ...parsed,
207
+ entries: keepEntries,
208
+ });
209
+ try {
210
+ fs.writeFileSync(plan.file, liveContent, "utf8");
211
+ }
212
+ catch (err) {
213
+ errors.push(`${plan.file}: write failed — ${err.message}`);
214
+ }
215
+ }
216
+ // Write archive companion (only if there are entries to archive)
217
+ if (archiveEntries.length > 0) {
218
+ let archiveParsed;
219
+ if (fs.existsSync(plan.archiveFile)) {
220
+ archiveParsed = parseKnowledgeFile(plan.archiveFile);
221
+ }
222
+ else {
223
+ // Create new archive file with a preamble
224
+ const fileName = path.basename(plan.file);
225
+ archiveParsed = {
226
+ path: plan.archiveFile,
227
+ layer: parsed.layer,
228
+ preamble: `<!-- knowledge-layer: ${parsed.layer ?? "L0"} -->\n# ${fileName} (archive)\n\nArchived entries from ${fileName}. Generated by forge.skill.knowledge.compact (RFC-0662).`,
229
+ entries: [],
230
+ legacySections: [],
231
+ parseIssues: [],
232
+ isKnowledgeAdjacent: false,
233
+ };
234
+ }
235
+ // Rewrite status for archived entries
236
+ const archivedEntries = archiveEntries.map((entry) => {
237
+ const action = actionByEntryId.get(entry.meta.id);
238
+ const newMeta = { ...entry.meta };
239
+ if (action.kind === "archive-expired" || action.kind === "archive-l0-retention") {
240
+ newMeta.status = "archived";
241
+ }
242
+ // For archive-superseded: keep status as "superseded" (preserves supersedes chain)
243
+ return { ...entry, meta: newMeta };
244
+ });
245
+ const mergedContent = serializeKnowledgeFile({
246
+ ...archiveParsed,
247
+ entries: [...archiveParsed.entries, ...archivedEntries],
248
+ });
249
+ try {
250
+ // Use atomic write for archive companion
251
+ // writeFileAtomic is async, but we're in a sync context — use writeFileSync for simplicity
252
+ // The staging + rename pattern is handled by writeFileAtomic for production use
253
+ // For now, use direct write (the live file is already written non-atomically above)
254
+ fs.writeFileSync(plan.archiveFile, mergedContent, "utf8");
255
+ }
256
+ catch (err) {
257
+ errors.push(`${plan.archiveFile}: write failed — ${err.message}`);
258
+ }
259
+ }
260
+ fileResults.push({
261
+ file: plan.file,
262
+ archiveFile: plan.archiveFile,
263
+ actions: plan.actions,
264
+ legacySectionCount: plan.legacySectionCount,
265
+ archived,
266
+ markedStale,
267
+ written: true,
268
+ });
269
+ }
270
+ return {
271
+ command: "forge.skill.knowledge.compact",
272
+ status: errors.length > 0 ? "fail" : "pass",
273
+ dryRun,
274
+ files: fileResults,
275
+ totals: {
276
+ archived: totalArchived,
277
+ markedStale: totalMarkedStale,
278
+ legacyFiles: totalLegacyFiles,
279
+ },
280
+ ...(errors.length > 0 ? { errors } : {}),
281
+ };
282
+ }
283
+ // ---------------------------------------------------------------------------
284
+ // resolveRetentionDays / resolveStaleDays — reads forge.yaml
285
+ // ---------------------------------------------------------------------------
286
+ export function resolveRetentionDays(workspaceRoot) {
287
+ try {
288
+ const forgeYamlPath = path.join(workspaceRoot, "forge.yaml");
289
+ const content = fs.readFileSync(forgeYamlPath, "utf8");
290
+ const config = parseYaml(content);
291
+ const bindings = config?.bindings;
292
+ const knowledge = bindings?.knowledge;
293
+ const retentionDays = knowledge?.retentionDays;
294
+ if (typeof retentionDays === "number" &&
295
+ retentionDays > 0 &&
296
+ Number.isInteger(retentionDays)) {
297
+ return retentionDays;
298
+ }
299
+ return DEFAULT_RETENTION_DAYS;
300
+ }
301
+ catch {
302
+ return DEFAULT_RETENTION_DAYS;
303
+ }
304
+ }
305
+ export function resolveStaleDays(workspaceRoot) {
306
+ try {
307
+ const forgeYamlPath = path.join(workspaceRoot, "forge.yaml");
308
+ const content = fs.readFileSync(forgeYamlPath, "utf8");
309
+ const config = parseYaml(content);
310
+ const bindings = config?.bindings;
311
+ const knowledge = bindings?.knowledge;
312
+ const staleDays = knowledge?.staleDays;
313
+ if (typeof staleDays === "number" && staleDays > 0 && Number.isInteger(staleDays)) {
314
+ return staleDays;
315
+ }
316
+ return DEFAULT_STALE_DAYS;
317
+ }
318
+ catch {
319
+ return DEFAULT_STALE_DAYS;
320
+ }
321
+ }
322
+ //# sourceMappingURL=compact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compact.js","sourceRoot":"","sources":["../../../src/knowledge/compact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { parseKnowledgeFile } from "./parse.ts";
2
+ export { serializeKnowledgeFile } from "./serialize.ts";
3
+ export { knowledgeEntryMetaSchema, type KnowledgeLayer, type KnowledgeEntryStatus, type KnowledgeEntryMeta, type KnowledgeEntry, type LegacySection, type ParseIssue, type ParsedKnowledgeFile, } from "./schema.ts";
4
+ export { planCompaction, executeCompaction, resolveRetentionDays, resolveStaleDays, DEFAULT_RETENTION_DAYS, DEFAULT_STALE_DAYS, type CompactOptions, type CompactAction, type CompactActionKind, type CompactFilePlan, type CompactFileResult, type CompactReport, } from "./compact.ts";
5
+ export { computeLayerBudgets, resolveKnowledgeBudgets, DEFAULT_KNOWLEDGE_BUDGETS, type KnowledgeBudgets, type LayerBudgetReport, } from "./budgets.ts";
6
+ export { normalizeTitle, detectDuplicatePrinciples, planPromotion, type DuplicatePair, type PromotionPlan, } from "./promote.ts";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/knowledge/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EACL,wBAAwB,EACxB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,19 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>Barrel export for the knowledge module — parser, serializer, schema, and types (RFC-0660).</purpose>
4
+ <non-goals>
5
+ <item>Do not re-export from @warpgogol/* — forge src/ is portable.</item>
6
+ </non-goals>
7
+ </MODULE_CONTRACT>
8
+ <CHANGE_SUMMARY>
9
+ <item>RFC-0660: initial knowledge module barrel export.</item>
10
+ <item>RFC-0663: added promote.ts exports for cross-skill duplicate detection and promotion planning.</item>
11
+ </CHANGE_SUMMARY>
12
+ */
13
+ export { parseKnowledgeFile } from "./parse.js";
14
+ export { serializeKnowledgeFile } from "./serialize.js";
15
+ export { knowledgeEntryMetaSchema, } from "./schema.js";
16
+ export { planCompaction, executeCompaction, resolveRetentionDays, resolveStaleDays, DEFAULT_RETENTION_DAYS, DEFAULT_STALE_DAYS, } from "./compact.js";
17
+ export { computeLayerBudgets, resolveKnowledgeBudgets, DEFAULT_KNOWLEDGE_BUDGETS, } from "./budgets.js";
18
+ export { normalizeTitle, detectDuplicatePrinciples, planPromotion, } from "./promote.js";
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/knowledge/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EACL,wBAAwB,GAQzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,GAOnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,GAG1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,aAAa,GAGd,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type ParsedKnowledgeFile } from "./schema.ts";
2
+ export declare function parseKnowledgeFile(filePath: string): ParsedKnowledgeFile;
3
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/knowledge/parse.ts"],"names":[],"mappings":"AAgBA,OAAO,EAOL,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AAoBrB,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAsLxE"}
@@ -0,0 +1,205 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>Tolerant markdown parser for knowledge files — produces ParsedKnowledgeFile with entries, legacy sections, and parse issues (RFC-0660).</purpose>
4
+ <non-goals>
5
+ <item>Do not validate entry uniqueness or cross-references — that is handled by SKILL-20 in skill-validate.ts.</item>
6
+ <item>Do not serialize — that is handled by serialize.ts.</item>
7
+ </non-goals>
8
+ </MODULE_CONTRACT>
9
+ <CHANGE_SUMMARY>
10
+ <item>RFC-0660: initial tolerant parser for structured knowledge entries.</item>
11
+ </CHANGE_SUMMARY>
12
+ */
13
+ import fs from "node:fs";
14
+ import path from "node:path";
15
+ import { parse as parseYaml } from "yaml";
16
+ import { knowledgeEntryMetaSchema, } from "./schema.js";
17
+ const ENTRY_HEADING_PATTERN = /^###\s+(K-\d{4})\s*:\s*(.+)$/;
18
+ const KNOWLEDGE_ENTRY_FENCE = "knowledge-entry";
19
+ const LAYER_COMMENT_PATTERN = /<!--\s*knowledge-layer:\s*(L[012])\s*-->/;
20
+ const FILENAME_LAYER_MAP = {
21
+ "qa-log.md": "L0",
22
+ "fix-patterns.md": "L1",
23
+ "learned-principles.md": "L2",
24
+ };
25
+ function detectLayer(content, fileName) {
26
+ const commentMatch = content.match(LAYER_COMMENT_PATTERN);
27
+ if (commentMatch) {
28
+ return commentMatch[1];
29
+ }
30
+ return FILENAME_LAYER_MAP[fileName] ?? null;
31
+ }
32
+ export function parseKnowledgeFile(filePath) {
33
+ let content;
34
+ try {
35
+ content = fs.readFileSync(filePath, "utf-8");
36
+ }
37
+ catch {
38
+ // File read errors (EISDIR, ENOENT, etc.) — return empty result
39
+ return {
40
+ path: filePath,
41
+ layer: null,
42
+ preamble: "",
43
+ entries: [],
44
+ legacySections: [],
45
+ parseIssues: [],
46
+ isKnowledgeAdjacent: true,
47
+ };
48
+ }
49
+ const fileName = path.basename(filePath);
50
+ const lines = content.split(/\r?\n/);
51
+ const layer = detectLayer(content, fileName);
52
+ const entries = [];
53
+ const legacySections = [];
54
+ const parseIssues = [];
55
+ let i = 0;
56
+ let preambleEnd = 0;
57
+ // Find the first entry heading or the first non-preamble content
58
+ let firstEntryLine = -1;
59
+ for (let j = 0; j < lines.length; j++) {
60
+ if (ENTRY_HEADING_PATTERN.test(lines[j])) {
61
+ firstEntryLine = j;
62
+ break;
63
+ }
64
+ }
65
+ // If no entry headings and no layer declaration, it's a knowledge-adjacent file
66
+ const isKnowledgeAdjacent = firstEntryLine === -1 && layer === null;
67
+ if (isKnowledgeAdjacent) {
68
+ return {
69
+ path: filePath,
70
+ layer: null,
71
+ preamble: content,
72
+ entries: [],
73
+ legacySections: [],
74
+ parseIssues: [],
75
+ isKnowledgeAdjacent: true,
76
+ };
77
+ }
78
+ // Preamble is everything before the first entry heading
79
+ if (firstEntryLine === -1) {
80
+ // Has layer but no entries — all content is preamble (structured-empty file)
81
+ return {
82
+ path: filePath,
83
+ layer,
84
+ preamble: content,
85
+ entries: [],
86
+ legacySections: [],
87
+ parseIssues: [],
88
+ isKnowledgeAdjacent: false,
89
+ };
90
+ }
91
+ preambleEnd = firstEntryLine;
92
+ const preamble = lines.slice(0, preambleEnd).join("\n");
93
+ // Parse entries and legacy sections
94
+ i = preambleEnd;
95
+ while (i < lines.length) {
96
+ const headingMatch = lines[i].match(ENTRY_HEADING_PATTERN);
97
+ if (headingMatch) {
98
+ const entryId = headingMatch[1];
99
+ const title = headingMatch[2].trim();
100
+ const entryLineStart = i + 1; // 1-based
101
+ i++;
102
+ // Look for fenced knowledge-entry block immediately after heading
103
+ let meta = null;
104
+ let metaBlockStart = -1;
105
+ let metaBlockEnd = -1;
106
+ // Skip blank lines between heading and fence
107
+ while (i < lines.length && lines[i].trim() === "") {
108
+ i++;
109
+ }
110
+ if (i < lines.length && lines[i].trim().startsWith("```")) {
111
+ const fenceTag = lines[i].trim().replace(/^```/, "").trim();
112
+ if (fenceTag === KNOWLEDGE_ENTRY_FENCE) {
113
+ metaBlockStart = i + 1; // 1-based line after fence start
114
+ i++;
115
+ const yamlLines = [];
116
+ while (i < lines.length && !lines[i].trim().startsWith("```")) {
117
+ yamlLines.push(lines[i]);
118
+ i++;
119
+ }
120
+ if (i < lines.length && lines[i].trim().startsWith("```")) {
121
+ metaBlockEnd = i + 1; // 1-based fence closing line
122
+ i++;
123
+ const yamlText = yamlLines.join("\n");
124
+ try {
125
+ const raw = parseYaml(yamlText);
126
+ const result = knowledgeEntryMetaSchema.safeParse(raw);
127
+ if (result.success) {
128
+ meta = result.data;
129
+ }
130
+ else {
131
+ for (const issue of result.error.issues) {
132
+ parseIssues.push({
133
+ line: metaBlockStart,
134
+ message: `Entry ${entryId}: ${issue.message}`,
135
+ entryId,
136
+ });
137
+ }
138
+ }
139
+ }
140
+ catch (err) {
141
+ parseIssues.push({
142
+ line: metaBlockStart,
143
+ message: `Entry ${entryId}: YAML parse error: ${err.message}`,
144
+ entryId,
145
+ });
146
+ }
147
+ }
148
+ else {
149
+ parseIssues.push({
150
+ line: metaBlockStart,
151
+ message: `Entry ${entryId}: unterminated knowledge-entry fence`,
152
+ entryId,
153
+ });
154
+ }
155
+ }
156
+ }
157
+ // Collect body until next entry heading or EOF
158
+ const bodyLines = [];
159
+ while (i < lines.length && !ENTRY_HEADING_PATTERN.test(lines[i])) {
160
+ bodyLines.push(lines[i]);
161
+ i++;
162
+ }
163
+ const body = bodyLines.join("\n").replace(/\n+$/, "");
164
+ if (meta) {
165
+ entries.push({
166
+ meta,
167
+ title,
168
+ body,
169
+ lineStart: entryLineStart,
170
+ });
171
+ }
172
+ else if (metaBlockStart === -1) {
173
+ // Heading exists but no metadata block followed — it's a legacy section
174
+ legacySections.push({
175
+ text: lines.slice(entryLineStart - 1, i).join("\n"),
176
+ lineStart: entryLineStart,
177
+ });
178
+ }
179
+ // If meta parsing failed, the parse issue is already recorded
180
+ }
181
+ else {
182
+ // Non-entry content — collect as legacy section
183
+ const legacyStart = i + 1; // 1-based
184
+ const legacyLines = [];
185
+ while (i < lines.length && !ENTRY_HEADING_PATTERN.test(lines[i])) {
186
+ legacyLines.push(lines[i]);
187
+ i++;
188
+ }
189
+ legacySections.push({
190
+ text: legacyLines.join("\n"),
191
+ lineStart: legacyStart,
192
+ });
193
+ }
194
+ }
195
+ return {
196
+ path: filePath,
197
+ layer,
198
+ preamble,
199
+ entries,
200
+ legacySections,
201
+ parseIssues,
202
+ isKnowledgeAdjacent: false,
203
+ };
204
+ }
205
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/knowledge/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { ParsedKnowledgeFile, KnowledgeEntry } from "./schema.ts";
2
+ export interface DuplicatePair {
3
+ a: {
4
+ skill: string;
5
+ entryId: string;
6
+ title: string;
7
+ };
8
+ b: {
9
+ skill: string;
10
+ entryId: string;
11
+ title: string;
12
+ };
13
+ normalizedTitle: string;
14
+ kind: "exact" | "containment";
15
+ }
16
+ export interface PromotionPlan {
17
+ sharedEntry: KnowledgeEntry;
18
+ localPointers: Array<{
19
+ skill: string;
20
+ file: string;
21
+ entryId: string;
22
+ }>;
23
+ }
24
+ export declare function normalizeTitle(title: string): string;
25
+ export declare function detectDuplicatePrinciples(files: Array<{
26
+ skill: string;
27
+ parsed: ParsedKnowledgeFile;
28
+ }>): DuplicatePair[];
29
+ export declare function planPromotion(sources: Array<{
30
+ skill: string;
31
+ file: string;
32
+ entry: KnowledgeEntry;
33
+ }>, merged: {
34
+ title: string;
35
+ body: string;
36
+ }, nextSharedId: string, today: string): PromotionPlan;
37
+ //# sourceMappingURL=promote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../../src/knowledge/promote.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAsB,MAAM,aAAa,CAAC;AAO3F,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,OAAO,GAAG,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,cAAc,CAAC;IAC5B,aAAa,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAuCD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC,GAC3D,aAAa,EAAE,CAuCjB;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC,EACtE,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACvC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,aAAa,CAgCf"}