@telepath-computer/television 0.1.206 → 0.1.209

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 (43) hide show
  1. package/dist/canonical/v1/components.js +1 -258
  2. package/dist/canonical/v1/styles.css +372 -312
  3. package/dist/cli.cjs +3749 -3629
  4. package/dist/onboarding/README.md +17 -12
  5. package/dist/onboarding/business-ops/about.html +4 -8
  6. package/dist/onboarding/business-ops/retention-vs-releases.html +0 -9
  7. package/dist/onboarding/business-ops/revenue-vs-goals.html +0 -11
  8. package/dist/onboarding/onboarding-channels.json +114 -0
  9. package/dist/onboarding/productivity/about.html +4 -8
  10. package/dist/onboarding/productivity/company-todos/index.html +0 -3
  11. package/dist/onboarding/productivity/company-todos/task.css +3 -3
  12. package/dist/onboarding/productivity/company-todos/task.js +1 -4
  13. package/dist/onboarding/productivity/meeting-prep.html +0 -7
  14. package/dist/onboarding/productivity/priorities-today.html +0 -7
  15. package/dist/onboarding/productivity/todays-calendar/calendar.js +327 -643
  16. package/dist/onboarding/productivity/todays-calendar/index.html +0 -4
  17. package/dist/onboarding/research/about.html +5 -9
  18. package/dist/onboarding/research/open-model-research.html +0 -9
  19. package/dist/onboarding/research/todays-news.html +3 -10
  20. package/dist/onboarding/tv-guide/welcome/index.html +5 -5
  21. package/dist/skills/television/SKILL.md +180 -136
  22. package/dist/skills/tv-calendar/calendar.js +327 -643
  23. package/dist/skills/tv-tasks/SKILL.md +10 -9
  24. package/dist/skills/tv-tasks/task.css +5 -6
  25. package/dist/skills/tv-tasks/task.js +2 -5
  26. package/dist/skills/tv-theme/SKILL.md +293 -193
  27. package/dist/views/artifact-missing/index.html +125 -60
  28. package/dist/views/markdown/index.html +22 -45
  29. package/dist/web/assets/artifact-bridge-BXDhGuL-.js +1 -0
  30. package/dist/web/assets/{artifactMissing-DY3nzD0p.js → artifactMissing-9rcTXhkH.js} +1 -1
  31. package/dist/web/assets/main-Blg8fuaV.css +1 -0
  32. package/dist/web/assets/main-Dlb0E5A4.js +594 -0
  33. package/dist/web/assets/{urlUnsupported-B2K6eB7H.js → urlUnsupported-kgq7Zh2V.js} +1 -1
  34. package/dist/web/index.html +4 -3
  35. package/dist/web/views/artifact-missing/index.html +125 -60
  36. package/dist/web/views/url-unsupported/index.html +127 -74
  37. package/package.json +2 -2
  38. package/dist/onboarding/onboarding-screens.json +0 -167
  39. package/dist/skills/tv-calendar/THIRD-PARTY-NOTICES.txt +0 -36
  40. package/dist/web/assets/artifact-bridge-BhiFDvPj.js +0 -1
  41. package/dist/web/assets/main-5017mprd.css +0 -1
  42. package/dist/web/assets/main-DdeZRdEy.js +0 -865
  43. /package/dist/canonical/v1/fonts/{Hind-Variable.woff2 → Hind-Variable.933e9900.woff2} +0 -0
@@ -1,19 +1,24 @@
1
1
  # Onboarding content — replacement contract
2
2
 
3
- This tree deliberately mixes provenance: baked screens and hand-authored
4
- screens are full runtime peers, indistinguishable to the config, validation,
3
+ This tree deliberately mixes provenance: baked channels and hand-authored
4
+ channels are full runtime peers, indistinguishable to the config, validation,
5
5
  and installer (specs/arch/onboarding/bake.md). This README is where each
6
- screen's provenance is recorded.
6
+ channel's provenance is recorded.
7
7
 
8
8
  **`business-ops`, `productivity`, and `research` are baked content**:
