@telepath-computer/television 0.1.47 → 0.1.49
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/dist/cli.cjs +578 -92
- package/dist/web/assets/index-B9Lt1Vk_.js +480 -0
- package/dist/web/assets/index-CxPYSz1c.css +1 -0
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/skill/SKILL.md +49 -10
- package/dist/web/assets/index-C9cdVmvp.js +0 -480
- package/dist/web/assets/index-CFOcuf2X.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
artifact-view{display:flex;flex-direction:column;width:100%;height:100%;border-radius:var(--radius-16);overflow:hidden;transition:box-shadow .15s ease,transform .15s ease}artifact-view .artifact-title-bar{display:flex;align-items:center;justify-content:space-between;height:30px;padding:0 6px 0 10px;border:0;box-shadow:inset 0 .5px 0 var(--color-border-muted);font-size:12px;font-weight:500;touch-action:none;-webkit-user-select:none;user-select:none}artifact-view[dragging=true]{box-shadow:0 6px 16px #00000024,0 20px 56px #0000003d}artifact-view[dragging=true] .artifact-title-bar{background:linear-gradient(180deg,var(--color-highlight),transparent),var(--color-surface-muted);backdrop-filter:none;-webkit-backdrop-filter:none}artifact-view .artifact-title-group{display:flex;align-items:center;gap:6px;min-width:0}artifact-view .artifact-title-icon{display:inline-flex;flex:none;color:var(--color-text-muted)}artifact-view .artifact-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}artifact-view .artifact-close-btn{width:20px;height:20px;border-radius:var(--radius-4)}artifact-view .artifact-content{flex:1;min-height:0;overflow:auto;background:var(--color-surface)}artifact-view iframe.artifact-frame{border:0;width:100%;display:block}artifact-view .artifact-placeholder{display:flex;align-items:center;justify-content:center;color:var(--color-text-muted, #888);font-size:12px}layout-view{width:100%;flex:1;min-width:0;min-height:0;display:flex;align-items:flex-start;padding:40px 0 60px;overflow:hidden;outline:none;position:relative;--layout-unit-x: 120px;--layout-unit-y: 120px;--layout-gap: 16px;--layout-drag-transition-ms: 0ms;--color-drag-target: color-mix( in srgb, var(--color-border, var(--neutral-300, #cbd5e1)) 55%, transparent )}layout-view .track{display:flex;align-items:start;gap:var(--layout-gap);flex-shrink:0;width:max-content;will-change:transform;transition:transform .2s ease}layout-view .node{display:grid;grid-template-columns:repeat(4,var(--layout-unit-x));grid-template-rows:repeat(6,var(--layout-unit-y));gap:var(--layout-gap);align-self:start;width:calc(var(--layout-unit-x) * 4 + var(--layout-gap) * 3);will-change:transform}layout-view .card-slot{border-radius:var(--radius-12);box-sizing:border-box;cursor:default;min-width:0;min-height:0;position:relative;z-index:1}layout-view .card-slot artifact-view{width:100%;height:100%}layout-view .card-placeholder{border-radius:var(--radius-12);background:var(--color-drag-target);position:relative;z-index:0}layout-view .card-placeholder[data-layout-placeholder-ghost=true]{background:transparent;border:0;opacity:0;pointer-events:none}layout-view .drag-preview{position:fixed;z-index:10;pointer-events:none}layout-view .drag-preview>*{width:100%;height:100%}@keyframes card-focus-pulse{0%{box-shadow:0 0 0 0 var(--color-accent, #3b82f6)}20%{box-shadow:0 0 0 6px color-mix(in srgb,var(--color-accent, #3b82f6) 60%,transparent)}40%{box-shadow:0 0 0 0 transparent}60%{box-shadow:0 0 0 6px color-mix(in srgb,var(--color-accent, #3b82f6) 60%,transparent)}to{box-shadow:0 0 0 0 transparent}}layout-view .card-slot.card-focus-pulse{animation:card-focus-pulse .6s ease-out 1}screen-view{width:100%;flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}screen-view .empty{flex:1;display:flex;align-items:center;justify-content:center;margin:0;padding:16px;text-align:center;color:var(--color-text-muted)}home-screen{display:flex;flex-direction:column;flex:1;width:100%;min-height:100vh;padding:0 24px;box-sizing:border-box}home-screen:before,home-screen:after{content:"";flex:1 1 0}home-screen:before{min-height:20vh}home-screen .tiles,home-screen .empty{flex:0 0 auto;width:100%;max-width:560px;margin:0 auto}home-screen .tiles{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;list-style:none;padding:0}home-screen .tile{display:flex;flex-direction:column;align-items:flex-start;gap:4px;width:100%;min-height:84px;padding:14px 16px;border-radius:var(--radius-16);text-align:left}home-screen .empty{color:var(--color-text-muted);text-align:center}screen-breadcrumb{display:inline-flex;align-items:center;gap:0;font-size:13px;font-weight:600;color:#000000b3}screen-breadcrumb[tone=dark]{color:#ffffffd9}screen-breadcrumb .home{border-radius:var(--radius-8)}screen-breadcrumb .separator{display:inline-flex;align-items:center;color:#00000059}screen-breadcrumb[tone=dark] .separator{color:#ffffff80}screen-breadcrumb dropdown-menu [slot=trigger]{padding:2px 6px;border-radius:var(--radius-8)}screen-breadcrumb ui-popover::part(panel){min-width:240px;font-weight:var(--font-weight-body)}screen-breadcrumb .screen-form{display:grid;gap:var(--space-12);color:var(--color-text);font-size:var(--text-base);font-weight:var(--font-weight-body)}screen-breadcrumb .screen-form .confirm-text{margin:0}screen-breadcrumb .screen-form .error{margin:0;color:var(--color-danger);font-size:var(--text-sm)}screen-breadcrumb .screen-form .actions{display:flex;justify-content:flex-end;gap:var(--space-6)}screen-create-button{display:inline-flex;align-items:center;color:#000000b3}screen-create-button[tone=dark]{color:#ffffffd9}screen-create-button .new-screen{border-radius:var(--radius-4)}message-history{position:relative;display:flex;flex-direction:column;min-height:0;color:#ffffffe6;line-height:1.5}message-history:not(:has(.message)){display:none}message-history .history-scroll{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;gap:12px;padding:24px 8px 12px;overflow-y:auto;mask-image:linear-gradient(to bottom,transparent 0,black 24px,black calc(100% - 24px),transparent 100%);-webkit-mask-image:linear-gradient(to bottom,transparent 0,black 24px,black calc(100% - 24px),transparent 100%)}message-history[data-pinned] .history-scroll{mask-image:linear-gradient(to bottom,transparent 0,black 24px);-webkit-mask-image:linear-gradient(to bottom,transparent 0,black 24px)}message-history .message{padding:6px 10px;border-radius:var(--radius-8);word-wrap:break-word}message-history .message-user{align-self:flex-start;max-width:85%;background:#ffffff26;white-space:pre-wrap}message-history .message-assistant{align-self:stretch}message-history .message-tool_call{align-self:stretch;border:1px solid rgba(255,255,255,.12);background:#ffffff0d}message-history .tool-call-header{display:flex;align-items:baseline;justify-content:space-between;gap:8px}message-history .tool-call-title{font-weight:600}message-history .tool-call-meta{color:#fff9;font-size:.85em;white-space:nowrap}message-history .tool-call-text{margin:6px 0 0;padding:8px 10px;border-radius:var(--radius-8);background:#0003;color:#ffffffd9;overflow:auto;max-height:240px;white-space:pre-wrap;font-family:var(--font-mono);font-size:.9em}message-history .message-assistant>:first-child{margin-top:0}message-history .message-assistant>:last-child{margin-bottom:0}message-history .message-assistant p,message-history .message-assistant ul,message-history .message-assistant ol,message-history .message-assistant pre,message-history .message-assistant blockquote{margin:0 0 8px}message-history .message-assistant h1,message-history .message-assistant h2,message-history .message-assistant h3,message-history .message-assistant h4{margin:12px 0 4px;font-weight:600;line-height:1.3}message-history .message-assistant ul,message-history .message-assistant ol{padding-left:20px}message-history .message-assistant code{padding:1px 4px;border-radius:var(--radius-4);background:#ffffff1a;font-family:var(--font-mono);font-size:.9em}message-history .message-assistant pre{padding:8px 10px;border-radius:var(--radius-8);background:#ffffff14;overflow-x:auto}message-history .message-assistant pre code{padding:0;background:none}message-history .message-assistant blockquote{padding-left:10px;border-left:2px solid rgba(255,255,255,.2);color:#ffffffb3}message-history .message-assistant a{color:#fffffff2;text-decoration:underline;text-underline-offset:2px}message-history .history-jump{position:absolute;right:8px;bottom:8px;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:var(--radius-full);background:#ffffff26;color:#ffffffe6;transition:opacity .15s ease}message-history .history-jump:hover{background:#ffffff40}message-history[data-pinned] .history-jump{opacity:0;pointer-events:none}command-panel{display:flex;width:320px;padding:12px 16px;border-radius:var(--radius-16);z-index:1000}command-panel .trigger{flex:1;min-width:0;display:flex;align-items:center;justify-content:flex-start;gap:8px;color:#ffffff8c;line-height:1.4;cursor:text;outline:none}command-panel .trigger .label{flex:1;min-width:0;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}command-panel .trigger .kbd{flex:0 0 auto;padding:1px 6px;border-radius:var(--radius-4);background:#ffffff1a;border:.5px solid rgba(255,255,255,.15);color:#ffffff8c;font-size:.85em;line-height:1.3;letter-spacing:.02em}command-panel[open]{width:380px;padding:8px;flex-direction:column}command-panel[open] message-history{max-height:min(60vh,480px);margin:-8px -8px 0}command-panel[open] .input,command-panel[open] .input:focus{flex:0 0 auto;min-width:0;max-height:192px;padding:8px 10px;border:none;border-radius:var(--radius-8);resize:none;outline:none;box-shadow:none;background:#ffffff26;color:#ffffffe6;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:1.4;field-sizing:content}television-app{width:100%;height:100%;display:block;background:url(./gradient-textured-e-Dp94sOPT.jpg) center / cover no-repeat}.electron-draggable{-webkit-app-region:drag}.electron-draggable>*{-webkit-app-region:no-drag}television-app>main{position:relative;display:flex;flex-direction:column;width:100%;height:100%;min-width:0;min-height:0;-webkit-user-select:none;user-select:none}television-app>main.auth-gate{align-items:center;justify-content:center}television-app>main>screen-view,television-app>main>home-screen{flex:1;min-height:0}television-app>main>.chrome{position:absolute;top:0;right:0;bottom:0;left:0;padding:8px;pointer-events:none;display:flex;flex-direction:column}television-app>main>.chrome>*{pointer-events:auto}television-app>main>.chrome>.top-row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-8, 8px)}body.electron television-app>main>.chrome>.top-row{padding-left:78px}television-app>main>.chrome>command-panel{margin-top:auto;align-self:flex-end}.auth-modal{width:min(384px,100%);display:flex;flex-direction:column;padding:20px;border:1px solid var(--color-border);border-radius:var(--radius-12);background:var(--color-bg)}.auth-form{display:flex;flex-direction:column;gap:12px}.auth-modal-title,.auth-modal-copy{margin:0}.auth-token-input-invalid{border-color:#c74343}:root{--color-bg: var(--neutral-200);--color-border: var(--neutral-300)}
|
package/dist/web/index.html
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Television</title>
|
|
7
|
-
<script type="module" crossorigin src="./assets/index-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
7
|
+
<script type="module" crossorigin src="./assets/index-B9Lt1Vk_.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="./assets/index-CxPYSz1c.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body></body>
|
|
11
11
|
</html>
|
package/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -15,8 +15,14 @@ in the current implementation.
|
|
|
15
15
|
|
|
16
16
|
## Mental model
|
|
17
17
|
|
|
18
|
-
- A **screen** is
|
|
19
|
-
- An **artifact** is
|
|
18
|
+
- A **screen** is a named viewer surface with a layout.
|
|
19
|
+
- An **artifact** is a file-backed result that can exist independently of any
|
|
20
|
+
screen. It can be unplaced, attached to one screen, or attached to multiple
|
|
21
|
+
screens.
|
|
22
|
+
- **Screen membership** is separate from artifact identity: attaching/detaching
|
|
23
|
+
controls which screens show an artifact; deleting removes the artifact
|
|
24
|
+
globally. The CLI create commands require `--screen` so in-progress artifacts
|
|
25
|
+
are visible immediately.
|
|
20
26
|
- An **internal artifact** is a Television-managed bundle. You create a pending
|
|
21
27
|
bundle, edit files in that bundle, then commit it.
|
|
22
28
|
- An **external artifact** is a pointer to an existing absolute file on disk.
|
|
@@ -342,6 +348,8 @@ Or:
|
|
|
342
348
|
tv create-internal-artifact --screen "<screen-id>" --type text/html --title "Artifact title"
|
|
343
349
|
```
|
|
344
350
|
|
|
351
|
+
`--screen` is required for internal artifact creation so the user can see the in-progress artifact immediately.
|
|
352
|
+
|
|
345
353
|
3. Read the returned pending path and edit files there.
|
|
346
354
|
4. Write `artifact.md`.
|
|
347
355
|
5. In `artifact.md`, capture the user's language faithfully in `## User intent` before doing the rest of the authoring work. Use direct quotes when helpful, or a close paraphrase when that is clearer, but keep it representative of what the user actually said they wanted.
|
|
@@ -421,6 +429,8 @@ Or:
|
|
|
421
429
|
tv create-external-artifact --screen "<screen-id>" --type text/html --title "Artifact title" --path /absolute/path/to/file.html
|
|
422
430
|
```
|
|
423
431
|
|
|
432
|
+
`--screen` is required for CLI creation so the file appears on a visible screen immediately.
|
|
433
|
+
|
|
424
434
|
Rules:
|
|
425
435
|
|
|
426
436
|
- `--path` must be absolute
|
|
@@ -430,38 +440,67 @@ Rules:
|
|
|
430
440
|
|
|
431
441
|
## CLI reference
|
|
432
442
|
|
|
433
|
-
|
|
443
|
+
Artifact commands:
|
|
434
444
|
|
|
435
445
|
```bash
|
|
436
446
|
tv create-internal-artifact --screen "<screen-id>" --type <text/markdown|text/html> --title "Artifact title"
|
|
447
|
+
tv create-external-artifact --screen "<screen-id>" --type <text/markdown|text/html> --title "Artifact title" --path /absolute/path
|
|
437
448
|
tv edit-internal-artifact --id "<artifact-id>"
|
|
438
449
|
tv commit-pending-artifact --id "<artifact-id>"
|
|
439
450
|
tv abandon-pending-artifact --id "<artifact-id>"
|
|
440
|
-
tv create-external-artifact --screen "<screen-id>" --type <text/markdown|text/html> --title "Artifact title" --path /absolute/path
|
|
441
451
|
tv update-artifact --id "<artifact-id>" --title "New title"
|
|
442
|
-
tv
|
|
443
|
-
tv
|
|
452
|
+
tv list-artifacts [--screen "<screen-id>"] [--unplaced]
|
|
453
|
+
tv get-artifact --id "<artifact-id>"
|
|
454
|
+
tv delete-artifact --id "<artifact-id>"
|
|
444
455
|
```
|
|
445
456
|
|
|
446
|
-
|
|
457
|
+
Screen commands:
|
|
447
458
|
|
|
448
459
|
```bash
|
|
460
|
+
tv create-screen --name "Screen name"
|
|
449
461
|
tv list-screens
|
|
450
462
|
tv get-screen --id "<screen-id>"
|
|
451
|
-
tv
|
|
452
|
-
|
|
463
|
+
tv remove-screen --id "<screen-id>"
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
Screen membership commands:
|
|
467
|
+
|
|
468
|
+
```bash
|
|
469
|
+
tv attach-artifact --id "<artifact-id>" --screen "<screen-id>"
|
|
470
|
+
tv detach-artifact --id "<artifact-id>" --screen "<screen-id>"
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
Viewer commands:
|
|
474
|
+
|
|
475
|
+
```bash
|
|
476
|
+
tv viewer-status
|
|
477
|
+
tv set-active-screen --id "<screen-id>"
|
|
478
|
+
tv focus-artifact --id "<artifact-id>" [--screen "<screen-id>"]
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
Server commands:
|
|
482
|
+
|
|
483
|
+
```bash
|
|
453
484
|
tv status
|
|
485
|
+
tv storage-path
|
|
454
486
|
tv serve
|
|
455
487
|
tv stop
|
|
456
488
|
```
|
|
457
489
|
|
|
458
490
|
CLI behavior notes:
|
|
459
491
|
|
|
492
|
+
- `--screen` is required on CLI create commands so new artifacts are visible immediately; use `tv attach-artifact` and `tv detach-artifact` for later screen membership changes
|
|
460
493
|
- workflow and mutation commands print plain text
|
|
461
494
|
- read commands print JSON
|
|
462
495
|
- `tv get-screen` includes artifact `kind` and `status`
|
|
463
|
-
- `tv
|
|
496
|
+
- `tv attach-artifact` appends a default-sized card to the right end of the strip; idempotent if the artifact is already on that screen
|
|
497
|
+
- `tv detach-artifact` removes the card from a screen's layout; the artifact metadata is never touched, even on the last reference
|
|
498
|
+
- `tv delete-artifact` is the way to globally remove an artifact (detaches from every screen, then trashes the bundle / forgets the external pointer / discards pending-create)
|
|
499
|
+
- `tv list-artifacts` accepts `--screen <id>` to filter by screen membership and `--unplaced` to surface artifacts attached to no screen
|
|
464
500
|
- `tv update-artifact` changes title metadata only
|
|
501
|
+
- `tv set-active-screen` sets which screen the GUI is focused on; the change is persisted and broadcast to connected clients
|
|
502
|
+
- `tv focus-artifact` is a transient nudge: clients switch screens if needed, scroll the artifact's card into view, and play a brief highlight animation; pass `--screen <id>` to pin which screen, otherwise the server picks one (preferring the active screen when the artifact is there)
|
|
503
|
+
- `tv viewer-status` prints the active screen ID and the count of connected GUI clients
|
|
465
504
|
- when the CLI reports an error, follow the directive to run `tv help`
|
|
466
505
|
|
|
467
506
|
## Deferred or out of scope
|