mrvn-cli 0.4.0 → 0.4.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/marvin.js CHANGED
@@ -14105,7 +14105,14 @@ import { tool as tool2 } from "@anthropic-ai/claude-agent-sdk";
14105
14105
  // src/plugins/builtin/tools/epic-utils.ts
14106
14106
  function normalizeLinkedFeatures(value) {
14107
14107
  if (value === void 0 || value === null) return [];
14108
- if (typeof value === "string") return [value];
14108
+ if (typeof value === "string") {
14109
+ try {
14110
+ const parsed = JSON.parse(value);
14111
+ if (Array.isArray(parsed)) return parsed.filter((v) => typeof v === "string");
14112
+ } catch {
14113
+ }
14114
+ return [value];
14115
+ }
14109
14116
  if (Array.isArray(value)) return value.filter((v) => typeof v === "string");
14110
14117
  return [];
14111
14118
  }
@@ -14928,6 +14935,20 @@ function createFeatureTools(store) {
14928
14935
 
14929
14936
  // src/plugins/builtin/tools/epics.ts
14930
14937
  import { tool as tool4 } from "@anthropic-ai/claude-agent-sdk";
14938
+ var linkedFeatureArray = external_exports.preprocess(
14939
+ (val) => {
14940
+ if (typeof val === "string") {
14941
+ try {
14942
+ const parsed = JSON.parse(val);
14943
+ if (Array.isArray(parsed)) return parsed;
14944
+ } catch {
14945
+ }
14946
+ return [val];
14947
+ }
14948
+ return val;
14949
+ },
14950
+ external_exports.array(external_exports.string())
14951
+ );
14931
14952
  function createEpicTools(store) {
14932
14953
  return [
14933
14954
  tool4(
@@ -14993,7 +15014,7 @@ function createEpicTools(store) {
14993
15014
  {
14994
15015
  title: external_exports.string().describe("Epic title"),
14995
15016
  content: external_exports.string().describe("Epic description and scope"),
14996
- linkedFeature: external_exports.union([external_exports.string(), external_exports.array(external_exports.string())]).describe("Feature ID(s) to link this epic to (e.g. 'F-001' or ['F-001', 'F-002'])"),
15017
+ linkedFeature: linkedFeatureArray.describe("Feature ID(s) to link this epic to (e.g. ['F-001'] or ['F-001', 'F-002'])"),
14997
15018
  status: external_exports.enum(["planned", "in-progress", "done"]).optional().describe("Epic status (default: 'planned')"),
14998
15019
  owner: external_exports.string().optional().describe("Epic owner"),
14999
15020
  targetDate: external_exports.string().optional().describe("Target completion date (ISO format)"),
@@ -15069,7 +15090,7 @@ function createEpicTools(store) {
15069
15090
  owner: external_exports.string().optional().describe("New owner"),
15070
15091
  targetDate: external_exports.string().optional().describe("New target date"),
15071
15092
  estimatedEffort: external_exports.string().optional().describe("New estimated effort"),
15072
- linkedFeature: external_exports.union([external_exports.string(), external_exports.array(external_exports.string())]).optional().describe("New linked feature ID(s)"),
15093
+ linkedFeature: linkedFeatureArray.optional().describe("New linked feature ID(s)"),
15073
15094
  tags: external_exports.array(external_exports.string()).optional().describe("Replace tags (e.g. remove 'risk', add 'risk-mitigated')")
15074
15095
  },
15075
15096
  async (args) => {
@@ -23702,7 +23723,7 @@ function createProgram() {
23702
23723
  const program2 = new Command();
23703
23724
  program2.name("marvin").description(
23704
23725
  "AI-powered product development assistant with Product Owner, Delivery Manager, and Technical Lead personas"
23705
- ).version("0.4.0");
23726
+ ).version("0.4.2");
23706
23727
  program2.command("init").description("Initialize a new Marvin project in the current directory").action(async () => {
23707
23728
  await initCommand();
23708
23729
  });