cc-codeconductor 0.3.1 → 0.3.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/dist/index.js CHANGED
@@ -7044,7 +7044,7 @@ function getExitCode(error) {
7044
7044
  // package.json
7045
7045
  var package_default = {
7046
7046
  name: "cc-codeconductor",
7047
- version: "0.3.1",
7047
+ version: "0.3.2",
7048
7048
  description: "A multi-agent orchestration framework for AI-assisted software engineering workflows.",
7049
7049
  keywords: [
7050
7050
  "ai",
@@ -11867,6 +11867,11 @@ function mergeManagedBlock(existing, incoming) {
11867
11867
  if (!existing) {
11868
11868
  return { content: incoming, action: "written" };
11869
11869
  }
11870
+ const hasBegin = existing.includes(MANAGED_BEGIN_MARKER);
11871
+ const hasEnd = existing.includes(MANAGED_END_MARKER);
11872
+ if (!hasBegin && !hasEnd) {
11873
+ return { content: incoming, action: "written" };
11874
+ }
11870
11875
  validateMarkers(existing, "existing content");
11871
11876
  const existingBlock = getManagedBlockRange(existing);
11872
11877
  const incomingBlock = getManagedBlockRange(incoming);
@@ -12149,6 +12154,66 @@ async function validateAgentFileSizes(basePath, isGlobal) {
12149
12154
  }
12150
12155
  return largeFiles;
12151
12156
  }
12157
+ async function validateAgentMarkers(basePath, isGlobal) {
12158
+ const targetsToCheck = [
12159
+ "opencode",
12160
+ "claude",
12161
+ "codex",
12162
+ "gemini",
12163
+ "cursor",
12164
+ "agy"
12165
+ ];
12166
+ const results = [];
12167
+ for (const target of targetsToCheck) {
12168
+ const isInstalled = await isTargetInstalled(target, basePath, isGlobal);
12169
+ if (!isInstalled) {
12170
+ continue;
12171
+ }
12172
+ let manifest;
12173
+ try {
12174
+ manifest = await loadManifest(target);
12175
+ } catch {
12176
+ continue;
12177
+ }
12178
+ for (const entry of manifest.entries) {
12179
+ const strategy = isGlobal && entry.globalStrategy ? entry.globalStrategy : entry.strategy;
12180
+ if (strategy !== "merge-managed") {
12181
+ continue;
12182
+ }
12183
+ let resolvedEntry = entry;
12184
+ let targetBaseDir = basePath;
12185
+ if (target === "agy" && isGlobal) {
12186
+ targetBaseDir = join3(homedir2(), ".gemini", "config");
12187
+ resolvedEntry = {
12188
+ ...entry,
12189
+ dest: entry.dest.replace(/^\.agents\/?/, "")
12190
+ };
12191
+ }
12192
+ const files = await resolveEntryFiles(resolvedEntry, PRESETS_DIR, targetBaseDir);
12193
+ for (const { dest } of files) {
12194
+ try {
12195
+ const content = await readFile5(dest, "utf-8");
12196
+ const beginCount = content.split(MANAGED_BEGIN_MARKER).length - 1;
12197
+ const endCount = content.split(MANAGED_END_MARKER).length - 1;
12198
+ if (beginCount === 0 && endCount === 0) {
12199
+ results.push({ path: dest, error: "Missing managed markers" });
12200
+ } else if (beginCount !== 1 || endCount !== 1) {
12201
+ results.push({
12202
+ path: dest,
12203
+ error: "Must contain exactly one managed begin marker and one managed end marker"
12204
+ });
12205
+ } else if (content.indexOf(MANAGED_BEGIN_MARKER) > content.indexOf(MANAGED_END_MARKER)) {
12206
+ results.push({
12207
+ path: dest,
12208
+ error: "Managed markers are in the wrong order"
12209
+ });
12210
+ }
12211
+ } catch {}
12212
+ }
12213
+ }
12214
+ }
12215
+ return results;
12216
+ }
12152
12217
  async function fileContentDiffers(pathA, pathB) {
12153
12218
  try {
12154
12219
  const contentA = await readFile5(pathA, "utf-8");
@@ -12476,6 +12541,22 @@ async function doctorCommand(options) {
12476
12541
  message: "All agent files (AGENTS.md/CLAUDE.md) are under 40KB"
12477
12542
  });
12478
12543
  }
12544
+ const missingMarkersLocal = await validateAgentMarkers(projectRoot, false);
12545
+ const missingMarkersGlobal = await validateAgentMarkers(homedir3(), true);
12546
+ const allMissingMarkers = [...missingMarkersLocal, ...missingMarkersGlobal];
12547
+ if (allMissingMarkers.length > 0) {
12548
+ checks.push({
12549
+ name: "agent-file-markers",
12550
+ status: "warn",
12551
+ message: `The following files have missing or invalid managed markers: ${allMissingMarkers.map((f) => `${f.path} (${f.error})`).join(", ")}`
12552
+ });
12553
+ } else {
12554
+ checks.push({
12555
+ name: "agent-file-markers",
12556
+ status: "pass",
12557
+ message: "All agent files have valid managed markers"
12558
+ });
12559
+ }
12479
12560
  const securityCompatibility = await loadTargetSecurityCompatibility();
12480
12561
  for (const compatibility of securityCompatibility) {
12481
12562
  checks.push({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cc-codeconductor",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "A multi-agent orchestration framework for AI-assisted software engineering workflows.",
5
5
  "keywords": [
6
6
  "ai",
@@ -1,3 +1,5 @@
1
+ <!-- CODECONDUCTOR:BEGIN managed -->
2
+
1
3
  # CodeConductor — Multi-Agent Orchestration Framework
2
4
 
3
5
  **Tagline:** Stop prompting. Start orchestrating.
@@ -666,3 +668,5 @@ extending capabilities, apply `.claude/skills/find-skills/SKILL.md`.
666
668
  - If the task type differs from the previous one, execute "/clear" before
667
669
  starting.
668
670
  - Delegate verbose operations to sub-agents.
671
+
672
+ <!-- CODECONDUCTOR:END managed -->
@@ -2,8 +2,8 @@ target: claude
2
2
  entries:
3
3
  - src: claude/CLAUDE.md
4
4
  dest: .claude/CLAUDE.md
5
- strategy: overwrite
6
- globalStrategy: append
5
+ strategy: merge-managed
6
+ globalStrategy: merge-managed
7
7
  template: true
8
8
  - src: claude/settings.json
9
9
  dest: .claude/settings.json