@mrciphersmith/keryx 0.2.134 → 0.2.135

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/cli.js CHANGED
@@ -37876,7 +37876,8 @@ function createFlowService(deps) {
37876
37876
  });
37877
37877
  } catch {}
37878
37878
  }
37879
- return summaries;
37879
+ const shared = duplicateFlowIds(summaries.map((summary) => summary.id));
37880
+ return summaries.map((summary) => ({ ...summary, duplicateId: shared.has(summary.id) }));
37880
37881
  },
37881
37882
  async get({ cwd, id }) {
37882
37883
  return (await load(cwd, id)).flow;
@@ -39197,7 +39198,8 @@ function createMetaprojectAdapter(cwd, overrides = {}) {
39197
39198
  title: f.title,
39198
39199
  tasksDone: f.tasksDone,
39199
39200
  tasksTotal: f.tasksTotal,
39200
- dir: f.dir
39201
+ dir: f.dir,
39202
+ ...f.duplicateId !== undefined ? { duplicateId: f.duplicateId } : {}
39201
39203
  }))
39202
39204
  };
39203
39205
  } catch (cause) {
@@ -39702,8 +39704,14 @@ function formatFlowStatus(result) {
39702
39704
  if (result.flows.length === 0) {
39703
39705
  return { output: "No matching flows.", isError: false };
39704
39706
  }
39705
- const lines = result.flows.map((f) => ` - ${f.id}${f.slug !== undefined ? ` (${f.slug})` : ""} [${f.status}] ${f.title} ` + `(${f.tasksDone}/${f.tasksTotal} tasks)`);
39706
- return { output: [`Flows (${result.flows.length}):`, ...lines].join(`
39707
+ const lines = result.flows.map((f) => ` - ${f.id}${f.duplicateId === true ? " \u2717 duplicate id" : ""}` + `${f.slug !== undefined ? ` (${f.slug})` : ""} [${f.status}] ${f.title} ` + `(${f.tasksDone}/${f.tasksTotal} tasks)`);
39708
+ const output = [`Flows (${result.flows.length}):`, ...lines];
39709
+ const duplicated = result.flows.filter((f) => f.duplicateId === true);
39710
+ if (duplicated.length > 0) {
39711
+ const ids = [...new Set(duplicated.map((f) => f.id))].sort();
39712
+ output.push("", `${ids.length} duplicated id(s) \u2014 every bare-id command on these is refused as ambiguous, ` + "so the repair has to name the directory:", ...duplicated.map((f) => ` - ${f.id}: ${f.dir}`), 'Repair with: keryx flow renumber <dir> --to <free id> --reason "<why>"');
39713
+ }
39714
+ return { output: output.join(`
39707
39715
  `), isError: false };
39708
39716
  }
39709
39717
  function formatSymbol(result) {
@@ -51133,7 +51141,7 @@ import path47 from "path";
51133
51141
  // package.json
51134
51142
  var package_default = {
51135
51143
  name: "@mrciphersmith/keryx",
51136
- version: "0.2.134",
51144
+ version: "0.2.135",
51137
51145
  description: "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
51138
51146
  private: false,
51139
51147
  publishConfig: {
package/dist/core.js CHANGED
@@ -10949,6 +10949,17 @@ async function listFlowDirs(cwd) {
10949
10949
  function flowIdOf(dir) {
10950
10950
  return dir.slice(0, 3);
10951
10951
  }
10952
+ function duplicateFlowIds(ids) {
10953
+ const seen = new Set;
10954
+ const duplicates = new Set;
10955
+ for (const id of ids) {
10956
+ if (seen.has(id)) {
10957
+ duplicates.add(id);
10958
+ }
10959
+ seen.add(id);
10960
+ }
10961
+ return duplicates;
10962
+ }
10952
10963
  function groupFlowDirsById(dirs) {
10953
10964
  const groups = new Map;
10954
10965
  for (const dir of dirs) {
@@ -13404,7 +13415,8 @@ function createFlowService(deps) {
13404
13415
  });
13405
13416
  } catch {}
13406
13417
  }
13407
- return summaries;
13418
+ const shared = duplicateFlowIds(summaries.map((summary) => summary.id));
13419
+ return summaries.map((summary) => ({ ...summary, duplicateId: shared.has(summary.id) }));
13408
13420
  },
13409
13421
  async get({ cwd, id }) {
13410
13422
  return (await load(cwd, id)).flow;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrciphersmith/keryx",
3
- "version": "0.2.134",
3
+ "version": "0.2.135",
4
4
  "description": "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
5
5
  "private": false,
6
6
  "publishConfig": {