From e5df068a602975be8c4ec4811eeb7e2398724606 Mon Sep 17 00:00:00 2001 From: Aditya-thesys Date: Mon, 22 Jun 2026 20:42:51 +0530 Subject: [PATCH 01/16] feat(cli): add openui-cloud template, cloud auth, telemetry Rename create-chat-app -> create-app, generalized to scaffold both openui-chat and openui-cloud. The openui-cloud template wires managed conversations + artifacts via @openuidev/thesys (AgentInterface + openuiCloud storage + fct_ token). Cloud auth offers OAuth sign-in / paste-key / skip and mints an org API key. Monorepo-only dep protocols (workspace:/catalog:/file:/link:) are de-vendored to published versions on scaffold. Adds anonymous opt-out PostHog telemetry and a --no-install flag. --- packages/openui-cli/package.json | 5 +- .../openui-cli/scripts/build-templates.js | 30 +- packages/openui-cli/src/auth/authenticator.ts | 148 ++++++++++ packages/openui-cli/src/auth/mint.ts | 92 ++++++ .../openui-cli/src/commands/create-app.ts | 233 +++++++++++++++ .../src/commands/create-chat-app.ts | 155 ---------- packages/openui-cli/src/commands/generate.ts | 19 +- packages/openui-cli/src/index.ts | 115 ++++++-- packages/openui-cli/src/lib/telemetry.ts | 147 ++++++++++ .../src/templates/openui-cloud/.gitignore | 48 ++++ .../src/templates/openui-cloud/README.md | 51 ++++ .../templates/openui-cloud/eslint.config.mjs | 18 ++ .../src/templates/openui-cloud/next.config.ts | 7 + .../src/templates/openui-cloud/package.json | 58 ++++ .../templates/openui-cloud/postcss.config.mjs | 7 + .../openui-cloud/src/app/api/chat/route.ts | 96 +++++++ .../src/app/api/frontend-token/route.ts | 37 +++ .../openui-cloud/src/app/globals.css | 23 ++ .../templates/openui-cloud/src/app/layout.tsx | 22 ++ .../templates/openui-cloud/src/app/page.tsx | 74 +++++ .../src/hooks/use-system-theme.tsx | 41 +++ .../artifactRenderers/ArtifactComponents.tsx | 127 +++++++++ .../src/lib/artifactRenderers/index.tsx | 58 ++++ .../lib/artifactRenderers/parseArtifact.ts | 268 ++++++++++++++++++ .../src/templates/openui-cloud/src/lib/env.ts | 12 + .../src/lib/thesys/artifactStorage.ts | 70 +++++ .../src/lib/thesys/frontendTokenManager.ts | 109 +++++++ .../openui-cloud/src/lib/thesys/index.ts | 101 +++++++ .../openui-cloud/src/lib/thesys/items.ts | 65 +++++ .../src/lib/thesys/threadStorage.ts | 109 +++++++ .../openui-cloud/src/lib/thesys/wire.ts | 82 ++++++ .../src/templates/openui-cloud/tsconfig.json | 34 +++ 32 files changed, 2264 insertions(+), 197 deletions(-) create mode 100644 packages/openui-cli/src/auth/authenticator.ts create mode 100644 packages/openui-cli/src/auth/mint.ts create mode 100644 packages/openui-cli/src/commands/create-app.ts delete mode 100644 packages/openui-cli/src/commands/create-chat-app.ts create mode 100644 packages/openui-cli/src/lib/telemetry.ts create mode 100644 packages/openui-cli/src/templates/openui-cloud/.gitignore create mode 100644 packages/openui-cli/src/templates/openui-cloud/README.md create mode 100644 packages/openui-cli/src/templates/openui-cloud/eslint.config.mjs create mode 100644 packages/openui-cli/src/templates/openui-cloud/next.config.ts create mode 100644 packages/openui-cli/src/templates/openui-cloud/package.json create mode 100644 packages/openui-cli/src/templates/openui-cloud/postcss.config.mjs create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/app/api/chat/route.ts create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/app/api/frontend-token/route.ts create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/app/globals.css create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/app/layout.tsx create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/app/page.tsx create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/hooks/use-system-theme.tsx create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/lib/artifactRenderers/ArtifactComponents.tsx create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/lib/artifactRenderers/index.tsx create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/lib/artifactRenderers/parseArtifact.ts create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/lib/env.ts create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/lib/thesys/artifactStorage.ts create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/lib/thesys/frontendTokenManager.ts create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/lib/thesys/index.ts create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/lib/thesys/items.ts create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/lib/thesys/threadStorage.ts create mode 100644 packages/openui-cli/src/templates/openui-cloud/src/lib/thesys/wire.ts create mode 100644 packages/openui-cli/src/templates/openui-cloud/tsconfig.json diff --git a/packages/openui-cli/package.json b/packages/openui-cli/package.json index 12be5876f..d24a5465d 100644 --- a/packages/openui-cli/package.json +++ b/packages/openui-cli/package.json @@ -53,6 +53,9 @@ "@inquirer/core": "^11.1.5", "@inquirer/prompts": "^8.3.0", "commander": "^14.0.3", - "esbuild": "^0.25.10" + "esbuild": "^0.25.10", + "open": "^10.1.0", + "openid-client": "^6.1.7", + "posthog-node": "^5.35.6" } } diff --git a/packages/openui-cli/scripts/build-templates.js b/packages/openui-cli/scripts/build-templates.js index f12d9b083..03f5b7126 100644 --- a/packages/openui-cli/scripts/build-templates.js +++ b/packages/openui-cli/scripts/build-templates.js @@ -2,22 +2,22 @@ const fs = require("node:fs"); const path = require("node:path"); const { rimrafSync } = require("rimraf"); -const srcDir = path.resolve(__dirname, "../src/templates/openui-chat"); -const destDir = path.resolve(__dirname, "../dist/templates/openui-chat"); +const TEMPLATES = ["openui-chat", "openui-cloud"]; -if (!fs.existsSync(srcDir)) { - throw new Error(`Template source directory not found: ${srcDir}`); -} +for (const template of TEMPLATES) { + const srcDir = path.resolve(__dirname, "../src/templates", template); + const destDir = path.resolve(__dirname, "../dist/templates", template); + + if (!fs.existsSync(srcDir)) { + throw new Error(`Template source directory not found: ${srcDir}`); + } -// Equivalent to: rm -rf dist/templates/openui-chat -rimrafSync(destDir); + // Equivalent to: rm -rf dist/templates/