@telepath-computer/television 0.1.3 → 0.1.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.
@@ -0,0 +1 @@
1
+ artifact-view{background:var(--color-bg-muted);border:1px solid var(--color-border);border-radius:10px;box-sizing:border-box;width:100%;height:100%;display:flex;flex-direction:column;overflow:hidden}.artifact-title-bar{display:flex;align-items:center;height:34px;padding:0 12px;flex-shrink:0;border-bottom:1px solid var(--color-border);-webkit-user-select:none;user-select:none}.artifact-title{flex:1;font-size:13px;font-weight:500;color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.artifact-close-btn{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;border-radius:6px;background:transparent;color:var(--color-text-muted);cursor:pointer;flex-shrink:0}.artifact-close-btn:hover{background:var(--color-interactive);color:var(--color-text)}.artifact-content{flex:1;min-height:0;overflow-y:auto;padding:0}artifact-view[type=markdown] .artifact-content{padding:16px 20px}artifact-view[type=html] .artifact-content{overflow:hidden}.artifact-html-frame{pointer-events:none}.markdown-body{font-size:14px;line-height:1.6;color:var(--color-text)}.markdown-body>:first-child{margin-top:0}.markdown-body>:last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3{font-weight:600;margin:1.25em 0 .5em}.markdown-body h1{font-size:1.4em}.markdown-body h2{font-size:1.2em}.markdown-body h3{font-size:1.05em}.markdown-body p{margin:.75em 0}.markdown-body code{font-family:var(--font-mono);font-size:.9em;background:var(--color-interactive);padding:.15em .35em;border-radius:4px}.markdown-body pre{background:var(--color-interactive);border-radius:6px;padding:12px 14px;overflow-x:auto}.markdown-body pre code{background:none;padding:0}.markdown-body ul,.markdown-body ol{padding-left:1.5em;margin:.75em 0}.markdown-body blockquote{margin:.75em 0;padding-left:1em;border-left:3px solid var(--color-border);color:var(--color-text-muted)}.markdown-body a{color:var(--color-text);text-decoration:underline}.markdown-body hr{border:none;border-top:1px solid var(--color-border);margin:1em 0}layout-stream{width:100%;flex:1;min-width:0;min-height:0;display:flex;align-items:center;overflow:hidden;outline:none;position:relative;--layout-col-width: 300px;--layout-row-height: 133.33px;--layout-gap: 16px}layout-stream .track{display:flex;align-items:start;gap:var(--layout-gap);flex-shrink:0;width:max-content;will-change:transform;transition:transform .2s ease}layout-stream .band{display:grid;grid-template-rows:repeat(6,var(--layout-row-height));gap:var(--layout-gap);align-self:start}layout-stream .band[layout-band-cols="1"]{grid-template-columns:var(--layout-col-width);width:var(--layout-col-width)}layout-stream .band[layout-band-cols="2"]{grid-template-columns:repeat(2,var(--layout-col-width));width:calc(var(--layout-col-width) * 2 + var(--layout-gap))}layout-stream .card-slot{border-radius:12px;box-sizing:border-box;cursor:pointer;min-width:0;min-height:0}layout-stream .card-slot.placeholder{background:#94a3b829;border:2px dashed rgba(148,163,184,.7);box-shadow:inset 0 0 0 1px #0f172a0d}layout-stream .card-slot.dragging{position:fixed;z-index:100;opacity:.7;transform:rotate(2deg);pointer-events:none;cursor:grabbing}layout-stream .card-slot artifact-view{width:100%;height:100%}layout-stream .card-slot[layout-cols="1"][layout-rows="2"]{padding:16px}layout-stream .card-slot[layout-cols="1"][layout-rows="2"] artifact-view{position:relative}layout-stream .card-slot[layout-cols="1"][layout-rows="2"] .artifact-title-bar{position:absolute;top:0;left:0;right:0;z-index:2;border-radius:10px 10px 0 0;background:var(--color-bg-muted);opacity:0;pointer-events:none;transition:opacity .12s ease}layout-stream .card-slot[layout-cols="1"][layout-rows="2"]:hover .artifact-title-bar,layout-stream .card-slot[layout-cols="1"][layout-rows="2"]:focus-within .artifact-title-bar{opacity:1;pointer-events:auto}workspace-view{width:100%;flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}workspace-view [data-testid=empty-workspace]{margin:0;padding:1rem}television-app{width:100%;height:100%;display:grid;grid-template-rows:auto 1fr;grid-template-areas:"header" "main"}television-app>header{grid-area:header}television-app>main{grid-area:main;grid-row:1 / -1}body.electron television-app>header{-webkit-app-region:drag;padding-left:80px;border-bottom:1px solid var(--color-border)}header{display:flex;align-items:center;justify-content:space-between;height:34px;padding:0 12px;flex-shrink:0;-webkit-user-select:none;user-select:none}television-app>header>nav{display:flex;align-items:center;gap:8px;min-width:0}workspace-picker,workspace-picker [trigger],button[variant=toolbar],.settings-server-remove-button,.settings-submit-button,.settings-cancel-button,.settings-connect-button,.settings-field input{-webkit-app-region:no-drag}workspace-picker dropdown-menu::part(panel){min-width:18rem}workspace-picker [trigger],workspace-picker [trigger][data-dropdown-trigger]{min-width:0;padding:0;border:none;background:transparent;font-size:13px;font-weight:600}workspace-picker [trigger] .trigger-label{white-space:nowrap}dropdown-group{display:block;padding:4px 0}dropdown-label{display:block;padding:0 10px 4px;font-size:12px;color:color-mix(in srgb,currentColor 60%,transparent)}dropdown-item{display:block;padding:6px 10px;border-radius:4px;cursor:pointer}dropdown-item[selected]{background:color-mix(in srgb,var(--color-border) 70%,white)}dropdown-item[action]{color:color-mix(in srgb,currentColor 50%,transparent)}dropdown-item[danger]{color:#c74343}television-app>main{min-width:0;min-height:0;overflow:hidden;display:flex;flex-direction:column}television-app>main.auth-gate{display:flex;align-items:center;justify-content:center}.settings-panel{width:min(32rem,100%);display:flex;flex-direction:column;padding:20px;border:1px solid var(--color-border);border-radius:12px;background:var(--color-bg)}.workspace-modal,.auth-modal{width:min(24rem,100%);display:flex;flex-direction:column;padding:20px;border:1px solid var(--color-border);border-radius:12px;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}.workspace-form{display:flex;flex-direction:column;gap:12px}.workspace-form-actions{display:flex;gap:8px}.workspace-modal-title,.workspace-delete-copy,.workspace-delete-warning,.workspace-delete-error{margin:0}.workspace-delete-warning,.workspace-delete-error{font-size:13px}.workspace-delete-error{color:#c74343}.settings-section-title{margin:0}.settings-section,.settings-server-list,.settings-add-server-form{display:flex;flex-direction:column;gap:12px}.settings-form-actions{display:flex;gap:8px}.settings-card{padding:12px;border:1px solid var(--color-border);border-radius:8px}.settings-server{display:flex;align-items:center;justify-content:space-between;gap:12px}.settings-server-details{min-width:0}.settings-server-name{font-weight:600}.settings-server-url{font-size:13px;word-break:break-word;color:color-mix(in srgb,currentColor 70%,transparent)}.settings-server-remove-button,.settings-submit-button,.settings-cancel-button,.settings-connect-button{padding:8px 12px;border-radius:8px}.settings-field{display:flex;flex-direction:column;gap:6px}.settings-field input{width:100%;padding:8px 10px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-bg);color:inherit;font:inherit;box-sizing:border-box}.settings-submit-button,.settings-cancel-button,.settings-connect-button{align-self:flex-start}:root{--black: #000000;--white: #ffffff;--neutral-50: oklch(.985 .001 106.423);--neutral-100: oklch(.97 .001 106.424);--neutral-200: oklch(.923 .003 48.717);--neutral-300: oklch(.869 .005 56.366);--neutral-400: oklch(.709 .01 56.259);--neutral-500: oklch(.553 .013 58.071);--neutral-600: oklch(.444 .011 73.639);--neutral-700: oklch(.374 .01 67.558);--neutral-800: oklch(.268 .007 34.298);--neutral-900: oklch(.216 .006 56.043);--neutral-950: oklch(.147 .004 49.25)}dropdown-menu{position:relative;display:inline-block;color:inherit}dropdown-group{display:grid;gap:var(--space-4)}dropdown-label{display:block;padding:var(--space-4) var(--space-8);color:var(--color-text-muted);font:inherit;font-size:var(--text-sm);font-weight:600;letter-spacing:.04em;text-transform:uppercase}dropdown-divider{display:block;height:1px;margin:var(--space-4) 0;background:var(--color-border)}[data-dropdown-trigger],dropdown-item{color:inherit;font:inherit;line-height:1.2}[data-dropdown-trigger],dropdown-menu::part(trigger){display:inline-flex;align-items:center;gap:var(--space-8);margin:0;padding:.375rem .5rem;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text);box-shadow:none;cursor:pointer}[data-dropdown-trigger]:hover,dropdown-menu::part(trigger):hover{background:var(--color-interactive-hover)}dropdown-menu[open] [data-dropdown-trigger],dropdown-menu[open]::part(trigger){background:var(--color-interactive)}[data-dropdown-trigger-label],dropdown-menu::part(trigger-label){min-width:0}[data-dropdown-trigger-icon],dropdown-menu::part(trigger-icon){display:inline-flex;align-items:center;justify-content:center;flex:none}[data-dropdown-trigger]:focus-visible,dropdown-menu::part(trigger):focus-visible,dropdown-item:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px}dropdown-menu::part(panel){position:absolute;top:calc(100% + var(--space-4));left:0;z-index:var(--layer-popover);min-width:12rem;padding:var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text);box-shadow:var(--shadow-popover)}dropdown-item{display:block;margin:0;padding:.375rem .5rem;border-radius:var(--radius-sm);cursor:pointer;-webkit-user-select:none;user-select:none}dropdown-item:hover{background:var(--color-interactive-hover)}dropdown-item[selected]{background:var(--color-interactive)}panel-view{display:block}panel-view::part(panel){display:flex;flex-direction:column;gap:var(--space-16);color:var(--color-text)}panel-view::part(header){display:flex;align-items:center;justify-content:space-between;gap:var(--space-12)}panel-view::part(title-group){display:flex;align-items:center;gap:var(--space-8);min-width:0}panel-view::part(title){margin:0;font:inherit;font-size:var(--text-lg);font-weight:600;color:var(--color-text)}panel-view::part(button){display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;margin:0;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text);box-shadow:none;cursor:pointer}panel-view::part(button):hover{background:var(--color-interactive-hover)}panel-view::part(button):focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px}panel-view::part(icon){display:inline-flex;align-items:center;justify-content:center;flex:none}panel-view::part(back-icon){transform:rotate(90deg)}modal-overlay{color:inherit}modal-overlay::part(backdrop){position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--layer-modal);display:flex;align-items:center;justify-content:center;padding:var(--space-16);background:var(--color-overlay-backdrop)}*,*:before,*:after{box-sizing:border-box}:root{--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;--font-brand: var(--font-sans);--font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, monospace;--text-sm: 12px;--text-base: 14px;--text-lg: 16px;--leading-base: 1.5;--space-2: 2px;--space-4: 4px;--space-6: 6px;--space-8: 8px;--space-12: 12px;--space-16: 16px;--radius-sm: .375rem;--radius-md: .5rem;--layer-popover: 10;--layer-modal: 1000;--shadow-popover: 0 12px 32px rgb(0 0 0 / .14);--shadow-modal: 0 24px 64px rgb(0 0 0 / .2);--color-bg: var(--neutral-50);--color-bg-muted: var(--neutral-100);--color-surface: var(--white);--color-surface-muted: var(--neutral-100);--color-interactive: var(--neutral-200);--color-interactive-hover: var(--neutral-300);--color-border: var(--neutral-300);--color-border-muted: var(--neutral-200);--color-text: var(--neutral-900);--color-text-muted: var(--neutral-500);--color-link: inherit;--color-focus-ring: var(--neutral-500);--color-overlay-backdrop: rgb(0 0 0 / .5)}html,body{margin:0;padding:0;width:100%;height:100%}html{color-scheme:light}body{font-family:var(--font-sans);font-size:var(--text-base);line-height:var(--leading-base);color:var(--color-text);background:var(--color-bg)}a{text-underline-offset:.15em;text-decoration-thickness:.08em}button,input,textarea,select{font:inherit;color:inherit}a{color:var(--color-link)}code,pre{font-family:var(--font-mono)}h1,h2,h3,h4,h5,h6{color:var(--color-text)}[data-ui-icon]{display:inline-block;vertical-align:middle}button{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-6);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-bg);color:inherit;cursor:pointer}button:hover{background:var(--color-interactive)}button[variant=toolbar]{border:none;background:transparent;color:var(--color-text-muted)}button[size=sm]{min-height:26px;padding:var(--space-2) var(--space-6)}button[size=md]{min-height:32px;padding:var(--space-6) var(--space-12)}:root{--color-bg: var(--neutral-200);--color-border: var(--neutral-300)}
@@ -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-Ctq-tqkf.js"></script>
8
- <link rel="stylesheet" crossorigin href="./assets/index-W7D1rDld.css">
7
+ <script type="module" crossorigin src="./assets/index-BZ2x6hDr.js"></script>
8
+ <link rel="stylesheet" crossorigin href="./assets/index-C_dcmI6X.css">
9
9
  </head>
10
10
  <body></body>
11
11
  </html>
package/dist/cli.cjs CHANGED
@@ -59600,6 +59600,7 @@ var TelevisionClient = class {
59600
59600
  body: {
59601
59601
  title: input.title,
59602
59602
  content: input.content,
59603
+ type: input.type,
59603
59604
  workspaceID: input.workspaceID
59604
59605
  }
59605
59606
  });
@@ -74800,6 +74801,7 @@ function createTools(store) {
74800
74801
  type: "object",
74801
74802
  properties: {
74802
74803
  id: { type: "string" },
74804
+ type: { type: "string", enum: ["markdown", "html"] },
74803
74805
  title: { type: "string" },
74804
74806
  content: { type: "string" },
74805
74807
  workspaceID: { type: "string" }
@@ -74812,6 +74814,13 @@ function createTools(store) {
74812
74814
  const title = args.title;
74813
74815
  const content = args.content;
74814
74816
  let workspaceID = typeof args.workspaceID === "string" ? args.workspaceID : void 0;
74817
+ let artifactType;
74818
+ if (args.type !== void 0) {
74819
+ if (args.type !== "markdown" && args.type !== "html") {
74820
+ return { error: 'type must be "markdown" or "html"' };
74821
+ }
74822
+ artifactType = args.type;
74823
+ }
74815
74824
  if (typeof title !== "string" || typeof content !== "string" || id !== void 0 && typeof id !== "string" || workspaceID !== void 0 && typeof workspaceID !== "string") {
74816
74825
  return { error: "title and content must be strings" };
74817
74826
  }
@@ -74824,7 +74833,7 @@ function createTools(store) {
74824
74833
  }
74825
74834
  }
74826
74835
  try {
74827
- const artifact = store.createArtifact({ id, title, content, workspaceID });
74836
+ const artifact = store.createArtifact({ id, title, content, workspaceID, type: artifactType });
74828
74837
  return { artifact };
74829
74838
  } catch (error2) {
74830
74839
  return { error: error2 instanceof Error ? error2.message : "Failed to create artifact" };
@@ -75315,6 +75324,20 @@ function ulid3(seedTime, prng) {
75315
75324
 
75316
75325
  // src/server/workspace-store.ts
75317
75326
  var import_node_crypto2 = require("node:crypto");
75327
+
75328
+ // src/artifacts.ts
75329
+ var DEFAULT_ARTIFACT_TYPE = "markdown";
75330
+ function createArtifact(input) {
75331
+ const type = input.type ?? DEFAULT_ARTIFACT_TYPE;
75332
+ return {
75333
+ id: input.id ?? ulid3(),
75334
+ type,
75335
+ title: input.title,
75336
+ content: input.content
75337
+ };
75338
+ }
75339
+
75340
+ // src/server/workspace-store.ts
75318
75341
  var import_node_fs2 = require("node:fs");
75319
75342
  var import_node_path3 = __toESM(require("node:path"), 1);
75320
75343
 
@@ -75432,12 +75455,12 @@ var WorkspaceStore = class extends Emitter {
75432
75455
  throw new Error("workspaceID is required");
75433
75456
  }
75434
75457
  const workspace = this.requireWorkspace(input.workspaceID);
75435
- const artifact = {
75436
- id: input.id ?? ulid3(),
75437
- type: "markdown",
75458
+ const artifact = createArtifact({
75459
+ id: input.id,
75460
+ type: input.type,
75438
75461
  title: input.title,
75439
75462
  content: input.content
75440
- };
75463
+ });
75441
75464
  this.artifacts.set(artifact.id, artifact);
75442
75465
  workspace.layout.push(createLayoutCardRecord(artifact.id));
75443
75466
  this.persistArtifact(artifact);
@@ -75750,11 +75773,15 @@ function createProgram(env) {
75750
75773
  });
75751
75774
  });
75752
75775
  });
