craftar 0.30.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -3
- package/dist/cli.js +6 -5
- package/dist/cli.js.map +1 -1
- package/dist/core/impact.js +10 -5
- package/dist/core/impact.js.map +1 -1
- package/dist/core/integrations.js +31 -6
- package/dist/core/integrations.js.map +1 -1
- package/dist/emitters/claude-code.js +6 -2
- package/dist/emitters/claude-code.js.map +1 -1
- package/dist/importers/claude-code.js +191 -19
- package/dist/importers/claude-code.js.map +1 -1
- package/dist/importers/drift-promote.js +52 -16
- package/dist/importers/drift-promote.js.map +1 -1
- package/dist/importers/kiro-report.js +11 -3
- package/dist/importers/kiro-report.js.map +1 -1
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -1
- package/package.json +1 -1
package/dist/core/impact.js
CHANGED
|
@@ -324,6 +324,9 @@ export async function nextSync(p) {
|
|
|
324
324
|
/**
|
|
325
325
|
* Which workspaces are concerned by a condition on their configuration (spec 25 §4.3).
|
|
326
326
|
* Tests the MERGED configuration to decide, then checks `local` first, else `base` to name the file.
|
|
327
|
+
* The file-naming tests see one file's document and the merged configuration, so a condition that
|
|
328
|
+
* spans two fields (a profile and a removal) can be decided on the merged one and located in the
|
|
329
|
+
* file that holds the removal.
|
|
327
330
|
* Arrays replace on merge, so with `base.x: [a]` and `local.x: []`, the merged config has `[]`
|
|
328
331
|
* and the workspace is NOT concerned — even though `base` had `a`.
|
|
329
332
|
* `missing` entries and stage-`config` errors count as `unchecked`.
|
|
@@ -356,17 +359,19 @@ export function concerned(planned, entries, test) {
|
|
|
356
359
|
continue;
|
|
357
360
|
}
|
|
358
361
|
// Test the MERGED configuration first to decide if concerned (spec 25 §4.3)
|
|
359
|
-
if (!test(merged.config))
|
|
362
|
+
if (!test(merged.config, merged.config))
|
|
360
363
|
continue;
|
|
361
364
|
// Concerned: find which file holds the entry (local first, then base)
|
|
362
|
-
if (test(merged.local)) {
|
|
365
|
+
if (test(merged.local, merged.config)) {
|
|
363
366
|
result.concerned.push({ path: entry.entry.path, file: "craftar.local.yaml" });
|
|
364
367
|
}
|
|
365
|
-
else if (test(merged.base)) {
|
|
368
|
+
else if (test(merged.base, merged.config)) {
|
|
366
369
|
result.concerned.push({ path: entry.entry.path, file: "craftar.yaml" });
|
|
367
370
|
}
|
|
368
|
-
// No else:
|
|
369
|
-
//
|
|
371
|
+
// No else: unreachable while each part of a test that `doc` decides reads one located field (the rest from `merged`)
|
|
372
|
+
// — arrays replace on merge, so the part that passes on the merged value passes on the file it came from. A test that
|
|
373
|
+
// needs two `doc` fields at once (an AND), held in different files, reaches it and drops the workspace silently (the
|
|
374
|
+
// forge promote removal warning did, before it read `profile` from `merged`).
|
|
370
375
|
}
|
|
371
376
|
return result;
|
|
372
377
|
}
|
package/dist/core/impact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impact.js","sourceRoot":"","sources":["../../src/core/impact.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"impact.js","sourceRoot":"","sources":["../../src/core/impact.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,mBAAmB,EACnB,MAAM,EACN,aAAa,EACb,YAAY,GAMb,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAKxC;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAoB,EAAE,OAAkB;IAC1E,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,kBAAkB,GAAG,OAAO,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAC5E,CAAC;IACF,OAAO,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AAChD,CAAC;AAmBD,gFAAgF;AAChF,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,GAAG,IAAc;IACnD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,QAAkB,EAClB,UAAkB;IAElB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACvE,IAAI,OAAO,KAAK,IAAI;YAAE,SAAS;QAC/B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAChE,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,6CAA6C,CAAC,CAAC;gBAC5F,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,OAAe;IACnD,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,MAAM,EAAE,CAAC;QAClC,gGAAgG;QAChG,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,QAAgB,EAChB,MAAyB,OAAO,CAAC,GAAG;IAEpC,uEAAuE;IACvE,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE9C,kCAAkC;IAClC,IAAI,GAAG,CAAC,mBAAmB,IAAI,GAAG,CAAC,mBAAmB,KAAK,EAAE,EAAE,CAAC;QAC9D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;IACnE,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,0BAA0B;IAC1B,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAErE,wDAAwD;IACxD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,UAAU,GAAqB,EAAE,CAAC;IACxC,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnC,6BAA6B;QAC7B,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI;YAAE,SAAS;QAEvC,IAAI,KAAK,GAAqB,IAAI,CAAC;QACnC,IAAI,GAAG,GAAkB,IAAI,CAAC;QAE9B,mBAAmB;QACnB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;YACxE,KAAK,GAAG,MAAM,CAAC;QACjB,CAAC;QACD,qBAAqB;aAChB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/E,KAAK,GAAG,QAAQ,CAAC;YACjB,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,CAAC;QAC9C,CAAC;QACD,oBAAoB;aACf,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACrC,0FAA0F;YAC1F,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC7B,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;gBAC9E,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;oBACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;wBACvB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;wBACzC,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;4BAC7B,KAAK,GAAG,OAAO,CAAC;4BAChB,GAAG,GAAG,aAAa,CAAC;4BACpB,MAAM;wBACR,CAAC;oBACH,CAAC;oBACD,IAAI,KAAK;wBAAE,MAAM;gBACnB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;QACH,CAAC;QAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YAC7D,IAAI,MAAM,SAAS,CAAC,KAAK,CAAC;gBAAE,UAAU,GAAG,IAAI,CAAC;QAChD,CAAC;IACH,CAAC;IAED,eAAe;IACf,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpE,kBAAkB;IAClB,IAAI,KAAoB,CAAC;IACzB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,KAAK,GAAG,MAAM,CAAC;IACjB,CAAC;SAAM,IAAI,UAAU,EAAE,CAAC;QACtB,KAAK,GAAG,SAAS,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,MAAM,CAAC;IACjB,CAAC;IAED,sEAAsE;IACtE,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;AACpE,CAAC;AAOD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAyB,EAAE,KAAY;IACnE,MAAM,OAAO,GAAc,EAAE,CAAC;IAC9B,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;QAChC,IAAI,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;gBACxC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;oBACxB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YACnE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBACnD,MAAM,EAAE,EAAE,CAAC,MAAM;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;aACpD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAQD;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAe,EAAE,KAAc;IACtD,2BAA2B;IAC3B,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACtD,CAAC;IACD,+CAA+C;IAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IAC7D,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAC9D,CAAC;IAED,8BAA8B;IAC9B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAE1E,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEpC,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACtD,wBAAwB;YACxB,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,kBAAkB;YAClB,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,YAAY,CAAC,IAAI,EAAE,CAAC;IAEpB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAChE,CAAC;AAQD;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA8B;IAC7D,SAAS,EAAE,CAAC;IACZ,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,CAAC;IACZ,MAAM,EAAE,CAAC;IACT,cAAc,EAAE,CAAC;CAClB,CAAC;AACF,MAAM,gBAAgB,GAAiB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAiB,CAAC,IAAI,CAC3F,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAC5D,CAAC;AAEF,yGAAyG;AACzG,MAAM,CAAC,MAAM,gBAAgB,GAA2C,gBAAgB,CAAC,MAAM,CAC7F,CAAC,CAAC,EAAwC,EAAE,CAAC,CAAC,KAAK,WAAW,CAC/D,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,QAAsB;IAEtB,MAAM,MAAM,GAA6D,EAAE,CAAC;IAC5E,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC5B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAqD,EAAE,CAAC;IACpE,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,iBAAiB,CAAC,EAAgB;IAChD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,CAAU;IACvC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;IACvB,IAAI,IAAiB,CAAC;IACtB,IAAI,QAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,uHAAuH;QACvH,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACpF,IAAI,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC/B,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,wFAAwF;QACxF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,CAAC;IAED,wDAAwD;IACxD,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACnD,CAAC;AAOD;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CACvB,OAAkB,EAClB,OAAyB,EACzB,IAAgD;IAEhD,MAAM,MAAM,GAAoB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAEzB,sBAAsB;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QACD,iCAAiC;QACjC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QAED,8EAA8E;QAC9E,IAAI,MAAgC,CAAC;QACrC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;QAC9B,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAChE,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACpB,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QAED,4EAA4E;QAC5E,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YAAE,SAAS;QAElD,sEAAsE;QACtE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAChF,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,qHAAqH;QACrH,sHAAsH;QACtH,qHAAqH;QACrH,8EAA8E;IAChF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,KAAY;IAEZ,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAyC;QAC/C,IAAI;QACJ,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK;QACL,MAAM,EAAE;YACN,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,KAAK,CAAC,IAAI;YAClB,GAAG,EAAE,IAAI;YACT,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC;QACD,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM;KACP,CAAC;IACF,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
* The one reader of `profile.integrations` (spec 33 §5.2): below schema 3 the block is ignored;
|
|
3
3
|
* at 3 it selects integration recipes and derives params.
|
|
4
4
|
*
|
|
5
|
-
* This module is pure — it imports types
|
|
6
|
-
* imports it).
|
|
5
|
+
* This module is pure — it imports types, the schema constant and `findSecrets` only, never
|
|
6
|
+
* resolve.ts (which imports it).
|
|
7
7
|
*/
|
|
8
8
|
import { FORGE_SCHEMA_INTEGRATIONS } from "../schema/index.js";
|
|
9
|
+
import { findSecrets } from "./secrets.js";
|
|
9
10
|
/* ------------------------------------------------------------------ */
|
|
10
11
|
/* Constants */
|
|
11
12
|
/* ------------------------------------------------------------------ */
|
|
@@ -20,6 +21,24 @@ const SLOT_RE = /^[A-Za-z][A-Za-z0-9_]*$/;
|
|
|
20
21
|
const KEY_RE = /^[A-Za-z0-9_]+$/;
|
|
21
22
|
/** Kind: a string matching `^[a-z0-9][a-z0-9._-]*$`. */
|
|
22
23
|
const KIND_RE = /^[a-z0-9][a-z0-9._-]*$/;
|
|
24
|
+
/**
|
|
25
|
+
* What a refused slot or key may be named by: a string shaped like a name and not a token of a
|
|
26
|
+
* known format (`findSecrets`); anything else — a URL pasted where a key goes, say — is named by
|
|
27
|
+
* its position, so a credential in it is never printed (tech-debt 2026-10-11 item 7; the user's
|
|
28
|
+
* ruling of 2026-10-17).
|
|
29
|
+
*/
|
|
30
|
+
const NAME_LIKE = /^[A-Za-z0-9_.-]{1,64}$/;
|
|
31
|
+
/**
|
|
32
|
+
* Returns the name to show in an error message: JSON.stringify(name) when it looks like a name
|
|
33
|
+
* and is not a token of a known format (`findSecrets`), otherwise `#${index + 1}` with the
|
|
34
|
+
* "(not shown: not shaped like a name)" suffix.
|
|
35
|
+
*/
|
|
36
|
+
function shownName(name, index) {
|
|
37
|
+
if (NAME_LIKE.test(name) && findSecrets(name).length === 0) {
|
|
38
|
+
return { shown: JSON.stringify(name), suffix: "" };
|
|
39
|
+
}
|
|
40
|
+
return { shown: `#${index + 1}`, suffix: " (not shown: not shaped like a name)" };
|
|
41
|
+
}
|
|
23
42
|
/* ------------------------------------------------------------------ */
|
|
24
43
|
/* Gate */
|
|
25
44
|
/* ------------------------------------------------------------------ */
|
|
@@ -60,10 +79,13 @@ export function effectiveProfile(forge, profile) {
|
|
|
60
79
|
const fromBlock = {};
|
|
61
80
|
const blockKeys = [];
|
|
62
81
|
// Process each slot in block order.
|
|
63
|
-
|
|
82
|
+
const slots = Object.keys(block);
|
|
83
|
+
for (let i = 0; i < slots.length; i++) {
|
|
84
|
+
const slot = slots[i];
|
|
64
85
|
// 1. Validate slot name.
|
|
65
86
|
if (!SLOT_RE.test(slot)) {
|
|
66
|
-
|
|
87
|
+
const { shown, suffix } = shownName(slot, i);
|
|
88
|
+
throw new Error(`profile ${pName}: integrations key ${shown} is not a slot name — letters, digits and _, starting with a letter${suffix}`);
|
|
67
89
|
}
|
|
68
90
|
const slotValue = block[slot];
|
|
69
91
|
// 2. Validate slot value is a mapping.
|
|
@@ -73,10 +95,13 @@ export function effectiveProfile(forge, profile) {
|
|
|
73
95
|
// Now we know slotValue is a plain object.
|
|
74
96
|
const slotObj = slotValue;
|
|
75
97
|
// Process each key inside the slot, in key order.
|
|
76
|
-
|
|
98
|
+
const keys = Object.keys(slotObj);
|
|
99
|
+
for (let j = 0; j < keys.length; j++) {
|
|
100
|
+
const key = keys[j];
|
|
77
101
|
// 3. Validate key name.
|
|
78
102
|
if (!KEY_RE.test(key)) {
|
|
79
|
-
|
|
103
|
+
const { shown, suffix } = shownName(key, j);
|
|
104
|
+
throw new Error(`profile ${pName}: integrations.${slot} key ${shown} is not a key name — letters, digits and _ only${suffix}`);
|
|
80
105
|
}
|
|
81
106
|
const val = slotObj[key];
|
|
82
107
|
// 4. null / undefined is absent (skipped), kind: null included.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/core/integrations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,yBAAyB,EAAoC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/core/integrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,9 +15,13 @@ export const claudeCode = {
|
|
|
15
15
|
for (const ing of ctx.aimed) {
|
|
16
16
|
const m = ing.meta;
|
|
17
17
|
switch (m.type) {
|
|
18
|
-
case "rule":
|
|
19
|
-
|
|
18
|
+
case "rule": {
|
|
19
|
+
const body = await ctx.text(ing, m.file);
|
|
20
|
+
// If frontmatterRaw is set, serialize with it; otherwise emit body only (no generated paths:)
|
|
21
|
+
const doc = m.frontmatterRaw != null ? serializeFrontmatter({}, body, { raw: m.frontmatterRaw }) : body;
|
|
22
|
+
out.push(await textFile(ctx, ruleFile("claude-code", m), doc, t, ing.ref));
|
|
20
23
|
break;
|
|
24
|
+
}
|
|
21
25
|
case "agent": {
|
|
22
26
|
const body = await ctx.text(ing, m.file);
|
|
23
27
|
const fm = m.frontmatterRaw ?? null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/emitters/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAKtG;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAA2B;IAChD,MAAM,EAAE,aAAa;IACrB,KAAK,CAAC,IAAI,CAAC,GAAG;QACZ,MAAM,GAAG,GAAkB,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,aAAa,CAAC;QACxB,MAAM,GAAG,GAAyB,EAAE,CAAC;QAErC,gGAAgG;QAChG,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;YACnB,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,MAAM;
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/emitters/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,7 +72,8 @@ export async function importClaudeCode(opts) {
|
|
|
72
72
|
report.created.push("craftar.yaml (workspace)");
|
|
73
73
|
// Spec 29 §4.2: after the flush, and never able to fail an import that succeeded.
|
|
74
74
|
if (opts.report) {
|
|
75
|
-
|
|
75
|
+
const preferred = (report.preferKiro ?? []).map((x) => x.source.replace(/^\.kiro\/steering\//, "").replace(/\.md$/, ""));
|
|
76
|
+
report.kiro = await kiroReport({ workspaceRoot: opts.workspaceRoot, forgeRoot: opts.forgeRoot, profile: opts.profileName, targets: planned.targets, preferred });
|
|
76
77
|
if (report.kiro.kind === "not-computed")
|
|
77
78
|
report.warnings.push(`import report: Kiro sections not computed: ${report.kiro.message}`);
|
|
78
79
|
}
|
|
@@ -110,11 +111,12 @@ async function planImport(opts, stage) {
|
|
|
110
111
|
continue;
|
|
111
112
|
const src = await readSource(path.join(steeringDir, f));
|
|
112
113
|
const text = toLf(stripBom(src.text));
|
|
113
|
-
const { data, body } = parseFrontmatter(text);
|
|
114
|
+
const { data, body, raw } = parseFrontmatter(text);
|
|
114
115
|
steeringMeta.set(f.replace(/\.md$/, ""), {
|
|
115
116
|
inclusion: data.inclusion ?? "always",
|
|
116
117
|
fileMatchPattern: data.fileMatchPattern,
|
|
117
118
|
generated: GENERATED_BANNER.test(body.slice(0, 300)),
|
|
119
|
+
setsInclusion: raw !== null && data.inclusion !== undefined,
|
|
118
120
|
text,
|
|
119
121
|
scan: src.scan,
|
|
120
122
|
});
|
|
@@ -126,16 +128,27 @@ async function planImport(opts, stage) {
|
|
|
126
128
|
continue;
|
|
127
129
|
const name = f.replace(/\.md$/, "");
|
|
128
130
|
const sm = steeringMeta.get(name);
|
|
129
|
-
const emitted = await readEmitted(claudeDir, "rule", f, origin, sm ? { inclusion: sm.inclusion, fileMatchPattern: sm.fileMatchPattern } : undefined);
|
|
131
|
+
const emitted = await readEmitted(claudeDir, "rule", f, origin, sm ? { inclusion: sm.inclusion, fileMatchPattern: sm.fileMatchPattern, generated: sm.generated, setsInclusion: sm.setsInclusion } : undefined);
|
|
130
132
|
if (!emitted)
|
|
131
133
|
continue;
|
|
134
|
+
// Copy any warnings from readEmitted into the report
|
|
135
|
+
if (emitted.warnings) {
|
|
136
|
+
for (const w of emitted.warnings)
|
|
137
|
+
report.warnings.push(w);
|
|
138
|
+
}
|
|
132
139
|
const ruleMeta = emitted.meta;
|
|
133
140
|
read(emitted.meta, emitted.files, emitted.scan, (ref) => {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
141
|
+
// The output name: a variant's ref is <name>--<profile>, and the steering file it mirrors is <name> (spec 29 §19.6).
|
|
142
|
+
ruleNames.push(name);
|
|
143
|
+
// Use the rule's own fileMatchPattern (from paths: or from steering), joined with comma for stack recipe
|
|
144
|
+
if (ruleMeta.inclusion === "fileMatch") {
|
|
145
|
+
const pattern = ruleMeta.fileMatchPattern;
|
|
146
|
+
const patternStr = Array.isArray(pattern) ? pattern.join(",") : pattern ?? "";
|
|
147
|
+
scopedRules.set(ref, patternStr);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
138
150
|
refs.base.push(ref);
|
|
151
|
+
}
|
|
139
152
|
});
|
|
140
153
|
}
|
|
141
154
|
/* ---- agents ---- */
|
|
@@ -267,16 +280,29 @@ async function planImport(opts, stage) {
|
|
|
267
280
|
if (!sm)
|
|
268
281
|
throw new Error(`import: --prefer-kiro ${name}: there is no .kiro/steering/${name}.md to prefer`);
|
|
269
282
|
const ruleText = q.files["rule.md"];
|
|
283
|
+
// The Claude file as written: a split rule's fence counts toward its lines
|
|
284
|
+
const ruleRaw = "frontmatterRaw" in q.meta ? q.meta.frontmatterRaw : undefined;
|
|
285
|
+
const ruleFileText = ruleRaw !== undefined ? `---\n${ruleRaw}\n---\n${ruleText}` : ruleText;
|
|
270
286
|
const { text, offset } = preferKiro({ name, steering: sm.text, rules: new Set(rules.keys()), handSteering, banner });
|
|
271
287
|
const source = `.kiro/steering/${name}.md`;
|
|
272
288
|
q.files = { "rule.md": text };
|
|
273
289
|
q.scan = scanOf("rule.md", sm);
|
|
274
290
|
q.lineOffset = offset;
|
|
275
291
|
q.meta = { ...q.meta, origin: origin(source) };
|
|
292
|
+
// A steering body written before rules kept their frontmatter apart still holds the fence: the
|
|
293
|
+
// text then carries it, as it did, and the rule's own copy is dropped so the file is not written twice.
|
|
294
|
+
if ("frontmatterRaw" in q.meta && q.meta.frontmatterRaw !== undefined && parseFrontmatter(text).raw !== null) {
|
|
295
|
+
const { frontmatterRaw: _dropped, ...rest } = q.meta;
|
|
296
|
+
q.meta = rest;
|
|
297
|
+
}
|
|
276
298
|
const after = q.after;
|
|
277
299
|
q.after = (ref) => {
|
|
278
300
|
after(ref);
|
|
279
|
-
|
|
301
|
+
// What sync will write to .claude/rules/<name>.md: if frontmatterRaw is still present, the fence
|
|
302
|
+
// wraps the body; otherwise the body alone (it may carry its own fence).
|
|
303
|
+
const raw = "frontmatterRaw" in q.meta ? q.meta.frontmatterRaw : undefined;
|
|
304
|
+
const written = raw !== undefined ? `---\n${raw}\n---\n${text}` : text;
|
|
305
|
+
preferred.push({ ref, source, steeringLines: textLines(sm.text), rule: `.claude/rules/${name}.md`, ruleLines: textLines(ruleFileText), differs: written !== ruleFileText });
|
|
280
306
|
};
|
|
281
307
|
}
|
|
282
308
|
}
|
|
@@ -536,6 +562,63 @@ export class ForgeStage {
|
|
|
536
562
|
}
|
|
537
563
|
}
|
|
538
564
|
}
|
|
565
|
+
/**
|
|
566
|
+
* A Claude rule's `paths:`, read from its raw frontmatter. `present` says the key is there; `value` is set only
|
|
567
|
+
* when it is usable — a non-empty string, or a non-empty list of non-empty strings. YAML is tried first; when it
|
|
568
|
+
* refuses the block (an unquoted `**` reads as an alias), the key is read by lines as Claude Code writes it: an
|
|
569
|
+
* inline value, or `- item` lines below, each unquoted and without a trailing ` # comment`.
|
|
570
|
+
*/
|
|
571
|
+
export function rulePaths(rawText) {
|
|
572
|
+
if (rawText === null)
|
|
573
|
+
return { present: false };
|
|
574
|
+
const raw = toLf(rawText);
|
|
575
|
+
// A glob is one line: a block scalar's text is not one
|
|
576
|
+
const glob = (i) => typeof i === "string" && i.length > 0 && !i.includes("\n");
|
|
577
|
+
const usable = (p) => glob(p) || (Array.isArray(p) && p.length > 0 && p.every(glob));
|
|
578
|
+
try {
|
|
579
|
+
const data = parseYamlText("frontmatter", raw);
|
|
580
|
+
if (data === null || typeof data !== "object" || !Object.hasOwn(data, "paths"))
|
|
581
|
+
return { present: false };
|
|
582
|
+
const p = data.paths;
|
|
583
|
+
return usable(p) ? { present: true, value: p } : { present: true };
|
|
584
|
+
}
|
|
585
|
+
catch {
|
|
586
|
+
const lines = raw.split("\n");
|
|
587
|
+
const at = lines.findIndex((l) => /^paths:(\s|$)/.test(l));
|
|
588
|
+
if (at === -1)
|
|
589
|
+
return { present: false };
|
|
590
|
+
const scalar = (v) => {
|
|
591
|
+
const t = v.trim();
|
|
592
|
+
const q = /^(["'])(.*)\1(\s+#.*)?$/.exec(t);
|
|
593
|
+
if (q)
|
|
594
|
+
return q[2];
|
|
595
|
+
if (/^["']/.test(t))
|
|
596
|
+
return null; // an unclosed or mismatched quote
|
|
597
|
+
return t.replace(/\s+#.*$/, "");
|
|
598
|
+
};
|
|
599
|
+
const inline = lines[at].slice("paths:".length);
|
|
600
|
+
if (inline.trim() !== "" && !/^\s*#/.test(inline)) {
|
|
601
|
+
const v = /^\s*[[{|>]/.test(inline) ? null : scalar(inline);
|
|
602
|
+
return v ? { present: true, value: v } : { present: true };
|
|
603
|
+
}
|
|
604
|
+
const items = [];
|
|
605
|
+
let indent = null; // every item at the first one's indent, which may be the key's own
|
|
606
|
+
for (const line of lines.slice(at + 1)) {
|
|
607
|
+
if (line.trim() === "" || /^\s*#/.test(line))
|
|
608
|
+
continue;
|
|
609
|
+
if (/^\S/.test(line) && !/^-\s/.test(line))
|
|
610
|
+
break; // the next key
|
|
611
|
+
const item = /^(\s*)-\s+(.*)$/.exec(line);
|
|
612
|
+
if (item && indent === null)
|
|
613
|
+
indent = item[1];
|
|
614
|
+
const v = item && item[1] === indent ? scalar(item[2]) : null;
|
|
615
|
+
if (!v)
|
|
616
|
+
return { present: true };
|
|
617
|
+
items.push(v);
|
|
618
|
+
}
|
|
619
|
+
return items.length ? { present: true, value: items } : { present: true };
|
|
620
|
+
}
|
|
621
|
+
}
|
|
539
622
|
/**
|
|
540
623
|
* One ingredient as import reads it from a workspace's `.claude/` tree. `rel` is the path under
|
|
541
624
|
* `.claude/<folder>/` (a file, or a skill's directory name). Returns `null` where `planImport`
|
|
@@ -546,17 +629,92 @@ export async function readEmitted(claudeDir, type, rel, origin, steering) {
|
|
|
546
629
|
const name = rel.replace(/\.md$/, "");
|
|
547
630
|
const src = await readSource(path.join(claudeDir, "rules", rel));
|
|
548
631
|
const text = toLf(stripBom(src.text));
|
|
632
|
+
const parsed = parseFrontmatter(text);
|
|
633
|
+
const warnings = [];
|
|
634
|
+
const pathsResult = rulePaths(parsed.raw);
|
|
635
|
+
const hasPaths = pathsResult.present;
|
|
636
|
+
const pathsValue = pathsResult.value;
|
|
637
|
+
const pathsUsable = pathsValue !== undefined;
|
|
638
|
+
// Determine scope by precedence:
|
|
639
|
+
// 1. hand-written steering with frontmatter inclusion → use steering
|
|
640
|
+
// 2. usable paths: → use paths
|
|
641
|
+
// 3. generated steering → use steering
|
|
642
|
+
// 4. else "always"
|
|
643
|
+
let inclusion = "always";
|
|
644
|
+
let fileMatchPattern;
|
|
645
|
+
let frontmatterRaw;
|
|
646
|
+
// When paths: is usable, split it out whoever sets the scope (so kiro/AGENTS.md don't carry the paths: block)
|
|
647
|
+
// — unless the file ends at its closing fence with no newline, which the split could not write back.
|
|
648
|
+
const useFrontmatter = pathsUsable && text.startsWith(`---\n${parsed.raw}\n---\n`);
|
|
649
|
+
if (useFrontmatter) {
|
|
650
|
+
frontmatterRaw = parsed.raw ?? undefined;
|
|
651
|
+
}
|
|
652
|
+
// Helper to check if steering scope differs from paths scope.
|
|
653
|
+
// The kiro emitter writes a list as a comma-joined string, so we compare the steering pattern
|
|
654
|
+
// (which is always a string) against the paths value joined by comma.
|
|
655
|
+
const scopeDiffers = (steeringInclusion, steeringPattern) => {
|
|
656
|
+
if (!pathsUsable || pathsValue === undefined)
|
|
657
|
+
return false;
|
|
658
|
+
if (steeringInclusion !== "fileMatch")
|
|
659
|
+
return true;
|
|
660
|
+
// Compared as the kiro emitter writes a list: joined by ","
|
|
661
|
+
const joined = (p) => (Array.isArray(p) ? p.join(",") : p);
|
|
662
|
+
return joined(steeringPattern) !== joined(pathsValue);
|
|
663
|
+
};
|
|
664
|
+
if (steering && !steering.generated && steering.setsInclusion) {
|
|
665
|
+
// Case 1: hand-written steering with inclusion set - use steering's scope
|
|
666
|
+
inclusion = steering.inclusion;
|
|
667
|
+
fileMatchPattern = steering.fileMatchPattern;
|
|
668
|
+
// Warn if paths: differs from steering
|
|
669
|
+
if (pathsUsable && scopeDiffers(steering.inclusion, steering.fileMatchPattern)) {
|
|
670
|
+
warnings.push(`rule ${name}: .kiro/steering/${name}.md and paths: in .claude/rules/${name}.md disagree; the steering file's scope is kept`);
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
else if (pathsUsable && pathsValue !== undefined) {
|
|
674
|
+
// Case 2: usable paths: in rule
|
|
675
|
+
inclusion = "fileMatch";
|
|
676
|
+
fileMatchPattern = pathsValue;
|
|
677
|
+
// Warn about steering
|
|
678
|
+
if (steering) {
|
|
679
|
+
if (!steering.setsInclusion) {
|
|
680
|
+
// steering without inclusion set
|
|
681
|
+
warnings.push(`rule ${name}: .kiro/steering/${name}.md sets no inclusion; scope taken from paths: in .claude/rules/${name}.md`);
|
|
682
|
+
}
|
|
683
|
+
else if (steering.generated && scopeDiffers(steering.inclusion, steering.fileMatchPattern)) {
|
|
684
|
+
// generated steering with different scope
|
|
685
|
+
warnings.push(`rule ${name}: the generated .kiro/steering/${name}.md disagrees with paths: in .claude/rules/${name}.md; scope taken from paths:`);
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
else if (steering && steering.generated) {
|
|
690
|
+
// Case 3: generated steering
|
|
691
|
+
inclusion = steering.inclusion;
|
|
692
|
+
fileMatchPattern = steering.fileMatchPattern;
|
|
693
|
+
}
|
|
694
|
+
else if (steering) {
|
|
695
|
+
// Case 4: any steering file (hand-written, may have no inclusion) - use its pattern as main did
|
|
696
|
+
inclusion = steering.inclusion;
|
|
697
|
+
fileMatchPattern = steering.fileMatchPattern;
|
|
698
|
+
}
|
|
699
|
+
// else Case 5: no steering file at all → "always" (default)
|
|
700
|
+
// Warn about unusable paths (the scope then follows the rest of the precedence)
|
|
701
|
+
if (hasPaths && !pathsUsable) {
|
|
702
|
+
warnings.push(`rule ${name}: paths: in .claude/rules/${name}.md is not a string or a list of strings; ignored`);
|
|
703
|
+
}
|
|
549
704
|
const meta = {
|
|
550
705
|
type: "rule",
|
|
551
706
|
name,
|
|
552
|
-
inclusion
|
|
553
|
-
fileMatchPattern
|
|
707
|
+
inclusion,
|
|
708
|
+
fileMatchPattern,
|
|
554
709
|
file: "rule.md",
|
|
710
|
+
...(frontmatterRaw !== undefined ? { frontmatterRaw } : {}),
|
|
555
711
|
targets: "*",
|
|
556
712
|
tags: [],
|
|
557
713
|
origin: origin(`.claude/rules/${rel}`),
|
|
558
714
|
};
|
|
559
|
-
|
|
715
|
+
// If using frontmatter (paths: is usable), store the body only; otherwise store whole text
|
|
716
|
+
const ruleContent = useFrontmatter ? parsed.body : text;
|
|
717
|
+
return { meta, files: { "rule.md": ruleContent }, scan: scanOf("rule.md", src), ...(warnings.length ? { warnings } : {}) };
|
|
560
718
|
}
|
|
561
719
|
if (type === "agent") {
|
|
562
720
|
const src = await readSource(path.join(claudeDir, "agents", rel));
|
|
@@ -679,16 +837,26 @@ function addRef(list, ref) {
|
|
|
679
837
|
if (ref)
|
|
680
838
|
list.push(ref);
|
|
681
839
|
}
|
|
840
|
+
/** Where a rule's `frontmatterRaw` was read: its Claude file, whatever file its body came from. */
|
|
841
|
+
function rawSource(meta) {
|
|
842
|
+
return meta.type === "rule" ? `.claude/rules/${outName(meta)}.md` : null;
|
|
843
|
+
}
|
|
844
|
+
/** A rule whose body was taken from its steering file (`--prefer-kiro`): the body's lines are that file's. */
|
|
845
|
+
function bodyFromSteering(meta) {
|
|
846
|
+
return meta.type === "rule" && (meta.origin?.path ?? "").startsWith(".kiro/steering/");
|
|
847
|
+
}
|
|
682
848
|
/** First secret-like value in an ingredient about to be imported, described by location only. */
|
|
683
849
|
export function secretIn(meta, files, scan = {}, lineOffset = 0) {
|
|
684
850
|
const origin = meta.origin?.path ?? `${meta.type}/${meta.name}`;
|
|
685
851
|
const raw = "frontmatterRaw" in meta ? meta.frontmatterRaw : undefined;
|
|
686
|
-
// Bodies of agents and
|
|
687
|
-
// that starts lower in its source file for another reason (spec 29 §4.3).
|
|
688
|
-
|
|
852
|
+
// Bodies of agents, commands and split rules start after `---`, the raw block and the closing `---`; `lineOffset`
|
|
853
|
+
// is for a text that starts lower in its source file for another reason (spec 29 §4.3). A rule's raw block is
|
|
854
|
+
// always its Claude file's, while its body may come from a steering file (`--prefer-kiro`).
|
|
855
|
+
const rawWhere = rawSource(meta) ?? origin;
|
|
856
|
+
const bodyOffset = raw && !bodyFromSteering(meta) ? raw.split("\n").length + 2 : lineOffset;
|
|
689
857
|
const texts = [];
|
|
690
858
|
if (raw)
|
|
691
|
-
texts.push({ where:
|
|
859
|
+
texts.push({ where: rawWhere, text: raw, offset: 1 });
|
|
692
860
|
for (const [rel, content] of Object.entries(files)) {
|
|
693
861
|
const where = meta.type === "skill" && meta.layout === "dir" ? `${origin}${rel}` : origin;
|
|
694
862
|
// A Buffer (non-allowlisted extensions such as .pem or .bat) goes through decodeForScan:
|
|
@@ -1022,15 +1190,19 @@ function resolvedParam(forge, profile, key, own) {
|
|
|
1022
1190
|
}
|
|
1023
1191
|
return Object.hasOwn(own, key) ? own[key] : undefined;
|
|
1024
1192
|
}
|
|
1025
|
-
/** The recipes a profile resolves inside the Forge
|
|
1026
|
-
export function
|
|
1193
|
+
/** The recipes a profile resolves inside the Forge, or null when `resolve` throws — the profile does not resolve. */
|
|
1194
|
+
export function resolvedRecipes(forge, profile) {
|
|
1027
1195
|
try {
|
|
1028
1196
|
return new Set(resolve(forge, WorkspaceConfigSchema.parse({ forge: ".", profile })).recipes);
|
|
1029
1197
|
}
|
|
1030
1198
|
catch {
|
|
1031
|
-
return
|
|
1199
|
+
return null;
|
|
1032
1200
|
}
|
|
1033
1201
|
}
|
|
1202
|
+
/** The recipes a profile resolves inside the Forge; fails closed — a profile that does not resolve counts as using everything. */
|
|
1203
|
+
export function recipesOf(forge, profile) {
|
|
1204
|
+
return resolvedRecipes(forge, profile) ?? { has: () => true };
|
|
1205
|
+
}
|
|
1034
1206
|
/**
|
|
1035
1207
|
* The importing profile's effective params and sections before the run (`P`, `PS`; spec 10 §6.1, spec 11 §6.7,
|
|
1036
1208
|
* spec 33 §5.3), and `blockKeys` — the `integrations.*` keys whose value comes from the block (spec 33 design.md
|
|
@@ -1071,7 +1243,7 @@ async function existingProfile(forge, profile, loaded) {
|
|
|
1071
1243
|
*/
|
|
1072
1244
|
export function markerIn(meta, files, source, lineOffset = 0) {
|
|
1073
1245
|
const raw = "frontmatterRaw" in meta ? meta.frontmatterRaw : undefined;
|
|
1074
|
-
const offset = raw ? raw.split("\n").length + 2 : lineOffset;
|
|
1246
|
+
const offset = raw && !bodyFromSteering(meta) ? raw.split("\n").length + 2 : lineOffset;
|
|
1075
1247
|
for (const [rel, content] of Object.entries(files)) {
|
|
1076
1248
|
// the importer builds meta and file keys itself, with canonical names
|
|
1077
1249
|
if (!bodyFile(meta, rel, null))
|