mrvn-cli 0.5.2 → 0.5.4

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
@@ -6188,13 +6188,13 @@ var error16 = () => {
6188
6188
  // no unit
6189
6189
  };
6190
6190
  const typeEntry = (t) => t ? TypeNames[t] : void 0;
6191
- const typeLabel5 = (t) => {
6191
+ const typeLabel4 = (t) => {
6192
6192
  const e = typeEntry(t);
6193
6193
  if (e)
6194
6194
  return e.label;
6195
6195
  return t ?? TypeNames.unknown.label;
6196
6196
  };
6197
- const withDefinite = (t) => `\u05D4${typeLabel5(t)}`;
6197
+ const withDefinite = (t) => `\u05D4${typeLabel4(t)}`;
6198
6198
  const verbFor = (t) => {
6199
6199
  const e = typeEntry(t);
6200
6200
  const gender = e?.gender ?? "m";
@@ -6244,7 +6244,7 @@ var error16 = () => {
6244
6244
  switch (issue2.code) {
6245
6245
  case "invalid_type": {
6246
6246
  const expectedKey = issue2.expected;
6247
- const expected = TypeDictionary[expectedKey ?? ""] ?? typeLabel5(expectedKey);
6247
+ const expected = TypeDictionary[expectedKey ?? ""] ?? typeLabel4(expectedKey);
6248
6248
  const receivedType = parsedType(issue2.input);
6249
6249
  const received = TypeDictionary[receivedType] ?? TypeNames[receivedType]?.label ?? receivedType;
6250
6250
  if (/^[A-Z]/.test(issue2.expected)) {
@@ -14636,7 +14636,7 @@ function collectSprintSummaryData(store, sprintId) {
14636
14636
  });
14637
14637
  const sprintTag = `sprint:${fm.id}`;
14638
14638
  const workItemDocs = allDocs.filter(
14639
- (d) => d.frontmatter.type !== "sprint" && d.frontmatter.type !== "epic" && d.frontmatter.type !== "meeting" && d.frontmatter.tags?.includes(sprintTag)
14639
+ (d) => d.frontmatter.type !== "sprint" && d.frontmatter.type !== "epic" && d.frontmatter.type !== "meeting" && d.frontmatter.type !== "decision" && d.frontmatter.type !== "question" && d.frontmatter.tags?.includes(sprintTag)
14640
14640
  );
14641
14641
  const primaryDocs = workItemDocs.filter((d) => d.frontmatter.type !== "contribution");
14642
14642
  const byStatus = {};
@@ -19340,7 +19340,7 @@ function formatDate(iso) {
19340
19340
  if (!iso) return "";
19341
19341
  return iso.slice(0, 10);
19342
19342
  }
19343
- function typeLabel2(type) {
19343
+ function typeLabel(type) {
19344
19344
  return type.replace(/-/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
19345
19345
  }
19346
19346
  function renderMarkdown(md) {
@@ -21133,7 +21133,7 @@ tr:hover td {
21133
21133
 
21134
21134
  // src/web/templates/pages/documents.ts
21135
21135
  function documentsPage(data) {
21136
- const label = typeLabel2(data.type);
21136
+ const label = typeLabel(data.type);
21137
21137
  const statusOptions = data.statuses.map(
21138
21138
  (s) => `<option value="${escapeHtml(s)}"${data.filterStatus === s ? " selected" : ""}>${escapeHtml(s)}</option>`
21139
21139
  ).join("");
@@ -21207,7 +21207,7 @@ function documentsPage(data) {
21207
21207
  // src/web/templates/pages/document-detail.ts
21208
21208
  function documentDetailPage(doc) {
21209
21209
  const fm = doc.frontmatter;
21210
- const label = typeLabel2(fm.type);
21210
+ const label = typeLabel(fm.type);
21211
21211
  const skipKeys = /* @__PURE__ */ new Set(["title", "type"]);
21212
21212
  const entries = Object.entries(fm).filter(
21213
21213
  ([key]) => !skipKeys.has(key) && fm[key] != null
@@ -21768,7 +21768,7 @@ function poDashboardPage(ctx) {
21768
21768
  <tr>
21769
21769
  <td><a href="/docs/${d.frontmatter.type}/${escapeHtml(d.frontmatter.id)}">${escapeHtml(d.frontmatter.id)}</a></td>
21770
21770
  <td>${escapeHtml(d.frontmatter.title)}</td>
21771
- <td>${escapeHtml(typeLabel2(d.frontmatter.type))}</td>
21771
+ <td>${escapeHtml(typeLabel(d.frontmatter.type))}</td>
21772
21772
  <td>${statusBadge(d.frontmatter.status)}</td>
21773
21773
  <td>${formatDate(d.frontmatter.updated ?? d.frontmatter.created)}</td>
21774
21774
  </tr>`).join("")}
@@ -22276,7 +22276,7 @@ function poDeliveryPage(ctx) {
22276
22276
  <tr>
22277
22277
  <td><a href="/docs/${escapeHtml(d.frontmatter.type)}/${escapeHtml(d.frontmatter.id)}">${escapeHtml(d.frontmatter.id)}</a></td>
22278
22278
  <td>${escapeHtml(d.frontmatter.title)}</td>
22279
- <td>${escapeHtml(typeLabel2(d.frontmatter.type))}</td>
22279
+ <td>${escapeHtml(typeLabel(d.frontmatter.type))}</td>
22280
22280
  <td>${statusBadge(d.frontmatter.status)}</td>
22281
22281
  <td>${formatDate(d.frontmatter.updated ?? d.frontmatter.created)}</td>
22282
22282
  </tr>`).join("")}
@@ -22973,7 +22973,7 @@ function dmRisksPage(ctx) {
22973
22973
  <tr>
22974
22974
  <td><a href="/docs/${escapeHtml(d.frontmatter.type)}/${escapeHtml(d.frontmatter.id)}">${escapeHtml(d.frontmatter.id)}</a></td>
22975
22975
  <td>${escapeHtml(d.frontmatter.title)}</td>
22976
- <td>${escapeHtml(typeLabel2(d.frontmatter.type))}</td>
22976
+ <td>${escapeHtml(typeLabel(d.frontmatter.type))}</td>
22977
22977
  <td>${d.frontmatter.owner ? escapeHtml(d.frontmatter.owner) : '<span class="text-dim">\u2014</span>'}</td>
22978
22978
  <td>${formatDate(d.frontmatter.created)}</td>
22979
22979
  </tr>`).join("")}
@@ -22997,7 +22997,7 @@ function dmRisksPage(ctx) {
22997
22997
  <tr>
22998
22998
  <td><a href="/docs/${escapeHtml(d.frontmatter.type)}/${escapeHtml(d.frontmatter.id)}">${escapeHtml(d.frontmatter.id)}</a></td>
22999
22999
  <td>${escapeHtml(d.frontmatter.title)}</td>
23000
- <td>${escapeHtml(typeLabel2(d.frontmatter.type))}</td>
23000
+ <td>${escapeHtml(typeLabel(d.frontmatter.type))}</td>
23001
23001
  <td>${statusBadge(d.frontmatter.status)}</td>
23002
23002
  <td>${formatDate(d.frontmatter.created)}</td>
23003
23003
  <td><span class="${ageDays > 30 ? "priority-high" : "priority-medium"}">${ageDays}d</span></td>
@@ -23569,7 +23569,7 @@ function tlSprintPage(ctx) {
23569
23569
  <tr>
23570
23570
  <td><a href="/docs/${escapeHtml(w.type)}/${escapeHtml(w.id)}">${escapeHtml(w.id)}</a></td>
23571
23571
  <td>${escapeHtml(w.title)}</td>
23572
- <td>${escapeHtml(typeLabel2(w.type))}</td>
23572
+ <td>${escapeHtml(typeLabel(w.type))}</td>
23573
23573
  <td>${statusBadge(w.status)}</td>
23574
23574
  <td>${w.workFocus ? `<span class="badge badge-subtle">${escapeHtml(w.workFocus)}</span>` : '<span class="text-dim">\u2014</span>'}</td>
23575
23575
  </tr>`).join("")}
@@ -23591,7 +23591,7 @@ function tlSprintPage(ctx) {
23591
23591
  <tr>
23592
23592
  <td><a href="/docs/${escapeHtml(d.frontmatter.type)}/${escapeHtml(d.frontmatter.id)}">${escapeHtml(d.frontmatter.id)}</a></td>
23593
23593
  <td>${escapeHtml(d.frontmatter.title)}</td>
23594
- <td>${escapeHtml(typeLabel2(d.frontmatter.type))}</td>
23594
+ <td>${escapeHtml(typeLabel(d.frontmatter.type))}</td>
23595
23595
  <td>${statusBadge(d.frontmatter.status)}</td>
23596
23596
  <td>${formatDate(d.frontmatter.updated ?? d.frontmatter.created)}</td>
23597
23597
  </tr>`).join("")}
@@ -23780,7 +23780,7 @@ function timelinePage(diagrams) {
23780
23780
  // src/web/templates/pages/board.ts
23781
23781
  function boardPage(data, basePath = "/board") {
23782
23782
  const typeOptions = data.types.map(
23783
- (t) => `<option value="${escapeHtml(t)}"${data.type === t ? " selected" : ""}>${escapeHtml(typeLabel2(t))}s</option>`
23783
+ (t) => `<option value="${escapeHtml(t)}"${data.type === t ? " selected" : ""}>${escapeHtml(typeLabel(t))}s</option>`
23784
23784
  ).join("");
23785
23785
  const columns = data.columns.map(
23786
23786
  (col) => `
@@ -23937,7 +23937,7 @@ function upcomingPage(data) {
23937
23937
  <td><span class="trending-rank">${i + 1}</span></td>
23938
23938
  <td><a href="/docs/${escapeHtml(t.type)}/${escapeHtml(t.id)}">${escapeHtml(t.id)}</a></td>
23939
23939
  <td>${escapeHtml(t.title)}</td>
23940
- <td>${escapeHtml(typeLabel2(t.type))}</td>
23940
+ <td>${escapeHtml(typeLabel(t.type))}</td>
23941
23941
  <td>${statusBadge(t.status)}</td>
23942
23942
  <td><span class="trending-score">${t.score}</span></td>
23943
23943
  <td>${t.signals.map((s) => `<span class="signal-tag">${escapeHtml(s.factor)} +${s.points}</span>`).join(" ")}</td>
@@ -24031,7 +24031,7 @@ function buildPersonaLayoutOpts(persona, activePath, navGroups) {
24031
24031
  const artifactGroupsHtml = navGroups.map((group) => {
24032
24032
  const links = group.types.map((type) => {
24033
24033
  const href = `/docs/${type}?persona=${persona}`;
24034
- return `<a href="${href}" class="${isActive(`/docs/${type}`)}">${typeLabel2(type)}s</a>`;
24034
+ return `<a href="${href}" class="${isActive(`/docs/${type}`)}">${typeLabel(type)}s</a>`;
24035
24035
  }).join("\n ");
24036
24036
  const groupActive = group.types.some(
24037
24037
  (type) => isActive(`/docs/${type}`) !== ""
@@ -28352,8 +28352,8 @@ function executeImportPlan(plan, store, marvinDir, options) {
28352
28352
  }
28353
28353
  function formatPlanSummary(plan) {
28354
28354
  const lines = [];
28355
- const typeLabel5 = classificationLabel(plan.classification.type);
28356
- lines.push(`Detected: ${typeLabel5}`);
28355
+ const typeLabel4 = classificationLabel(plan.classification.type);
28356
+ lines.push(`Detected: ${typeLabel4}`);
28357
28357
  lines.push(`Source: ${plan.classification.inputPath}`);
28358
28358
  lines.push("");
28359
28359
  const imports = plan.items.filter((i) => i.action === "import");
@@ -29655,7 +29655,7 @@ function createProgram() {
29655
29655
  const program2 = new Command();
29656
29656
  program2.name("marvin").description(
29657
29657
  "AI-powered product development assistant with Product Owner, Delivery Manager, and Technical Lead personas"
29658
- ).version("0.5.2");
29658
+ ).version("0.5.4");
29659
29659
  program2.command("init").description("Initialize a new Marvin project in the current directory").action(async () => {
29660
29660
  await initCommand();
29661
29661
  });