75753
- program2.command("create-artifact").description("Create an artifact in a workspace").requiredOption("--title <title>", "Artifact title").requiredOption("--content <content>", "Artifact content (markdown)").option("--workspace <id>", "Target workspace ID").option("--server <url>", "Server URL", DEFAULT_SERVER_URL).action(async (opts) => {
75776
+ program2.command("create-artifact").description("Create an artifact in a workspace").requiredOption("--title <title>", "Artifact title").requiredOption("--content <content>", "Artifact content").option("--type <type>", "Artifact type (markdown or html)", "markdown").option("--workspace <id>", "Target workspace ID").option("--server <url>", "Server URL", DEFAULT_SERVER_URL).action(async (opts) => {
75777
+ if (opts.type !== "markdown" && opts.type !== "html") {
75778
+ throw new Error("--type must be 'markdown' or 'html'");
75779
+ }
75754
75780
  const client = createAuthenticatedClient(opts.server);
75755
75781
  writeJSON(env.stdout, await client.createArtifact({
75756
75782
  title: opts.title,
75757
75783
  content: opts.content,
75784
+ type: opts.type,
75758
75785
  workspaceID: opts.workspace
75759
75786
  }));
75760
75787
  });
package/dist/electron.cjs CHANGED
@@ -71089,6 +71089,7 @@ function createTools(store) {
71089
71089
  type: "object",
71090
71090
  properties: {
71091
71091
  id: { type: "string" },
71092
+ type: { type: "string", enum: ["markdown", "html"] },
71092
71093
  title: { type: "string" },
71093
71094
  content: { type: "string" },
71094
71095
  workspaceID: { type: "string" }
@@ -71101,6 +71102,13 @@ function createTools(store) {
71101
71102
  const title = args.title;
71102
71103
  const content = args.content;
71103
71104
  let workspaceID = typeof args.workspaceID === "string" ? args.workspaceID : void 0;
71105
+ let artifactType;
71106
+ if (args.type !== void 0) {
71107
+ if (args.type !== "markdown" && args.type !== "html") {
71108
+ return { error: 'type must be "markdown" or "html"' };
71109
+ }
71110
+ artifactType = args.type;
71111
+ }
71104
71112
  if (typeof title !== "string" || typeof content !== "string" || id !== void 0 && typeof id !== "string" || workspaceID !== void 0 && typeof workspaceID !== "string") {
71105
71113
  return { error: "title and content must be strings" };
71106
71114
  }
@@ -71113,7 +71121,7 @@ function createTools(store) {
71113
71121
  }
71114
71122
  }
71115
71123
  try {
71116
- const artifact = store.createArtifact({ id, title, content, workspaceID });
71124
+ const artifact = store.createArtifact({ id, title, content, workspaceID, type: artifactType });
71117
71125
  return { artifact };
71118
71126
  } catch (error2) {
71119
71127
  return { error: error2 instanceof Error ? error2.message : "Failed to create artifact" };
@@ -71604,6 +71612,20 @@ function ulid3(seedTime, prng) {
71604
71612
 
71605
71613
  // src/server/workspace-store.ts
71606
71614
  var import_node_crypto2 = require("node:crypto");
71615
+
71616
+ // src/artifacts.ts
71617
+ var DEFAULT_ARTIFACT_TYPE = "markdown";
71618
+ function createArtifact(input) {
71619
+ const type = input.type ?? DEFAULT_ARTIFACT_TYPE;
71620
+ return {
71621
+ id: input.id ?? ulid3(),
71622
+ type,
71623
+ title: input.title,
71624
+ content: input.content
71625
+ };
71626
+ }
71627
+
71628
+ // src/server/workspace-store.ts
71607
71629
  var import_node_fs = require("node:fs");
71608
71630
  var import_node_path2 = __toESM(require("node:path"), 1);
71609
71631
 
@@ -71721,12 +71743,12 @@ var WorkspaceStore = class extends Emitter {
71721
71743
  throw new Error("workspaceID is required");
71722
71744
  }
71723
71745
  const workspace = this.requireWorkspace(input.workspaceID);
71724
- const artifact = {
71725
- id: input.id ?? ulid3(),
71726
- type: "markdown",
71746
+ const artifact = createArtifact({
71747
+ id: input.id,
71748
+ type: input.type,
71727
71749
  title: input.title,
71728
71750
  content: input.content
71729
- };
71751
+ });
71730
71752
  this.artifacts.set(artifact.id, artifact);
71731
71753
  workspace.layout.push(createLayoutCardRecord(artifact.id));
71732
71754
  this.persistArtifact(artifact);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telepath-computer/television",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "type": "module",
5
5
  "main": "dist/electron.cjs",
6
6
  "bin": {
@@ -13,8 +13,8 @@
13
13
  "dev": "npm run dev:server",
14
14
  "dev:electron": "scripts/dev-electron.sh",
15
15
  "dev:server": "scripts/dev-server.sh",
16
- "demo:layout": "vite --config vite.demo-layout.config.ts --host 127.0.0.1",
17
- "build": "npm run build:renderer && npm run build:cli && npm run build:electron",
16
+ "demo:layout": "vite --config config/vite.demo-layout.ts --host 127.0.0.1",
17
+ "build": "npm run build:artifact-runtime && npm run build:renderer && npm run build:cli && npm run build:electron",
18
18
  "prepack": "npm run build",
19
19
  "start": "npm run build && env -u ELECTRON_RUN_AS_NODE electron .",
20
20
  "lint": "eslint . --ext .ts --max-warnings=0",
@@ -27,7 +27,8 @@
27
27
  "test:all": "npm test && npm run test:e2e && npm run test:electron",
28
28
  "test:watch": "vitest",
29
29
  "verify": "npm run lint && npm run type-check && npm run test:all",
30
- "build:renderer": "vite build",
30
+ "build:artifact-runtime": "vite build --config config/vite.artifact-runtime.ts",
31
+ "build:renderer": "vite build --config config/vite.app.ts",
31
32
  "build:electron": "esbuild src/electron/index.ts --bundle --platform=node --target=node18 --format=cjs --outfile=dist/electron.cjs --external:electron --external:@rupertsworld/electron-ipc",
32
33
  "build:cli": "esbuild src/cli/index.ts --bundle --platform=node --target=node18 --format=cjs --banner:js=\"#!/usr/bin/env node\" --outfile=dist/cli.cjs"
33
34
  },