9
- generated from the design sources under `specs/ui/onboarding/` by
9
+ generated from the design sources under `specs/ui/onboarding-artifacts/` by
10
10
  `scripts/bake-onboarding.mjs` (specs/arch/onboarding/bake.md; requires the
11
11
  repository's Node 24 toolchain). Do not edit
12
- these screen folders or their `artifacts`/`layout` config entries by hand —
13
- a re-bake overwrites them. To change their content, edit the design sources
12
+ these channel folders or their `artifacts` config entries by hand — a re-bake
13
+ overwrites them. To change their content, edit the design sources
14
14
  and re-bake; the diff is reviewed and committed like any content change.
15
- Their display `name` values, screen order, and `focusScreen` in
16
- `onboarding-screens.json` are hand-edits the bake preserves.
15
+ Their display `name` values, channel order, and `focusChannel` in
16
+ `onboarding-channels.json` are hand-edits the bake preserves. An artifact
17
+ entry may also carry optional initial-page `size` and `geometry`; for baked
18
+ channels author those fields in the design channel's `layout.yml` so a
19
+ re-bake carries them into the config. Hand-authored channels such as
20
+ `tv-guide` may author the same fields directly in the config. Missing fields
21
+ use the shared page defaults.
17
22
 
18
23
  **All non-tv-guide content is swap-free**: tests derive their expectations
19
24
  from this config and these files at runtime, so content edits (baked or
@@ -21,12 +26,12 @@ hand-authored) need zero test changes.
21
26
 
22
27
  **`tv-guide` content is deliberately test-pinned** (it is released copy) and
23
28
  is hand-authored, not baked: `packages/server/test/onboarding-content.test.ts`
24
- pins its artifact slug and layout, and
25
- `test/node/fresh-install-onboarding.test.ts` pins its welcome copy and asset.
29
+ pins its artifact order, and `test/node/fresh-install-onboarding.test.ts` pins
30
+ its welcome copy and asset.
26
31
  Changing TV Guide content means updating those pins on purpose.
27
32
 
28
- **The screen SET (folder names = slugs) is pinned in exactly one place**:
29
- `test/helpers/shipped-onboarding.ts`. Adding, removing, or renaming a screen
33
+ **The channel SET (folder names = slugs) is pinned in exactly one place**:
34
+ `test/helpers/shipped-onboarding.ts`. Adding, removing, or renaming a channel
30
35
  updates that list deliberately. Slugs are permanent identity once released —
31
36
  renaming one reads as delete-plus-add to every existing install
32
37
  (specs/arch/onboarding/content.md).
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <title>About this screen</title>
6
+ <title>About this channel</title>
7
7
  <link rel="stylesheet" href="/canonical/v1/styles.css">
8
8
  <script type="module" src="/canonical/v1/components.js"></script>
9
9
  <style>
@@ -56,7 +56,7 @@ header > .summary-deck {
56
56
  muted and italic so it reads as a quotation rather than body copy. One
57
57
  accent for all three (the rule is decoration, not a categorization). */
58
58
 
59
- /* The About cards read as the screen's guide, not an example result: they sit
59
+ /* The About cards read as the channel's guide, not an example result: they sit
60
60
  on a post-it yellow surface, a deliberate exception to the set's "artifacts
61
61
  don't set backgrounds" rule. The surface is a fixed ramp token (yellow in
62
62
  any theme, like a sticky note), so the text and accent are pinned to fixed
@@ -112,15 +112,12 @@ body {
112
112
  </style>
113
113
  </head>
114
114
  <body>
115
-
116
-
117
-
118
115
  <main class="shell">
119
116
  <header>
120
- <h1>About this screen</h1>
117
+ <h1>About this channel</h1>
121
118
 
122
119
  <p class="lede">
123
- This screen shows examples of TV artifacts focused on business
120
+ This channel shows examples of TV artifacts focused on business
124
121
  operations. Instead of flipping between different apps and web pages,
125
122
  you can ask your agent to generate artifacts that combine and
126
123
  synthesize the information you need to run your business, in one
@@ -145,6 +142,5 @@ body {
145
142
  </li>
146
143
  </ul>
147
144
  </main>
148
-
149
145
  </body>
150
146
  </html>
@@ -374,14 +374,6 @@ svg.chart .point-labels .peak { fill: var(--green-500); }
374
374
  </style>
375
375
  </head>
376
376
  <body>
377
-
378
-
379
-
380
-
381
-
382
-
383
-
384
-
385
377
  <main class="shell">
386
378
  <header class="hero">
387
379
  <h1>Retention vs. recent releases</h1>
@@ -567,6 +559,5 @@ svg.chart .point-labels .peak { fill: var(--green-500); }
567
559
  </div>
568
560
  </section>
569
561
  </main>
570
-
571
562
  </body>
572
563
  </html>
@@ -391,16 +391,6 @@ svg.chart .bar-labels .accent { fill: var(--green-500); }
391
391
  </style>
392
392
  </head>
393
393
  <body>
394
-
395
-
396
-
397
-
398
-
399
-
400
-
401
-
402
-
403
-
404
394
  <main class="shell">
405
395
  <header class="hero">
406
396
  <h1>Revenue vs. goals</h1>
@@ -616,6 +606,5 @@ svg.chart .bar-labels .accent { fill: var(--green-500); }
616
606
  <p>Revenue has grown 11.8x over the past 18 months, from $240K in Q1 2025 to $2.84M in Q2 2026. The company missed or came in just under goal for the first five quarters — typical for a pre-product-market-fit startup — but exceeded the Q2 2026 target by $240K, driven by the v0.4.0 release and the Acme expansion path. TTM revenue is $7.64M, with the $9.6M Acme expansion path central to the seed deck narrative.</p>
617
607
  </section>
618
608
  </main>
619
-
620
609
  </body>
621
610
  </html>
@@ -0,0 +1,114 @@
1
+ {
2
+ "version": 3,
3
+ "focusChannel": "tv-guide",
4
+ "channels": [
5
+ {
6
+ "slug": "research",
7
+ "name": "Research",
8
+ "artifacts": [
9
+ {
10
+ "slug": "about",
11
+ "title": "About this channel",
12
+ "size": {
13
+ "width": 300,
14
+ "height": 740
15
+ }
16
+ },
17
+ {
18
+ "slug": "todays-news",
19
+ "title": "Today's AI News"
20
+ },
21
+ {
22
+ "slug": "open-model-research",
23
+ "title": "Open model research"
24
+ },
25
+ {
26
+ "slug": "draft-blog-post",
27
+ "title": "Draft blog post"
28
+ }
29
+ ]
30
+ },
31
+ {
32
+ "slug": "business-ops",
33
+ "name": "Business ops",
34
+ "artifacts": [
35
+ {
36
+ "slug": "about",
37
+ "title": "About this channel",
38
+ "size": {
39
+ "width": 300,
40
+ "height": 740
41
+ }
42
+ },
43
+ {
44
+ "slug": "revenue-vs-goals",
45
+ "title": "Revenue vs. goals",
46
+ "size": {
47
+ "width": 650,
48
+ "height": 740
49
+ }
50
+ },
51
+ {
52
+ "slug": "retention-vs-releases",
53
+ "title": "Retention vs. recent releases",
54
+ "size": {
55
+ "width": 650,
56
+ "height": 740
57
+ }
58
+ }
59
+ ]
60
+ },
61
+ {
62
+ "slug": "productivity",
63
+ "name": "Productivity",
64
+ "artifacts": [
65
+ {
66
+ "slug": "about",
67
+ "title": "About this channel",
68
+ "size": {
69
+ "width": 300,
70
+ "height": 740
71
+ }
72
+ },
73
+ {
74
+ "slug": "priorities-today",
75
+ "title": "Priorities for Today"
76
+ },
77
+ {
78
+ "slug": "company-todos",
79
+ "title": "Company To-dos",
80
+ "size": {
81
+ "width": 400,
82
+ "height": 740
83
+ }
84
+ },
85
+ {
86
+ "slug": "todays-calendar",
87
+ "title": "Today's Calendar",
88
+ "size": {
89
+ "width": 300,
90
+ "height": 740
91
+ }
92
+ },
93
+ {
94
+ "slug": "meeting-prep",
95
+ "title": "Meeting prep"
96
+ }
97
+ ]
98
+ },
99
+ {
100
+ "slug": "tv-guide",
101
+ "name": "TV Guide",
102
+ "artifacts": [
103
+ {
104
+ "slug": "welcome",
105
+ "title": "Welcome to Television",
106
+ "size": {
107
+ "width": 800,
108
+ "height": 740
109
+ }
110
+ }
111
+ ]
112
+ }
113
+ ]
114
+ }
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <title>About this screen</title>
6
+ <title>About this channel</title>
7
7
  <link rel="stylesheet" href="/canonical/v1/styles.css">
8
8
  <script type="module" src="/canonical/v1/components.js"></script>
9
9
  <style>
@@ -56,7 +56,7 @@ header > .summary-deck {
56
56
  muted and italic so it reads as a quotation rather than body copy. One
57
57
  accent for all three (the rule is decoration, not a categorization). */
58
58
 
59
- /* The About cards read as the screen's guide, not an example result: they sit
59
+ /* The About cards read as the channel's guide, not an example result: they sit
60
60
  on a post-it yellow surface, a deliberate exception to the set's "artifacts
61
61
  don't set backgrounds" rule. The surface is a fixed ramp token (yellow in
62
62
  any theme, like a sticky note), so the text and accent are pinned to fixed
@@ -112,15 +112,12 @@ body {
112
112
  </style>
113
113
  </head>
114
114
  <body>
115
-
116
-
117
-
118
115
  <main class="shell">
119
116
  <header>
120
- <h1>About this screen</h1>
117
+ <h1>About this channel</h1>
121
118
 
122
119
  <p class="lede">
123
- This screen shows examples of TV artifacts focused on personal
120
+ This channel shows examples of TV artifacts focused on personal
124
121
  productivity. Instead of using a separate to-do app, calendar, or
125
122
  notepad, you can have your agent synthesize all of that information into
126
123
  a single view that helps you better manage your day.
@@ -144,6 +141,5 @@ body {
144
141
  </li>
145
142
  </ul>
146
143
  </main>
147
-
148
144
  </body>
149
145
  </html>
@@ -13,8 +13,6 @@
13
13
  </style>
14
14
  </head>
15
15
  <body>
16
-
17
-
18
16
  <header>
19
17
  <h1>Company To-dos</h1>
20
18
  <p>Wednesday, July 8</p>
@@ -116,6 +114,5 @@
116
114
  </tv-task-section>
117
115
 
118
116
  </tv-task-list>
119
-
120
117
  </body>
121
118
  </html>
@@ -50,8 +50,8 @@ tv-task:has(tv-task-checkbox[checked]) tv-task-title {
50
50
  color: var(--color-text-muted);
51
51
  text-decoration: line-through;
52
52
  }
53
- /* A completed task's due date no longer matters — always mute it, overriding
54
- the today/overdue emphasis. */
53
+ /* A completed task's due date is always muted, overriding the today/overdue
54
+ emphasis. */
55
55
  tv-task:has(tv-task-checkbox[checked]) tv-task-meta-due {
56
56
  color: var(--task-meta-text);
57
57
  }
@@ -113,7 +113,7 @@ tv-task:has(tv-task-checkbox[disabled]) tv-task-title {
113
113
 
114
114
  /* ---- List container ----
115
115
  No frame of its own: the artifact page is the surface, and Television's
116
- artifact-view supplies the card chrome around the document. */
116
+ artifact frame supplies the chrome around the document. */
117
117
 
118
118
  tv-task-list {
119
119
  display: block;
@@ -253,7 +253,7 @@ __publicField(TaskCheckboxElement, "observedAttributes", ["checked", "disabled"]
253
253
  if (!customElements.get("tv-task-checkbox")) {
254
254
  customElements.define("tv-task-checkbox", TaskCheckboxElement);
255
255
  }
256
- const CALENDAR_ICON = `<tv-icon name="calendar-blank" size="16" aria-hidden="true"></tv-icon>`;
256
+ const CALENDAR_ICON = `<tv-icon name="calendar" size="sm" aria-hidden="true"></tv-icon>`;
257
257
  const DUE_STYLES = `
258
258
  :host {
259
259
  display: inline-flex;
@@ -261,9 +261,6 @@ const DUE_STYLES = `
261
261
  gap: 4px;
262
262
  color: currentColor;
263
263
  }
264
- tv-icon {
265
- flex: none;
266
- }
267
264
  `;
268
265
  class TaskMetaDueElement extends HTMLElement {
269
266
  constructor() {
@@ -338,12 +338,6 @@ header.hero h1 {
338
338
  </style>
339
339
  </head>
340
340
  <body>
341
-
342
-
343
-
344
-
345
-
346
-
347
341
  <main class="shell">
348
342
  <header class="hero">
349
343
  <h1>Meeting Prep — 1:1 with Priya</h1>
@@ -435,6 +429,5 @@ header.hero h1 {
435
429
  </section>
436
430
 
437
431
  </main>
438
-
439
432
  </body>
440
433
  </html>
@@ -289,12 +289,6 @@ header.hero h1 {
289
289
  </style>
290
290
  </head>
291
291
  <body>
292
-
293
-
294
-
295
-
296
-
297
-
298
292
  <main class="shell">
299
293
  <header class="hero">
300
294
  <h1>Priorities for Today</h1>
@@ -404,6 +398,5 @@ header.hero h1 {
404
398
  </div>
405
399
  </section>
406
400
  </main>
407
-
408
401
  </body>
409
402
  </html>