@caddis/cli 0.4.46 → 0.4.48

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 (35) hide show
  1. package/bundles/antigravity-plugin/plugin.json +1 -1
  2. package/bundles/antigravity-plugin/skills/flow-studio/SKILL.md +2 -1
  3. package/bundles/antigravity-plugin/skills/flow-studio/model.schema.json +1 -1
  4. package/bundles/antigravity-plugin/skills/flow-studio/references/design-language.md +10 -2
  5. package/bundles/antigravity-plugin/skills/flow-studio/references/model-schema.md +1 -0
  6. package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/styles.test.mjs +37 -0
  7. package/bundles/antigravity-plugin/skills/flow-studio/src/chrome.ts +9 -6
  8. package/bundles/antigravity-plugin/skills/flow-studio/src/controls.ts +1 -1
  9. package/bundles/antigravity-plugin/skills/flow-studio/src/model.test.ts +8 -0
  10. package/bundles/antigravity-plugin/skills/flow-studio/src/model.ts +2 -1
  11. package/bundles/antigravity-plugin/skills/flow-studio/src/notes.ts +1 -1
  12. package/bundles/antigravity-plugin/skills/flow-studio/src/rules.test.ts +10 -1
  13. package/bundles/antigravity-plugin/skills/flow-studio/src/rules.ts +6 -0
  14. package/bundles/antigravity-plugin/skills/flow-studio/src/styles.css +10 -9
  15. package/bundles/antigravity-plugin/skills/flow-studio/templates/engine.html +27 -16
  16. package/bundles/antigravity-plugin/skills/flow-studio/templates/flow-studio.css +10 -9
  17. package/bundles/antigravity-plugin/skills/flow-studio/templates/flow-studio.lib.mjs +21 -8
  18. package/bundles/codex/.codex/skills/frontend/flow-studio/SKILL.md +2 -1
  19. package/bundles/codex/.codex/skills/frontend/flow-studio/model.schema.json +1 -1
  20. package/bundles/codex/.codex/skills/frontend/flow-studio/references/design-language.md +10 -2
  21. package/bundles/codex/.codex/skills/frontend/flow-studio/references/model-schema.md +1 -0
  22. package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/styles.test.mjs +37 -0
  23. package/bundles/codex/.codex/skills/frontend/flow-studio/src/chrome.ts +9 -6
  24. package/bundles/codex/.codex/skills/frontend/flow-studio/src/controls.ts +1 -1
  25. package/bundles/codex/.codex/skills/frontend/flow-studio/src/model.test.ts +8 -0
  26. package/bundles/codex/.codex/skills/frontend/flow-studio/src/model.ts +2 -1
  27. package/bundles/codex/.codex/skills/frontend/flow-studio/src/notes.ts +1 -1
  28. package/bundles/codex/.codex/skills/frontend/flow-studio/src/rules.test.ts +10 -1
  29. package/bundles/codex/.codex/skills/frontend/flow-studio/src/rules.ts +6 -0
  30. package/bundles/codex/.codex/skills/frontend/flow-studio/src/styles.css +10 -9
  31. package/bundles/codex/.codex/skills/frontend/flow-studio/templates/engine.html +27 -16
  32. package/bundles/codex/.codex/skills/frontend/flow-studio/templates/flow-studio.css +10 -9
  33. package/bundles/codex/.codex/skills/frontend/flow-studio/templates/flow-studio.lib.mjs +21 -8
  34. package/bundles/manifest.json +2 -2
  35. package/package.json +1 -1
