@kaddo/cli 3.28.0 → 3.28.2
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 +2 -0
- package/dist/index.js +30 -12
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -522,6 +522,8 @@ create --from roadmap → owners → guard → explain`.
|
|
|
522
522
|
| v3.27.2 | Codex adapter safe merge: `kaddo adapters install codex --inject` adds/updates only a delimited Kaddo block in an existing AGENTS.md, preserving team content |
|
|
523
523
|
| v3.27.3 | Codex adapter reference stabilization: package-manager-aware command fallbacks (lockfile detection) + Adapter Contract & Custom Adapters docs (reference for future adapters) |
|
|
524
524
|
| v3.28 | Claude Code adapter: `kaddo adapters install claude` (alias `kaddo export claude`) generates a `CLAUDE.md` projection reusing the shared adapter common core (`--dry-run`/`--force`) |
|
|
525
|
+
| v3.28.1 | Claude adapter safe merge: `--inject` works for `CLAUDE.md` too; adapter markers are now target-neutral (`KADDO ADAPTER`) and legacy Codex markers auto-migrate on update |
|
|
526
|
+
| v3.28.2 | Adapter inject guard: `--inject` on a fully Kaddo-generated AGENTS.md/CLAUDE.md does nothing (suggests `--force`), preventing duplicated Kaddo guidance |
|
|
525
527
|
|
|
526
528
|
**Optional modules (installed with `kaddo add`):**
|
|
527
529
|
|
package/dist/index.js
CHANGED
|
@@ -12513,16 +12513,25 @@ function renderAdapterMarkdown(ctx, target) {
|
|
|
12513
12513
|
L.push("");
|
|
12514
12514
|
return L.join("\n");
|
|
12515
12515
|
}
|
|
12516
|
-
|
|
12517
|
-
|
|
12516
|
+
var KADDO_BEGIN_MARKER = "<!-- BEGIN KADDO ADAPTER -->";
|
|
12517
|
+
var KADDO_END_MARKER = "<!-- END KADDO ADAPTER -->";
|
|
12518
|
+
var LEGACY_BEGIN_MARKER = "<!-- BEGIN KADDO CODEX ADAPTER -->";
|
|
12519
|
+
var LEGACY_END_MARKER = "<!-- END KADDO CODEX ADAPTER -->";
|
|
12520
|
+
var GENERATED_HEADER = "Generated by `kaddo adapters install ";
|
|
12521
|
+
function findMarker(content, neutral, legacy) {
|
|
12522
|
+
const a = content.indexOf(neutral);
|
|
12523
|
+
const b = content.indexOf(legacy);
|
|
12524
|
+
if (a === -1) return b;
|
|
12525
|
+
if (b === -1) return a;
|
|
12526
|
+
return Math.min(a, b);
|
|
12527
|
+
}
|
|
12528
|
+
function markerLength(content, neutral, legacy) {
|
|
12529
|
+
return content.includes(neutral) ? neutral.length : legacy.length;
|
|
12518
12530
|
}
|
|
12519
|
-
var KADDO_BEGIN_MARKER = "<!-- BEGIN KADDO CODEX ADAPTER -->";
|
|
12520
|
-
var KADDO_END_MARKER = "<!-- END KADDO CODEX ADAPTER -->";
|
|
12521
|
-
var GENERATED_HEADER = "Generated by `kaddo adapters install codex`";
|
|
12522
12531
|
function detectAgentsState(content) {
|
|
12523
12532
|
if (content === null) return "missing";
|
|
12524
|
-
const hasBegin = content.includes(KADDO_BEGIN_MARKER);
|
|
12525
|
-
const hasEnd = content.includes(KADDO_END_MARKER);
|
|
12533
|
+
const hasBegin = content.includes(KADDO_BEGIN_MARKER) || content.includes(LEGACY_BEGIN_MARKER);
|
|
12534
|
+
const hasEnd = content.includes(KADDO_END_MARKER) || content.includes(LEGACY_END_MARKER);
|
|
12526
12535
|
if (hasBegin !== hasEnd) return "invalid_kaddo_block";
|
|
12527
12536
|
if (hasBegin && hasEnd) return "existing_with_kaddo_block";
|
|
12528
12537
|
if (content.includes(GENERATED_HEADER)) return "generated_by_kaddo";
|
|
@@ -12579,15 +12588,15 @@ function renderKaddoBlock(ctx) {
|
|
|
12579
12588
|
}
|
|
12580
12589
|
function injectKaddoBlock(existing, ctx) {
|
|
12581
12590
|
const block = renderKaddoBlock(ctx);
|
|
12582
|
-
const begin = existing
|
|
12583
|
-
const end = existing
|
|
12591
|
+
const begin = findMarker(existing, KADDO_BEGIN_MARKER, LEGACY_BEGIN_MARKER);
|
|
12592
|
+
const end = findMarker(existing, KADDO_END_MARKER, LEGACY_END_MARKER);
|
|
12584
12593
|
if (begin === -1 !== (end === -1)) {
|
|
12585
12594
|
throw new Error("Invalid Kaddo adapter block: found one marker without its pair.");
|
|
12586
12595
|
}
|
|
12587
12596
|
if (begin !== -1 && end !== -1) {
|
|
12588
12597
|
if (end < begin) throw new Error("Invalid Kaddo adapter block: END marker before BEGIN marker.");
|
|
12589
12598
|
const before = existing.slice(0, begin);
|
|
12590
|
-
const after = existing.slice(end + KADDO_END_MARKER
|
|
12599
|
+
const after = existing.slice(end + markerLength(existing, KADDO_END_MARKER, LEGACY_END_MARKER));
|
|
12591
12600
|
return { content: `${before}${block}${after}`, status: "updated" };
|
|
12592
12601
|
}
|
|
12593
12602
|
const sep = existing.endsWith("\n") ? "\n" : "\n\n";
|
|
@@ -12599,7 +12608,7 @@ ${sep}${block}
|
|
|
12599
12608
|
// src/commands/adapters.ts
|
|
12600
12609
|
var TARGETS2 = {
|
|
12601
12610
|
codex: { target: "codex", file: "AGENTS.md", label: "Codex", supportsInject: true },
|
|
12602
|
-
claude: { target: "claude", file: "CLAUDE.md", label: "Claude Code", supportsInject:
|
|
12611
|
+
claude: { target: "claude", file: "CLAUDE.md", label: "Claude Code", supportsInject: true }
|
|
12603
12612
|
};
|
|
12604
12613
|
function runAdaptersInstall(adapter, opts = {}) {
|
|
12605
12614
|
const dir = cwd();
|
|
@@ -12625,8 +12634,17 @@ function runAdaptersInstall(adapter, opts = {}) {
|
|
|
12625
12634
|
process.exit(1);
|
|
12626
12635
|
return;
|
|
12627
12636
|
}
|
|
12637
|
+
if (state === "generated_by_kaddo") {
|
|
12638
|
+
intro2(`${cmd} --inject`);
|
|
12639
|
+
log2.warn(`${rel} is already fully generated by Kaddo.`);
|
|
12640
|
+
log2.info("Nothing injected to avoid duplicated Kaddo guidance.");
|
|
12641
|
+
log2.info(`Use \`${cmd} --force\` to regenerate the full file.`);
|
|
12642
|
+
log2.info(`\`--inject\` is for team-owned files: keep your own ${rel} and run \`${cmd} --inject\` to add the Kaddo block.`);
|
|
12643
|
+
outro2("Nothing changed.");
|
|
12644
|
+
return;
|
|
12645
|
+
}
|
|
12628
12646
|
if (existing === null) {
|
|
12629
|
-
const content2 =
|
|
12647
|
+
const content2 = renderAdapterMarkdown(ctx, spec.target);
|
|
12630
12648
|
if (opts.dryRun) {
|
|
12631
12649
|
console.log(`# ${rel} preview`, "");
|
|
12632
12650
|
console.log(content2);
|