@juicesharp/rpiv-pi 1.14.2 → 1.14.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.
|
@@ -242,9 +242,13 @@ describe("session_start hook — notifications", () => {
|
|
|
242
242
|
await captured.events.get("session_start")?.[0]({ reason: "startup" } as never, ctx as never);
|
|
243
243
|
const warnCall = (ctx.ui.notify as ReturnType<typeof vi.fn>).mock.calls.find((c) => c[1] === "warning");
|
|
244
244
|
expect(warnCall).toBeDefined();
|
|
245
|
-
expect(warnCall?.[0]).
|
|
245
|
+
expect((warnCall?.[0] as string).startsWith("\n")).toBe(true);
|
|
246
|
+
expect(warnCall?.[0]).toContain("rpiv-pi: 2 sibling extensions missing");
|
|
246
247
|
expect(warnCall?.[0]).toContain("@juicesharp/rpiv-advisor");
|
|
247
248
|
expect(warnCall?.[0]).toContain("@juicesharp/rpiv-args");
|
|
249
|
+
expect(warnCall?.[0]).toContain("Run /rpiv-setup to install them.");
|
|
250
|
+
expect(warnCall?.[0]).toContain("╭");
|
|
251
|
+
expect(warnCall?.[0]).toContain("╯");
|
|
248
252
|
expect(warnCall?.[0]).not.toContain("npm:");
|
|
249
253
|
});
|
|
250
254
|
|
|
@@ -62,8 +62,16 @@ const msgAgentsAdded = (n: number) => `Copied ${n} rpiv-pi agent(s) to ~/.pi/age
|
|
|
62
62
|
const msgAgentsHealed = (parts: string[]) => `Synced bundled agent(s): ${parts.join(", ")}.`;
|
|
63
63
|
const msgAgentsDrift = (parts: string[]) => `${parts.join(", ")} agent(s). Run /rpiv-update-agents to sync.`;
|
|
64
64
|
const msgAgentsErrors = (n: number) => `Agent sync reported ${n} error(s). Run /rpiv-update-agents for details.`;
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
function msgMissingSiblings(pkgs: string[]): string {
|
|
66
|
+
const n = pkgs.length;
|
|
67
|
+
const title = `rpiv-pi: ${n} sibling extension${n === 1 ? "" : "s"} missing`;
|
|
68
|
+
const body = [...pkgs.map((p) => `• ${p}`), "", "Run /rpiv-setup to install them."];
|
|
69
|
+
const total = Math.max(title.length + 6, ...body.map((l) => l.length + 4));
|
|
70
|
+
const top = `╭─ ${title} ${"─".repeat(total - title.length - 5)}╮`;
|
|
71
|
+
const middle = body.map((l) => `│ ${l.padEnd(total - 4)}│`).join("\n");
|
|
72
|
+
const bottom = `╰${"─".repeat(total - 2)}╯`;
|
|
73
|
+
return `${top}\n${middle}\n${bottom}`;
|
|
74
|
+
}
|
|
67
75
|
|
|
68
76
|
type UI = { notify: (msg: string, sev: "info" | "warning" | "error") => void };
|
|
69
77
|
|
|
@@ -264,5 +272,8 @@ function notifyCleanup(ui: UI, result: CleanupResult): void {
|
|
|
264
272
|
function warnMissingSiblings(ui: UI): void {
|
|
265
273
|
const missing = findMissingSiblings();
|
|
266
274
|
if (missing.length === 0) return;
|
|
267
|
-
|
|
275
|
+
// Leading newline so Pi's "Warning: " severity prefix sits on its own
|
|
276
|
+
// line; every box row then gets Pi's 1-space continuation indent
|
|
277
|
+
// uniformly and the border stays aligned.
|
|
278
|
+
ui.notify(`\n${msgMissingSiblings(missing.map((m) => m.pkg.replace(/^npm:/, "")))}`, "warning");
|
|
268
279
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juicesharp/rpiv-pi",
|
|
3
|
-
"version": "1.14.
|
|
3
|
+
"version": "1.14.4",
|
|
4
4
|
"description": "A skill-based development workflow for Pi Agent. Five skills (research, design, plan, implement, validate) and the shared subagents that compose its ship-loop.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|