@@ -29,6 +29,7 @@ function validateModel(input) {
29
29
  if (!Array.isArray(m.lanes) || m.layout !== "auto" && m.lanes.length === 0) add("error", "lanes-missing", "lanes", "At least one lane is required.");
30
30
  if (!m.states || typeof m.states !== "object" || Object.keys(m.states).length === 0) add("error", "states-missing", "states", "At least one state is required.");
31
31
  const columns = Array.isArray(m.columns) ? m.columns : [];
32
+ if (columns[0]?.continues) add("error", "column-continues-first", "columns[0]", "The first column cannot continue a column before it.");
32
33
  const lanes = Array.isArray(m.lanes) ? m.lanes : [];
33
34
  const states = m.states && typeof m.states === "object" ? m.states : {};
34
35
  if (!m.meta || typeof m.meta !== "object" || typeof m.meta.title !== "string") add("error", "meta-missing", "meta", "meta with a title is required.");
@@ -347,11 +348,19 @@ __export(rules_exports, {
347
348
  linkVisible: () => linkVisible,
348
349
  nodeStateId: () => nodeStateId,
349
350
  nodeVisible: () => nodeVisible,
351
+ stripHeads: () => stripHeads,
350
352
  toggleGroupState: () => toggleGroupState
351
353
  });
352
354
  var baselineView = (m) => m.views?.[0]?.id ?? "all";
353
355
  var defaultView = (m) => (m.views?.find((v) => v.default) ?? m.views?.[0])?.id ?? "all";
354
356
  var initialCollapsed = (m) => new Set(m.nodes.filter((n) => n.kind === "group" && n.contains && n.collapsed !== false).map((n) => n.id));
357
+ var stripHeads = (m) => {
358
+ let head = 0;
359
+ return m.columns.map((c, i) => {
360
+ if (!c.continues || i === 0) head = i;
361
+ return head;
362
+ });
363
+ };
355
364
  var columnTitle = (m, n) => n.col === void 0 ? "" : m.columns[n.col]?.title ?? "";
356
365
  function groupFor(m, nodeId) {
357
366
  return m.nodes.find((n) => n.kind === "group" && n.contains?.includes(nodeId));
@@ -1203,7 +1212,7 @@ function install3(ctx) {
1203
1212
  if (!cols.firstChild) {
1204
1213
  model.columns.forEach((c, i2) => {
1205
1214
  const h = el("div", "hd");
1206
- h.textContent = (c.short ?? c.title).toUpperCase();
1215
+ h.textContent = c.continues ? "" : (c.short ?? c.title).toUpperCase();
1207
1216
  h.title = c.title;
1208
1217
  h.dataset.i = String(i2);
1209
1218
  cols.appendChild(h);
@@ -1589,16 +1598,18 @@ function install5(ctx) {
1589
1598
  }
1590
1599
  function buildStrip() {
1591
1600
  const box = els.strip;
1601
+ const heads = stripHeads(model), cells = model.columns.map((c, i) => ({ c, i })).filter(({ i }) => heads[i] === i);
1592
1602
  box.style.display = model.columns.length ? "" : "none";
1593
- box.style.gridTemplateColumns = `repeat(${Math.max(1, model.columns.length)}, minmax(0, 1fr))`;
1603
+ box.style.gridTemplateColumns = `repeat(${Math.max(1, cells.length)}, minmax(0, 1fr))`;
1594
1604
  if (!box.firstChild) {
1595
- box.innerHTML = model.columns.map((c) => `<div class="lcell"><div class="ln">${esc(c.title)}</div><div class="lb"><i class="good"></i><i class="neutral"></i><i class="gap"></i></div><div class="lv"></div></div>`).join("");
1605
+ box.innerHTML = cells.map(({ c }) => `<div class="lcell"><div class="ln">${esc(c.title)}</div><div class="lb"><i class="good"></i><i class="neutral"></i><i class="gap"></i></div><div class="lv"></div></div>`).join("");
1596
1606
  }
1597
- box.querySelectorAll(".lcell").forEach((cell, i) => {
1598
- cell.style.setProperty("--i", String(i));
1607
+ box.querySelectorAll(".lcell").forEach((cell, cellIndex) => {
1608
+ const i = cells[cellIndex]?.i ?? cellIndex;
1609
+ cell.style.setProperty("--i", String(cellIndex));
1599
1610
  let tot = 0, good = 0, neutral = 0, gap = 0;
1600
1611
  for (const n of model.nodes) {
1601
- if (n.col !== i || n.kind === "chip") continue;
1612
+ if (heads[n.col ?? -1] !== i || n.kind === "chip") continue;
1602
1613
  if (!visible(n.id)) continue;
1603
1614
  const w = Math.max(1, n.weight ?? 1);
1604
1615
  tot += w;
@@ -1764,7 +1775,8 @@ function install6(ctx) {
1764
1775
  if (!a) continue;
1765
1776
  let r = a.getBoundingClientRect();
1766
1777
  if (!r.width && !r.height) {
1767
- const d = a.closest("details");
1778
+ let d = a.closest("details");
1779
+ while (d && d.open) d = d.parentElement?.closest("details") ?? null;
1768
1780
  if (d) r = d.getBoundingClientRect();
1769
1781
  }
1770
1782
  if (!r.width && !r.height) continue;
@@ -1816,7 +1828,7 @@ function install6(ctx) {
1816
1828
  const markdown = () => {
1817
1829
  const out = [`# ${model.meta.title}`, "", model.meta.help, "", `As of ${model.meta.asOf}. Source: ${model.meta.source}`, "", "## States"];
1818
1830
  for (const [id, s] of Object.entries(model.states)) out.push(`- **${s.word}** (${id}): tone ${s.tone}, border ${s.border}, link ${s.edge}, motion ${s.motion}, bucket ${s.bucket}`);
1819
- out.push("", "## Columns", ...model.columns.map((c, i) => `${i + 1}. ${c.title}${c.phase ? ` (${c.phase})` : ""}`));
1831
+ out.push("", "## Columns", ...model.columns.filter((c) => !c.continues).map((c, i) => `${i + 1}. ${c.title}${c.phase ? ` (${c.phase})` : ""}`));
1820
1832
  out.push("", "## Lanes", ...model.lanes.map((l) => `- ${l.title}${l.badge ? ` [${l.badge}]` : ""}${l.note ? `: ${l.note}` : ""}`));
1821
1833
  out.push("", `## Size`, `${model.nodes.length} nodes, ${model.links.length} links.`);
1822
1834
  if (notes.length) out.push("", "## Notes", ...notes.map((n) => `${n.id}. **${n.title}**: ${n.text}`));
@@ -2481,6 +2493,7 @@ export {
2481
2493
  rules_exports as rules,
2482
2494
  slaState,
2483
2495
  stateCss,
2496
+ stripHeads,
2484
2497
  suggestedExit,
2485
2498
  toggleGroupState,
2486
2499
  trace_exports as trace,
@@ -1,7 +1,7 @@
1
1
  {
2
- "poolVersion": "1.3.132",
2
+ "poolVersion": "1.3.134",
3
3
  "bundles": {
4
- "antigravity-plugin": "1.3.132",
4
+ "antigravity-plugin": "1.3.134",
5
5
  "antigravity-plugin-extras": "1.3.41",
6
6
  "codex": "unknown"
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@caddis/cli",
3
- "version": "0.4.46",
3
+ "version": "0.4.48",
4
4
  "description": "Install, update and diagnose the caddis dev harness across every coding agent you use (Claude Code, agy/Antigravity, and more).",
5
5
  "keywords": [
6
6
  "caddis",