@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.
Files changed (3) hide show
  1. package/README.md +2 -0
  2. package/dist/index.js +30 -12
  3. 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
- function renderAgentsMd(ctx) {
12517
- return renderAdapterMarkdown(ctx, "codex");
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.indexOf(KADDO_BEGIN_MARKER);
12583
- const end = existing.indexOf(KADDO_END_MARKER);
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.length);
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: false }
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 = renderAgentsMd(ctx);
12647
+ const content2 = renderAdapterMarkdown(ctx, spec.target);
12630
12648
  if (opts.dryRun) {
12631
12649
  console.log(`# ${rel} preview`, "");
12632
12650
  console.log(content2);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaddo/cli",
3
- "version": "3.28.0",
3
+ "version": "3.28.2",
4
4
  "description": "Knowledge Driven Development toolkit",
5
5
  "license": "MIT",
6
6
  "repository": {