wizards 0.3.8 → 0.4.0
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/README.md +28 -14
- package/apps/runtime/dist/auth/account.js +36 -4
- package/apps/runtime/dist/auth/device.js +101 -0
- package/apps/runtime/dist/auth/index.js +4 -4
- package/apps/runtime/dist/cli/account.js +289 -0
- package/apps/runtime/dist/cli/install-env.js +33 -0
- package/apps/runtime/dist/cli/main.js +17 -3
- package/apps/runtime/dist/cli/menu.js +19 -5
- package/apps/runtime/dist/cli/setup.js +9 -16
- package/apps/runtime/dist/cli/status.js +4 -1
- package/apps/runtime/dist/cli/ui.js +14 -0
- package/apps/runtime/dist/docs/user/command-line.md +3 -2
- package/apps/runtime/dist/docs/user/create-account.md +47 -0
- package/apps/runtime/dist/docs/user/first-start.md +9 -1
- package/apps/runtime/dist/docs/user/index.md +16 -12
- package/apps/runtime/dist/docs/user/install.md +3 -1
- package/apps/runtime/dist/docs/user/local-only.md +38 -0
- package/apps/runtime/dist/docs/user/meta.json +3 -1
- package/apps/runtime/dist/docs/user/models.md +3 -2
- package/apps/runtime/dist/manage.js +12 -0
- package/apps/runtime/dist/plugins/pro.js +16 -16
- package/apps/runtime/dist/routes/studio.js +41 -2
- package/apps/runtime/dist/services/cloud.js +10 -10
- package/apps/runtime/dist/services/onboarding.js +152 -0
- package/apps/web/dist/assets/{AboutDialog-ClV4gNiW.js → AboutDialog-CPQiN7H9.js} +1 -1
- package/apps/web/dist/assets/{ChangelogDialog-DsSEkayM.js → ChangelogDialog-DynvQuuR.js} +1 -1
- package/apps/web/dist/assets/{ChatView-BdYCnDLk.js → ChatView-CKo_9IZD.js} +1 -1
- package/apps/web/dist/assets/{EditorPage-7PZzkNBT.js → EditorPage-CDIJXC4T.js} +1 -1
- package/apps/web/dist/assets/{FlowPreview-C_x5Kc2j.js → FlowPreview-BZLnG7GV.js} +1 -1
- package/apps/web/dist/assets/{Harness-CvvtSTZC.js → Harness-CNh3nbB_.js} +1 -1
- package/apps/web/dist/assets/{NewWizardChannels-g1qCd_tQ.js → NewWizardChannels-C1Ss9UMY.js} +1 -1
- package/apps/web/dist/assets/{NewWizardPage-B3hswj5r.js → NewWizardPage-2qLAbvDL.js} +1 -1
- package/apps/web/dist/assets/OnboardingPage-C1FJwEsT.js +1 -0
- package/apps/web/dist/assets/{ProjectPage-CFDncRxT.js → ProjectPage-CGuLUuOs.js} +1 -1
- package/apps/web/dist/assets/{PublicRunner-C9N5r-sT.js → PublicRunner-BKw1lOW4.js} +1 -1
- package/apps/web/dist/assets/{ReadOnly-C1UcqOlS.js → ReadOnly-DTjv2Jzm.js} +1 -1
- package/apps/web/dist/assets/{RunDrawer-B8YzFvgz.js → RunDrawer-D1I5xqVf.js} +1 -1
- package/apps/web/dist/assets/{RunnerView-ii-PP5c-.js → RunnerView-BPPmlv9z.js} +1 -1
- package/apps/web/dist/assets/{SettingsPage-ClEP5Q0t.js → SettingsPage-zbomQfGy.js} +1 -1
- package/apps/web/dist/assets/SetupPage-D3F7M6Pz.js +1 -0
- package/apps/web/dist/assets/{SharePage-BV2S0g84.js → SharePage-BY49IJgT.js} +1 -1
- package/apps/web/dist/assets/changelog-DYZC2E6q.js +1 -0
- package/apps/web/dist/assets/{circle-alert-D-Q6DK7b.js → circle-alert-CVOH4wAv.js} +1 -1
- package/apps/web/dist/assets/{esm-CTna4iL0.js → esm-BfXdeWaI.js} +1 -1
- package/apps/web/dist/assets/index-B9xVkr2X.css +1 -0
- package/apps/web/dist/assets/index-BH0PYgov.js +15 -0
- package/apps/web/dist/assets/{lock-DwGN_KOC.js → lock-DHBh62LA.js} +1 -1
- package/apps/web/dist/assets/{phone-XIVIe17d.js → phone-Bt1cyWpY.js} +1 -1
- package/apps/web/dist/assets/{settings-menu-JuSRq6NP.js → settings-menu-ace1vI3i.js} +1 -1
- package/apps/web/dist/assets/{ui-DrjXmHdO.js → ui-D2SqIZeQ.js} +1 -1
- package/apps/web/dist/assets/{upload-CDxTpAqx.js → upload-CCEq88l4.js} +1 -1
- package/apps/web/dist/index.html +3 -3
- package/apps/web/dist/install.sh +17 -7
- package/apps/web/dist/mcp/flow.html +2 -2
- package/package.json +1 -1
- package/apps/web/dist/assets/SetupPage-CDFzo6LT.js +0 -1
- package/apps/web/dist/assets/changelog-wZI-UaUi.js +0 -1
- package/apps/web/dist/assets/index-DUjJx-uk.css +0 -1
- package/apps/web/dist/assets/index-DnQgOKOQ.js +0 -15
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import "./install-env.js";
|
|
2
|
+
import { accountCommand } from "./account.js";
|
|
1
3
|
import { apps, connectCommand } from "./connect.js";
|
|
2
4
|
import { featuresCommand } from "./features.js";
|
|
3
5
|
import { command, layout, packageVersion, readInstallNote } from "./home.js";
|
|
6
|
+
import { startedIn } from "./install-env.js";
|
|
4
7
|
import { CLIENTS, nodeIsCurrent } from "./machine.js";
|
|
5
8
|
import { mcp } from "./mcp.js";
|
|
6
9
|
import { menu } from "./menu.js";
|
|
@@ -16,7 +19,9 @@ const HELP = `engenty wizards ${packageVersion()}
|
|
|
16
19
|
(needs a terminal)
|
|
17
20
|
${command()} start start it and open the studio; it runs in this terminal until Ctrl-C
|
|
18
21
|
${command()} studio open the studio; when it does not run, it starts as a service first
|
|
19
|
-
${command()} setup guided setup: an AI client to think with, ffmpeg,
|
|
22
|
+
${command()} setup guided setup: your engenty account, an AI client to think with, ffmpeg,
|
|
23
|
+
start at login
|
|
24
|
+
${command()} account your engenty account: status, sign-in, sign-out
|
|
20
25
|
${command()} open let this browser into the running studio (--print: only show the link)
|
|
21
26
|
${command()} status what is installed and what runs
|
|
22
27
|
${command()} doctor status, and what is wrong
|
|
@@ -37,6 +42,7 @@ const HELP = `engenty wizards ${packageVersion()}
|
|
|
37
42
|
checked on import
|
|
38
43
|
|
|
39
44
|
--yes, -y ask nothing and install nothing optional
|
|
45
|
+
--local setup without an account: nothing leaves this computer
|
|
40
46
|
--client <name> install this AI client without asking: ${CLIENTS.map((c) => c.id).join(", ")}
|
|
41
47
|
--no-open start without opening the browser
|
|
42
48
|
--service, -s start as a service, detached from this terminal; \`${command()} stop\` stops it
|
|
@@ -52,6 +58,7 @@ function parse(argv) {
|
|
|
52
58
|
paths: [],
|
|
53
59
|
json: false,
|
|
54
60
|
yes: false,
|
|
61
|
+
local: false,
|
|
55
62
|
open: true,
|
|
56
63
|
service: false,
|
|
57
64
|
print: false,
|
|
@@ -62,6 +69,9 @@ function parse(argv) {
|
|
|
62
69
|
if (arg === "--yes" || arg === "-y") {
|
|
63
70
|
args.yes = true;
|
|
64
71
|
}
|
|
72
|
+
else if (arg === "--local") {
|
|
73
|
+
args.local = true;
|
|
74
|
+
}
|
|
65
75
|
else if (arg === "--no-open") {
|
|
66
76
|
args.open = false;
|
|
67
77
|
}
|
|
@@ -90,7 +100,7 @@ function parse(argv) {
|
|
|
90
100
|
else if (arg.startsWith("-")) {
|
|
91
101
|
return `Unknown option ${arg}.`;
|
|
92
102
|
}
|
|
93
|
-
else if (
|
|
103
|
+
else if (["autostart", "logs", "account"].includes(args.command) && !args.value) {
|
|
94
104
|
args.value = arg;
|
|
95
105
|
}
|
|
96
106
|
else if (["connect", "disconnect", "features"].includes(args.command)) {
|
|
@@ -115,7 +125,7 @@ async function main(argv) {
|
|
|
115
125
|
return 2;
|
|
116
126
|
}
|
|
117
127
|
const paths = layout();
|
|
118
|
-
const setupOptions = { yes: args.yes, clients: args.clients };
|
|
128
|
+
const setupOptions = { yes: args.yes, clients: args.clients, local: args.local };
|
|
119
129
|
if (!args.command) {
|
|
120
130
|
// Without a command: the menu, which needs a terminal. Starting is \`start\`.
|
|
121
131
|
if (args.service || !args.open || args.print) {
|
|
@@ -168,6 +178,8 @@ async function main(argv) {
|
|
|
168
178
|
return update(paths);
|
|
169
179
|
case "autostart":
|
|
170
180
|
return autostart(paths, args.value);
|
|
181
|
+
case "account":
|
|
182
|
+
return accountCommand(paths, args.value, { yes: args.yes });
|
|
171
183
|
case "connect":
|
|
172
184
|
case "disconnect":
|
|
173
185
|
return connectCommand(paths, args.apps, args.command === "disconnect");
|
|
@@ -176,6 +188,8 @@ async function main(argv) {
|
|
|
176
188
|
case "features":
|
|
177
189
|
return featuresCommand(args.apps);
|
|
178
190
|
case "validate":
|
|
191
|
+
// The paths are the person's, from where they typed the command (install-env.ts).
|
|
192
|
+
process.chdir(startedIn);
|
|
179
193
|
return validateCommand(args.paths, args.json);
|
|
180
194
|
default:
|
|
181
195
|
console.error(`Unknown command ${args.command}.\n\n${HELP}`);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as p from "@clack/prompts";
|
|
2
2
|
import { updateStatus } from "../update.js";
|
|
3
|
+
import { accountMenu, accountState, describeAccount } from "./account.js";
|
|
3
4
|
import { autostartState, setAutostart } from "./autostart.js";
|
|
4
5
|
import { connectCommand } from "./connect.js";
|
|
5
6
|
import { command, packageVersion, readInstallNote } from "./home.js";
|
|
@@ -10,14 +11,15 @@ import { badge, cyan, dim, no, ok } from "./ui.js";
|
|
|
10
11
|
import { update } from "./update.js";
|
|
11
12
|
async function look(paths) {
|
|
12
13
|
const { dataDir } = settings(paths);
|
|
13
|
-
const [running, atLogin, release] = await Promise.all([
|
|
14
|
+
const [running, atLogin, release, account] = await Promise.all([
|
|
14
15
|
runningRuntime(dataDir),
|
|
15
16
|
autostartState(paths),
|
|
16
17
|
updateStatus().catch(() => null),
|
|
18
|
+
accountState(),
|
|
17
19
|
]);
|
|
18
|
-
return { running, atLogin, release };
|
|
20
|
+
return { running, atLogin, release, account };
|
|
19
21
|
}
|
|
20
|
-
function report({ running, atLogin, release }) {
|
|
22
|
+
function report({ running, atLogin, release, account }) {
|
|
21
23
|
const lines = [
|
|
22
24
|
running
|
|
23
25
|
? `${ok} running ${cyan(running.url)} ${dim(`pid ${running.pid}, since ${new Date(running.startedAt).toLocaleString()}`)}`
|
|
@@ -26,12 +28,15 @@ function report({ running, atLogin, release }) {
|
|
|
26
28
|
if (!("unavailable" in atLogin)) {
|
|
27
29
|
lines.push(atLogin.on ? `${ok} starts at login` : `${no} does not start at login`);
|
|
28
30
|
}
|
|
31
|
+
lines.push(account.kind === "linked"
|
|
32
|
+
? `${ok} signed in as ${describeAccount(account)}`
|
|
33
|
+
: `${no} ${describeAccount(account)}`);
|
|
29
34
|
if (release?.newer) {
|
|
30
35
|
lines.push(`${cyan("↑")} ${release.latest} is out ${dim(`(you have ${release.current})`)}`);
|
|
31
36
|
}
|
|
32
37
|
return lines.join("\n");
|
|
33
38
|
}
|
|
34
|
-
function choices({ running, atLogin, release }) {
|
|
39
|
+
function choices({ running, atLogin, release, account }) {
|
|
35
40
|
const options = running
|
|
36
41
|
? [
|
|
37
42
|
{ value: "open", label: "Open the studio", hint: "in your browser" },
|
|
@@ -58,7 +63,13 @@ function choices({ running, atLogin, release }) {
|
|
|
58
63
|
hint: atLogin.on ? "starts at login" : "does not start at login",
|
|
59
64
|
});
|
|
60
65
|
}
|
|
61
|
-
options.push({ value: "connect", label: "Connect AI apps", hint: "your wizards in Claude, Cursor, Codex …" }, {
|
|
66
|
+
options.push({ value: "connect", label: "Connect AI apps", hint: "your wizards in Claude, Cursor, Codex …" }, {
|
|
67
|
+
value: "account",
|
|
68
|
+
label: "Account",
|
|
69
|
+
hint: account.kind === "linked"
|
|
70
|
+
? `signed in as ${describeAccount(account)}`
|
|
71
|
+
: describeAccount(account),
|
|
72
|
+
}, { value: "status", label: "Status", hint: "what is installed, and what is wrong" }, { value: "setup", label: "Setup", hint: "account, AI client, ffmpeg, start at login" }, { value: "help", label: "Help", hint: "every command" }, { value: "quit", label: "Quit", hint: running ? "it keeps running" : undefined });
|
|
62
73
|
return options;
|
|
63
74
|
}
|
|
64
75
|
/** How the service runs: whether it starts at login. Esc goes back to the menu. */
|
|
@@ -153,6 +164,9 @@ export async function menu(paths, setupOptions, help) {
|
|
|
153
164
|
case "connect":
|
|
154
165
|
await connectCommand(paths, [], false);
|
|
155
166
|
break;
|
|
167
|
+
case "account":
|
|
168
|
+
await accountMenu(paths);
|
|
169
|
+
break;
|
|
156
170
|
case "status":
|
|
157
171
|
await status(paths, true);
|
|
158
172
|
break;
|
|
@@ -2,6 +2,7 @@ import { appendFileSync, existsSync, readFileSync } from "node:fs";
|
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { delimiter, join } from "node:path";
|
|
4
4
|
import * as p from "@clack/prompts";
|
|
5
|
+
import { accountStep } from "./account.js";
|
|
5
6
|
import { autostartState, setAutostart } from "./autostart.js";
|
|
6
7
|
import { installClient, installCommand } from "./clients.js";
|
|
7
8
|
import { appStates, connectApps } from "./connect.js";
|
|
@@ -9,21 +10,9 @@ import { runLogged } from "./exec.js";
|
|
|
9
10
|
import { command, installedByScript, isCheckout, packageVersion, readInstallNote, writeInstallNote, } from "./home.js";
|
|
10
11
|
import { CLIENTS, detectClients, findChrome, findFfmpeg, findOnPath, suggestedClient, vendorApp, } from "./machine.js";
|
|
11
12
|
import { runningRuntime, settings } from "./start.js";
|
|
12
|
-
import { badge, cyan, dim, tilde } from "./ui.js";
|
|
13
|
+
import { badge, busy, cyan, dim, tilde } from "./ui.js";
|
|
13
14
|
/** The studio as an app of its own: Chrome (or Edge) installs it from the page. */
|
|
14
15
|
const CHROME_APP = "Tip: in Chrome or Edge the studio installs as an app, in a window of its own with its own icon. The studio offers it at the top; or use the install icon in the address bar.";
|
|
15
|
-
/** A spinner on a terminal; where nobody watches, only what came of it. */
|
|
16
|
-
function busy(message) {
|
|
17
|
-
if (!process.stdout.isTTY) {
|
|
18
|
-
return { stop: (text) => p.log.step(text), fail: (text) => p.log.warn(text) };
|
|
19
|
-
}
|
|
20
|
-
const spinner = p.spinner();
|
|
21
|
-
spinner.start(message);
|
|
22
|
-
return {
|
|
23
|
-
stop: (text) => spinner.stop(text),
|
|
24
|
-
fail: (text) => spinner.error(text),
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
16
|
function cancelled(value) {
|
|
28
17
|
if (p.isCancel(value)) {
|
|
29
18
|
p.cancel(`Setup stopped. Run it again with \`${command()} setup\`.`);
|
|
@@ -298,9 +287,10 @@ async function howToUse(paths) {
|
|
|
298
287
|
].join("\n"));
|
|
299
288
|
}
|
|
300
289
|
/**
|
|
301
|
-
* The guided setup:
|
|
302
|
-
* to think with, ffmpeg, starting at login. It
|
|
303
|
-
* start, stop and check it. Returns false
|
|
290
|
+
* The guided setup: the account this computer joins, then what this machine has, what is
|
|
291
|
+
* missing, and what to install — an AI client to think with, ffmpeg, starting at login. It
|
|
292
|
+
* starts nothing; it ends with what runs and how to start, stop and check it. Returns false
|
|
293
|
+
* when it was stopped.
|
|
304
294
|
*/
|
|
305
295
|
export async function setup(paths, options) {
|
|
306
296
|
const interactive = !options.yes && Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
@@ -310,6 +300,9 @@ export async function setup(paths, options) {
|
|
|
310
300
|
`Install ${tilde(paths.home)}${installedByScript() ? "" : dim(` (data; the code runs from ${isCheckout() ? "this checkout" : "npm"})`)}`,
|
|
311
301
|
`Node ${process.version} ${dim(tilde(process.execPath))}`,
|
|
312
302
|
].join("\n"));
|
|
303
|
+
if ((await accountStep(paths, options, interactive)) === "cancelled") {
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
313
306
|
if ((await clientsStep(paths, options, interactive)) === "cancelled") {
|
|
314
307
|
return false;
|
|
315
308
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { accessSync, constants, existsSync, mkdirSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
+
import { accountState, describeAccount } from "./account.js";
|
|
3
4
|
import { autostartState, setAutostart } from "./autostart.js";
|
|
4
5
|
import { installedByScript, isCheckout, packageRoot, packageVersion } from "./home.js";
|
|
5
6
|
import { detectClients, findChrome, findFfmpeg, nodeIsCurrent } from "./machine.js";
|
|
@@ -11,11 +12,12 @@ import { bad, badge, cyan, dim, no, ok, tilde } from "./ui.js";
|
|
|
11
12
|
*/
|
|
12
13
|
export async function status(paths, checks) {
|
|
13
14
|
const { dataDir } = settings(paths);
|
|
14
|
-
const [running, clients, ffmpeg, atLogin] = await Promise.all([
|
|
15
|
+
const [running, clients, ffmpeg, atLogin, account] = await Promise.all([
|
|
15
16
|
runningRuntime(dataDir),
|
|
16
17
|
detectClients(paths),
|
|
17
18
|
findFfmpeg(),
|
|
18
19
|
autostartState(paths),
|
|
20
|
+
accountState(),
|
|
19
21
|
]);
|
|
20
22
|
const chrome = findChrome();
|
|
21
23
|
const row = (label, value) => console.log(` ${label.padEnd(9)} ${value}`);
|
|
@@ -31,6 +33,7 @@ export async function status(paths, checks) {
|
|
|
31
33
|
if (!("unavailable" in atLogin)) {
|
|
32
34
|
row("At login", atLogin.on ? `${ok} starts ${dim(`(${atLogin.how})`)}` : `${no} does not start`);
|
|
33
35
|
}
|
|
36
|
+
row("Account", `${account.kind === "linked" ? ok : no} ${describeAccount(account)}`);
|
|
34
37
|
for (const { client, path, version } of clients) {
|
|
35
38
|
row(client.name.split(" ")[0], path ? `${ok} ${version} ${dim(tilde(path))}` : `${no} not installed`);
|
|
36
39
|
}
|
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
import { homedir } from "node:os";
|
|
2
2
|
import { styleText } from "node:util";
|
|
3
|
+
import * as p from "@clack/prompts";
|
|
3
4
|
const colours = Boolean(process.stdout.isTTY) && !process.env.NO_COLOR;
|
|
4
5
|
/** The name on engenty's orange. */
|
|
5
6
|
export const badge = (text) => colours ? `\x1b[48;2;224;83;27m\x1b[97m\x1b[1m ${text} \x1b[0m` : text;
|
|
6
7
|
export const dim = (text) => styleText("dim", text);
|
|
8
|
+
export const bold = (text) => styleText("bold", text);
|
|
7
9
|
export const cyan = (text) => styleText("cyan", text);
|
|
8
10
|
export const ok = styleText("green", "✓");
|
|
9
11
|
export const no = styleText("yellow", "–");
|
|
10
12
|
export const bad = styleText("red", "✗");
|
|
11
13
|
/** A path as the person would write it. */
|
|
12
14
|
export const tilde = (path) => path.startsWith(homedir()) ? `~${path.slice(homedir().length)}` : path;
|
|
15
|
+
/** A spinner on a terminal; where nobody watches, only what came of it. */
|
|
16
|
+
export function busy(message) {
|
|
17
|
+
if (!process.stdout.isTTY) {
|
|
18
|
+
return { stop: (text) => p.log.step(text), fail: (text) => p.log.warn(text) };
|
|
19
|
+
}
|
|
20
|
+
const spinner = p.spinner();
|
|
21
|
+
spinner.start(message);
|
|
22
|
+
return {
|
|
23
|
+
stop: (text) => spinner.stop(text),
|
|
24
|
+
fail: (text) => spinner.error(text),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Command line
|
|
3
3
|
description: The wizards command — start, setup, status, update — and the install's settings file.
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.4
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
## Commands
|
|
@@ -11,7 +11,8 @@ version: 0.3.2
|
|
|
11
11
|
| `wizards` | What runs, and a menu: open the studio, restart and stop while it runs, "Start as service" or "Start here" (in this terminal) while it does not; update, which restarts what runs into the new version; "Service settings" (start at login); connect AI apps, status, setup, help. The first time, the setup runs first. Needs a terminal |
|
|
12
12
|
| `wizards start` | Starts it and opens the studio. It runs in that terminal; Ctrl-C stops it. The first time, the setup runs first |
|
|
13
13
|
| `wizards studio` | Opens the studio in your browser. When it does not run, it starts as a service first |
|
|
14
|
-
| `wizards setup` | The guided setup again: an AI client to think with, the browser and ffmpeg, start at login, your AI apps |
|
|
14
|
+
| `wizards setup` | The guided setup again: your account, an AI client to think with, the browser and ffmpeg, start at login, your AI apps. `--local` leaves the account out ([Local only](./local-only.md)) |
|
|
15
|
+
| `wizards account` | How the install stands to your account: signed in as whom, which team, the credits. `sign-in` shows a code and opens the browser; `sign-out` disconnects the install |
|
|
15
16
|
| `wizards open` | Lets this browser into the running studio. `--print` only shows the link; it works once, within a minute |
|
|
16
17
|
| `wizards status` | What is installed and what runs, with the browser the app uses for PDF, PNG and websites |
|
|
17
18
|
| `wizards doctor` | Status, and what is wrong |
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Create an account
|
|
3
|
+
description: Your team, its space and your wizards live in your account at engenty.ai. Sign up with an invitation code, answer four questions, build.
|
|
4
|
+
version: 0.3.4
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
engenty wizards is in a closed beta: a new account needs an invitation code. "Get started" on
|
|
8
|
+
[engenty.ai](https://engenty.ai) takes your e-mail and puts you on the list; the code comes by
|
|
9
|
+
mail as soon as a seat is free. With a code, the same step opens the sign-up.
|
|
10
|
+
|
|
11
|
+
## Sign up
|
|
12
|
+
|
|
13
|
+
1. Type the code at [account.engenty.ai/sign-up](https://account.engenty.ai/sign-up). The link
|
|
14
|
+
in the invitation mail has it filled in.
|
|
15
|
+
2. Sign in with Google, GitHub, or a link by mail. There is no password.
|
|
16
|
+
3. The studio opens at [engenty.ai/studio](https://engenty.ai/studio).
|
|
17
|
+
|
|
18
|
+
Your account is a **team**: it holds your credits, your spaces and, on the Team plan, your
|
|
19
|
+
colleagues. It starts with credits, some of which end on a date; the account pages at
|
|
20
|
+
[account.engenty.ai](https://account.engenty.ai) show them.
|
|
21
|
+
|
|
22
|
+
## The first visit
|
|
23
|
+
|
|
24
|
+
The studio asks four things, one per page. Each but the first can be skipped and changed later.
|
|
25
|
+
|
|
26
|
+
| Page | Asks | Goes to |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| Who you are | What your team is called: your company, your club, or just your name | The team's name at account.engenty.ai |
|
|
29
|
+
| About you & your brand | Your website. engenty reads your name, what you do, your logo and colours from it; or you write a line about yourself | [Space → Info & brand](./space.md#info--brand) |
|
|
30
|
+
| Knowledge | Documents the wizards may look things up in: price lists, your terms, an FAQ | [Space → Knowledge](./space.md#knowledge) |
|
|
31
|
+
| Your space | Nothing: it explains the space that holds all of this, "Meine Wizards" | — |
|
|
32
|
+
|
|
33
|
+
Then "Build your first wizard" opens the studio's start: describe a task in a sentence, or pick
|
|
34
|
+
a template. See [Build a wizard](./build-a-wizard.md).
|
|
35
|
+
|
|
36
|
+
## What the cloud does
|
|
37
|
+
|
|
38
|
+
- Wizards built here run behind a link that works day and night, on the team's credits.
|
|
39
|
+
- Share links, the tag for your website, QR codes and the channels of [Test and share](./test-and-share.md) work as on an install.
|
|
40
|
+
- What the wizards think with is the team's: [Models and account](./models.md).
|
|
41
|
+
|
|
42
|
+
## Also on your computer
|
|
43
|
+
|
|
44
|
+
The same account works on your own computer: [install](./install.md) engenty wizards there and
|
|
45
|
+
sign in during the setup. It thinks with your Claude, ChatGPT, Gemini or Cursor subscription,
|
|
46
|
+
reads your local files and browses for you; what you publish there runs in the cloud too, behind
|
|
47
|
+
the same links. "Also on your computer" on the studio's start page mails you the command.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: First start
|
|
3
3
|
description: Choose what engenty wizards thinks with. The studio opens once a test call works.
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.4
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
The first page of the studio is the setup, "Choose your Engine". It asks one thing: what should
|
|
@@ -9,10 +9,18 @@ engenty think with?
|
|
|
9
9
|
|
|
10
10
|

|
|
11
11
|
|
|
12
|
+
## Your account
|
|
13
|
+
|
|
14
|
+
Above the engines stands your account: signed in during the [install](./install.md), it shows
|
|
15
|
+
your name, your team and your credits, and your team's space is on this computer. Not signed in
|
|
16
|
+
yet, "Sign in" opens your browser for it; an install that is [local only](./local-only.md)
|
|
17
|
+
shows nothing here.
|
|
18
|
+
|
|
12
19
|
## Choose your engine
|
|
13
20
|
|
|
14
21
|
| Engine | Runs on | Needs |
|
|
15
22
|
|---|---|---|
|
|
23
|
+
| engenty credits | Your account's credits, like in the cloud | An account signed in. Shown only then |
|
|
16
24
|
| Claude Code | Your Claude subscription | The client installed and signed in |
|
|
17
25
|
| Codex | Your ChatGPT subscription | The client installed and signed in |
|
|
18
26
|
| Gemini CLI | Your Google account | The client installed and signed in |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: User Guide
|
|
3
3
|
description: Install engenty wizards, build a wizard, run and share it.
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.4
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
engenty wizards turns something you do again and again into a wizard: pages that ask what it
|
|
@@ -17,30 +17,34 @@ briefing, an invoice, a quote, a damage report.
|
|
|
17
17
|
| **Describe it** | Say in plain words what the wizard should do. The assistant builds the flow; you see it as a diagram and change any step. |
|
|
18
18
|
| **Let AI steps work** | They research the web, write, draw images, render video, read PDFs, scans and mails, build documents and dashboards, and write into other services. Anything that changes an account asks first. |
|
|
19
19
|
| **Share a link** | Anyone runs the wizard in a browser, on a phone too. Results download as PDF, Word, HTML, Markdown, PNG, MP4, MP3, CSV, Excel or JSON, or go out as a link. |
|
|
20
|
-
| **
|
|
20
|
+
| **In the cloud, or on your computer** | Sign up and build in the browser; links run on your team's credits. Or install it on your computer: it thinks with Codex, Claude Code, Gemini CLI or Cursor Agent on your own subscription, with your own keys, or with a local model, and your files stay with you. |
|
|
21
21
|
|
|
22
22
|
## Where to start
|
|
23
23
|
|
|
24
|
-
1. [
|
|
25
|
-
2.
|
|
26
|
-
3. [
|
|
27
|
-
4. [
|
|
24
|
+
1. [Create an account](./create-account.md) at engenty.ai, with an invitation code.
|
|
25
|
+
2. [Build a wizard](./build-a-wizard.md) from a sentence or a template.
|
|
26
|
+
3. [Test and share](./test-and-share.md) it.
|
|
27
|
+
4. Also on your computer: [install](./install.md) it there, signed in to the same account, and at the [first start](./first-start.md) choose what it thinks with.
|
|
28
28
|
5. Use it from your [AI apps](./ai-apps.md): Claude Desktop, Cursor, Codex and others.
|
|
29
29
|
|
|
30
30
|
## Words used here
|
|
31
31
|
|
|
32
32
|
| Word | Means |
|
|
33
33
|
|---|---|
|
|
34
|
-
|
|
|
34
|
+
| Account | You, signed in at engenty.ai with Google, GitHub or a link by mail |
|
|
35
|
+
| Team | What the sign-up creates: it holds your credits, your spaces and, on the Team plan, your colleagues |
|
|
36
|
+
| Space | What all your wizards know and produce: name, logo, colours, facts, documents, data, results. A team's first one is "Meine Wizards" |
|
|
37
|
+
| Studio | Where you build wizards: engenty.ai/studio, or `/studio` of your install |
|
|
35
38
|
| Wizard | A flow of steps a person walks through on a link |
|
|
36
39
|
| Step | One part of the flow: a page, an AI step, a review, the result |
|
|
37
40
|
| Run | One person going through a wizard once |
|
|
38
|
-
| Space | What all your wizards know: name, logo, colours, facts, documents |
|
|
39
41
|
| Model class | The kind of model a step needs. Which model serves a class is a setting, not part of the wizard |
|
|
40
42
|
|
|
41
43
|
## Two places it runs
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
Your team, its space and your wizards live in your account. engenty.ai is the cloud: you build
|
|
46
|
+
there in the browser, and links run day and night on the team's credits. Your computer can join:
|
|
47
|
+
[install](./install.md) engenty wizards there, signed in to the same account, and it thinks with
|
|
48
|
+
the AI clients and keys on that machine; what you publish there runs in the cloud as well
|
|
49
|
+
([Test and share](./test-and-share.md#in-the-cloud)). An install without an account is
|
|
50
|
+
[local only](./local-only.md).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Install
|
|
3
3
|
description: One command on macOS or Linux. It brings its own Node.js and asks for no password.
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.4
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
## Install
|
|
@@ -18,6 +18,7 @@ command into `~/.local/bin` and then walks you through the rest:
|
|
|
18
18
|
|
|
19
19
|
| Step | What it does |
|
|
20
20
|
|---|---|
|
|
21
|
+
| Your engenty account | Shows a code and opens the browser for the sign-in at account.engenty.ai (no account yet? the page takes an invitation code). Signed in, your team's space comes down to this computer, and what you publish here runs in the cloud too. "Later" skips it: `wizards account sign-in` does it any time. `--local` leaves the account out altogether: [Local only](./local-only.md) |
|
|
21
22
|
| Something to think with | Looks for Codex, Claude Code, Gemini CLI and Cursor Agent and offers to install the ones that are missing. It proposes the one whose app (ChatGPT, Claude, Cursor) is on your Mac first, as that subscription is most likely yours already. You can also use an API key, [Ollama](https://ollama.com) or, on a Mac with Apple silicon and macOS 26, Apple Intelligence: the studio's [first page](./first-start.md) offers them |
|
|
22
23
|
| A browser and ffmpeg | Names the browser for PDF and PNG exports and steps on websites: the first of Chrome, Edge and Chromium it finds (on a Mac also Brave). The app uses that one; [`CHROME_PATH`](./command-line.md#settings) picks another. Says whether there is ffmpeg for MP4 videos of animated widgets; with Homebrew it offers to install it |
|
|
23
24
|
| Start at login (optional) | engenty wizards starts in the background when you log in, so links and AI clients always reach it. A LaunchAgent on a Mac, a systemd user service on Linux |
|
|
@@ -37,6 +38,7 @@ You install once; from then on you use the `wizards` command.
|
|
|
37
38
|
| `wizards stop` | Stops it. Your data is kept |
|
|
38
39
|
| `wizards status` | Whether it runs, and where |
|
|
39
40
|
| `wizards restart` | Stops it and starts it again |
|
|
41
|
+
| `wizards account` | How the install stands to your account; `sign-in` and `sign-out` |
|
|
40
42
|
| `wizards` | A menu with all of it |
|
|
41
43
|
|
|
42
44
|
The studio is at
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Local only
|
|
3
|
+
description: An install without an account. Nothing leaves the computer; links answer on it only. The flag, what it means, and how to connect an account later.
|
|
4
|
+
version: 0.3.4
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
An install normally signs in to your account during the setup: your team's space comes down to
|
|
8
|
+
the computer, and what you publish runs in the cloud too. An install can also stay alone.
|
|
9
|
+
|
|
10
|
+
## The flag
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
curl -fsSL https://engenty.ai/install.sh | bash -s -- --local
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
`--local` skips the account step of the setup and switches the account off for this install.
|
|
17
|
+
On an install that is there already: `wizards setup --local`.
|
|
18
|
+
|
|
19
|
+
## What it means
|
|
20
|
+
|
|
21
|
+
- No account, nothing leaves this computer. Wizards, the space and results stay in
|
|
22
|
+
`~/.engenty/wizards/data` ([Your data](./data.md)).
|
|
23
|
+
- Links answer on this computer only: `http://localhost:24368/w/…`. For others to open them,
|
|
24
|
+
run it [on a server](./server.md) of your own.
|
|
25
|
+
- It thinks with your AI clients, your own keys, Ollama or Apple Intelligence
|
|
26
|
+
([First start](./first-start.md)). Without an account, video and voice need a key of your own.
|
|
27
|
+
- The studio shows no account surfaces: no sign-in offer, no credits, no cloud copy. The feature
|
|
28
|
+
switch `account` is off in the install's `.features` file; `wizards features` lists it.
|
|
29
|
+
|
|
30
|
+
## Connect an account later
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
wizards account sign-in
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The command shows a code and opens the browser for the sign-in; afterwards the install is
|
|
37
|
+
connected, and the switch is on again. `wizards account` says how the install stands,
|
|
38
|
+
`wizards account sign-out` disconnects it. Settings → Account in the studio does the same.
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"title": "User Guide",
|
|
3
|
-
"description": "
|
|
3
|
+
"description": "Create an account, build a wizard, run and share it, install it on your computer.",
|
|
4
4
|
"root": true,
|
|
5
5
|
"icon": "LifeBuoy",
|
|
6
6
|
"pages": [
|
|
7
7
|
"index",
|
|
8
8
|
"---Start---",
|
|
9
|
+
"create-account",
|
|
9
10
|
"install",
|
|
10
11
|
"first-start",
|
|
11
12
|
"---Wizards---",
|
|
@@ -24,6 +25,7 @@
|
|
|
24
25
|
"---Your install---",
|
|
25
26
|
"command-line",
|
|
26
27
|
"data",
|
|
28
|
+
"local-only",
|
|
27
29
|
"server",
|
|
28
30
|
"troubleshooting"
|
|
29
31
|
]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Models and account
|
|
3
3
|
description: Who does what your wizards ask for — an installed AI client, your own API keys, a local model, or credits.
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.4
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
Settings → Models decides who does what your wizards ask for. On your computer it is yours; on
|
|
@@ -125,7 +125,8 @@ Text & reasoning) picks what builds your wizards in the editor's conversation:
|
|
|
125
125
|
|
|
126
126
|
## Account
|
|
127
127
|
|
|
128
|
-
An account
|
|
128
|
+
An install normally signs in to your account during the setup ([Install](./install.md)); one
|
|
129
|
+
without an account is [local only](./local-only.md). With an account you
|
|
129
130
|
|
|
130
131
|
- use credits instead of your own keys (the editor's note about missing models says so where
|
|
131
132
|
text, image or video models are missing),
|
|
@@ -145,6 +145,18 @@ export async function tenantInfo(id, fresh = false) {
|
|
|
145
145
|
export function forgetTenant(id) {
|
|
146
146
|
tenants.delete(id);
|
|
147
147
|
}
|
|
148
|
+
/** Renames the team at the Manage-App; what it answers is the tenant as it stands now. */
|
|
149
|
+
export async function renameTenant(id, name) {
|
|
150
|
+
const value = await call("PATCH", `/v1/tenants/${encodeURIComponent(id)}`, {
|
|
151
|
+
name,
|
|
152
|
+
});
|
|
153
|
+
tenants.set(id, { at: Date.now(), value });
|
|
154
|
+
return value;
|
|
155
|
+
}
|
|
156
|
+
/** The Manage-App mails the install command and the first steps to one of the team's people. */
|
|
157
|
+
export function installMail(email, lang) {
|
|
158
|
+
return call("POST", "/v1/install-mail", { email, lang });
|
|
159
|
+
}
|
|
148
160
|
export function verifyKey(key) {
|
|
149
161
|
return call("POST", "/v1/keys/verify", { key });
|
|
150
162
|
}
|