@signalridge/pi-welcome 1.3.0 → 1.3.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.3.3
4
+ ### Patch Changes
5
+
6
+ - f714ea0: Publish the package versions already prepared by the previous release transition after its first publish attempt was blocked before npm publication.
7
+
8
+ ## 1.3.2
9
+ ### Patch Changes
10
+
11
+ - b6cf242: Peer dependency ranges now name the versions actually validated against, so an untested host combination fails at install time instead of silently at runtime: `@earendil-works/pi-coding-agent`, `pi-ai`, `pi-tui`, and `pi-agent-core` move from `"*"` to `^0.84.0`, and `typebox` from `"*"` to `^1.3.11`.
12
+
13
+ Shared dependencies now carry ONE declared range across every package that uses them, and `bun run check:shared-deps` keeps it that way.
14
+
15
+ `@narumitw/pi-tui-kit` was declared at three disjoint floors — `^0.54.0`, `^0.51.0`, and `^0.49.1` across nine packages — and the lockfile duly resolved three copies (0.54.0, 0.51.0, 0.49.3) installed side by side. For a shared rendering surface drawing into one terminal inside one host process, that means a theme rendering one way in one extension and another way in the next, with nothing failing at install to say so. All nine now declare `^0.54.0` and the install resolves a single copy. `@sinclair/typebox` likewise converges on `^0.34.50`.
16
+
17
+ The new check covers `dependencies` and `peerDependencies` and compares range strings rather than their semantics: two ranges that merely overlap are still a finding, because the goal is one intentional answer per dependency rather than an accidental intersection. `devDependencies` are deliberately out of scope — a build tool is not a shared surface, and `pi-subagents` intentionally carries its own toolchain. `docs/package-boundaries.md` documents the Kit as a shared surface for the first time.
18
+
19
+ ## 1.3.1
20
+ ### Patch Changes
21
+
22
+ - 2f22dea: Give the card its head back, with a mark that says which tool this is.
23
+
24
+ 1.3.0 removed the whole title block. Only the wordmark was meant to go: the
25
+ tagline went with it because it sat on the same two lines, which left the card
26
+ opening straight into a key-hint row with nothing naming the session's tool or
27
+ version.
28
+
29
+ The two rows are back, now `pi` and its version over the tagline, with a pi
30
+ letterform for a mark — one beam over two legs, drawn from Block Elements so
31
+ every glyph is exactly one column in every terminal font. It says the same thing
32
+ as the title beside it rather than being a texture that could belong to any
33
+ tool, which the previous rounded outline and the solid bar that briefly replaced
34
+ it both were. The separate `Version` row is gone, since the version now rides
35
+ the title it belongs to.
36
+
3
37
  ## 1.3.0
4
38
  ### Minor Changes
5
39
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signalridge/pi-welcome",
3
- "version": "1.3.0",
3
+ "version": "1.3.3",
4
4
  "description": "Startup resource and repository summary card for Pi.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -9,8 +9,8 @@
9
9
  "lifecycle": "stable"
10
10
  },
11
11
  "peerDependencies": {
12
- "@earendil-works/pi-coding-agent": "*",
13
- "@earendil-works/pi-tui": "*"
12
+ "@earendil-works/pi-coding-agent": "^0.84.0",
13
+ "@earendil-works/pi-tui": "^0.84.0"
14
14
  },
15
15
  "pi": {
16
16
  "extensions": [
package/src/index.ts CHANGED
@@ -37,6 +37,21 @@ import { type Component, truncateToWidth, visibleWidth, wrapTextWithAnsi } from
37
37
 
38
38
  const ENTRY_TYPE = "welcome-card";
39
39
 
40
+ /**
41
+ * A pi letterform: one beam over two legs, drawn in the accent color.
42
+ *
43
+ * The mark says the same thing as the title line beside it — one for the eye,
44
+ * one for the reader — rather than being a texture that could belong to any
45
+ * tool. The legs are solid blocks rather than thin verticals so the two rows
46
+ * carry equal weight; hairlines wash out at small font sizes.
47
+ *
48
+ * Block Elements only. Each is exactly one column in every terminal font, while
49
+ * an emoji or a private-use glyph falls back to something double-width on some
50
+ * machines and shifts the text beside it out of alignment.
51
+ */
52
+ const MARK = ["▄▄▄▄▄▄", "▐█ █▌"] as const;
53
+ const SUBTITLE = "A focused coding workspace";
54
+
40
55
  /** Columns of padding inside the card. */
41
56
  const PAD = 2;
42
57
 
@@ -319,8 +334,6 @@ function collect(pi: ExtensionAPI, ctx: ExtensionContext): WelcomeData {
319
334
  }
320
335
  }
321
336
 
322
- push("Version", VERSION);
323
-
324
337
  // GAP is the sentinel for a blank row: session facts above, what pi loaded
325
338
  // below, so the card reads as two groups rather than one wall.
326
339
  const resources = collectResources(pi, ctx.cwd);
@@ -426,10 +439,17 @@ export class WelcomeCard implements Component {
426
439
  const pad = " ".repeat(PAD);
427
440
  const body: string[] = [blank()];
428
441
 
429
- // No mark and no wordmark. The card exists to say what this session is, and
430
- // a brand line says nothing a returning user does not already know. The
431
- // hints lead instead: with `quietStartup` on this is the only place they
432
- // appear, and they are what a new session actually needs.
442
+ // The mark names pi, not a vendor: what a returning user needs from the top
443
+ // of the card is which tool and which version, and a company name is
444
+ // neither. The version rides the title line because it belongs to the same
445
+ // fact.
446
+ const markWidth = Math.max(...MARK.map(visibleWidth));
447
+ body.push(
448
+ line(pad + t.fg("accent", MARK[0].padEnd(markWidth)) + pad + t.bold(t.fg("text", `pi v${VERSION}`))),
449
+ line(pad + t.fg("accent", MARK[1].padEnd(markWidth)) + pad + t.fg("muted", SUBTITLE)),
450
+ blank(),
451
+ );
452
+
433
453
  const hintLine = fitHints(this.hints, Math.max(1, inner - PAD * 2));
434
454
  if (hintLine) {
435
455
  // The whole line is dimmed rather than highlighting each key: this is