@juicesharp/rpiv-workflow 1.14.4 → 1.14.5

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 (3) hide show
  1. package/README.md +1 -1
  2. package/package.json +2 -2
  3. package/preview.ts +28 -6
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  Pi extension. Chain Pi skills into typed multi-stage workflows with audited JSONL state, predicate routing, and per-stage output validation.
12
12
 
13
- **Skill-agnostic.** The runner sends `/skill:<name>` via Pi's native dispatch — it doesn't know or care who shipped the skill. Install on its own and write workflows over your own `~/.pi/agent/skills/`, or pair with [`@juicesharp/rpiv-pi`](../rpiv-pi) to use rpiv-pi's bundled `mid`, `large`, `small` workflows over rpiv-pi's bundled skills.
13
+ **Skill-agnostic.** The runner sends `/skill:<name>` via Pi's native dispatch — it doesn't know or care who shipped the skill. Install on its own and write workflows over your own `~/.pi/agent/skills/`, or pair with [`@juicesharp/rpiv-pi`](../rpiv-pi) to use rpiv-pi's bundled `ship`, `build`, `arch`, and `vet` workflows over rpiv-pi's bundled skills.
14
14
 
15
15
  ## Pick your lane
16
16
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juicesharp/rpiv-workflow",
3
- "version": "1.14.4",
3
+ "version": "1.14.5",
4
4
  "description": "Pi extension. Chain skills into typed multi-stage workflows with audited JSONL state, predicate routing, and per-stage output validation. Skill-agnostic — bring your own skills.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -76,7 +76,7 @@
76
76
  ]
77
77
  },
78
78
  "dependencies": {
79
- "@juicesharp/rpiv-config": "^1.14.4",
79
+ "@juicesharp/rpiv-config": "^1.14.5",
80
80
  "jiti": "^2.7.0"
81
81
  },
82
82
  "peerDependencies": {
package/preview.ts CHANGED
@@ -22,17 +22,39 @@ function truncateDescription(desc: string, maxLen = 50): string {
22
22
 
23
23
  /** No-args listing: every loaded workflow, its stage count, and its source. */
24
24
  export function formatWorkflowList(loaded: LoadedWorkflows): string {
25
- const rows = loaded.workflows.map((w) => {
25
+ const items = loaded.workflows.map((w) => {
26
26
  const layer = loaded.workflowSources.get(w.name) ?? "built-in";
27
- const stages = Object.keys(w.stages).length;
28
- const tags = [`[${renderConfigLayer(layer)}]`];
29
- if (w.name === loaded.default) tags.push("(default)");
30
- const desc = w.description ? ` ${truncateDescription(w.description)}` : "";
31
- return ` ${w.name} ${stages} stages ${tags.join(" ")}${desc}`;
27
+ return {
28
+ name: w.name,
29
+ stages: Object.keys(w.stages).length,
30
+ layerTag: `[${renderConfigLayer(layer)}]`,
31
+ defaultTag: w.name === loaded.default ? "(default)" : "",
32
+ description: w.description ? truncateDescription(w.description) : "",
33
+ };
34
+ });
35
+
36
+ // Column widths computed across the rendered set so name / stages / layer /
37
+ // default-tag align vertically — same posture as `formatStageRow`'s padEnd
38
+ // usage in the details view.
39
+ const widths = {
40
+ name: Math.max(0, ...items.map((i) => i.name.length)),
41
+ stages: Math.max(0, ...items.map((i) => String(i.stages).length)),
42
+ layerTag: Math.max(0, ...items.map((i) => i.layerTag.length)),
43
+ defaultTag: Math.max(0, ...items.map((i) => i.defaultTag.length)),
44
+ };
45
+
46
+ const rows = items.map((i) => {
47
+ const name = i.name.padEnd(widths.name);
48
+ const stages = `${String(i.stages).padStart(widths.stages)} stages`;
49
+ const layerTag = i.layerTag.padEnd(widths.layerTag);
50
+ const defaultTag = i.defaultTag.padEnd(widths.defaultTag);
51
+ const desc = i.description ? ` ${i.description}` : "";
52
+ return ` ${name} ${stages} ${layerTag} ${defaultTag}${desc}`.trimEnd();
32
53
  });
33
54
 
34
55
  return [
35
56
  "Available workflows:",
57
+ "",
36
58
  ...rows,
37
59
  "",
38
60
  formatLayerBanner(loaded.layers),