@alexkroman1/aai-cli 5.3.0 → 5.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 +51 -0
- package/dist/{_bundler-DFS4xxqE.mjs → _bundler-Cjaxa2wi.mjs} +1 -1
- package/dist/{_dev-server-BBUWo0sb.mjs → _dev-server-cigzayJe.mjs} +2 -2
- package/dist/{_init-DU-sXH6S.mjs → _init-_G8l4lh2.mjs} +2 -55
- package/dist/_templates-DW9CvuDN.mjs +69 -0
- package/dist/_templates.d.ts +6 -0
- package/dist/{build-Xq1xxoSg.mjs → build-D_PgQOD4.mjs} +1 -1
- package/dist/cli.mjs +35 -10
- package/dist/{client-bundler-BWDkUeEP.mjs → client-bundler-yiWoXrgb.mjs} +3 -0
- package/dist/client-bundler.d.ts +9 -0
- package/dist/client-bundler.mjs +1 -1
- package/dist/{deploy-Ci0X1gp2.mjs → deploy-C0VLnnJe.mjs} +1 -1
- package/dist/{dev-g7sGt8qX.mjs → dev-2oUsvgRX.mjs} +1 -1
- package/dist/{init-BjeK8crW.mjs → init-BkW9BuZF.mjs} +2 -2
- package/dist/scaffold/CLAUDE.md +154 -100
- package/dist/scaffold/package.json +3 -3
- package/dist/templates/dispatch-center/agent.test.ts +3 -3
- package/dist/templates/dispatch-center/agent.ts +2 -2
- package/dist/templates/dispatch-center/tools/incident_add_note.ts +1 -1
- package/dist/templates/dispatch-center/tools/incident_create.ts +1 -1
- package/dist/templates/dispatch-center/tools/incident_escalate.ts +1 -1
- package/dist/templates/dispatch-center/tools/incident_get.ts +1 -1
- package/dist/templates/dispatch-center/tools/incident_triage.ts +1 -1
- package/dist/templates/dispatch-center/tools/incident_update_status.ts +1 -1
- package/dist/templates/dispatch-center/tools/ops_protocols.ts +1 -1
- package/dist/templates/dispatch-center/tools/ops_run_scenario.ts +1 -1
- package/dist/templates/dispatch-center/tools/resources_dispatch.ts +1 -1
- package/dist/templates/dispatch-center/tools/resources_get_available.ts +1 -1
- package/dist/templates/dispatch-center/tools/resources_update_status.ts +1 -1
- package/dist/templates/embedded-assets/agent.ts +1 -1
- package/dist/templates/health-assistant/agent.ts +2 -2
- package/dist/templates/infocom-adventure/agent.ts +7 -7
- package/dist/templates/math-buddy/agent.ts +1 -1
- package/dist/templates/night-owl/agent.ts +1 -1
- package/dist/templates/pizza-ordering/agent.test.ts +13 -11
- package/dist/templates/pizza-ordering/agent.ts +4 -4
- package/dist/templates/simple/agent.test.ts +18 -0
- package/dist/templates/simple/agent.ts +2 -0
- package/dist/templates/solo-rpg/agent.test.ts +2 -2
- package/dist/templates/solo-rpg/tools/action_roll.ts +1 -1
- package/dist/templates/solo-rpg/tools/load_game.ts +1 -1
- package/dist/templates/solo-rpg/tools/oracle.ts +1 -1
- package/dist/templates/solo-rpg/tools/save_game.ts +1 -1
- package/dist/templates/solo-rpg/tools/setup_character.ts +1 -1
- package/dist/templates/solo-rpg/tools/update_state.ts +1 -1
- package/dist/typecheck.d.ts +18 -0
- package/dist/typecheck.mjs +8 -0
- package/dist/worker-bundler.d.ts +9 -1
- package/dist/worker-bundler.mjs +8 -0
- package/package.json +3 -3
package/README.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# @alexkroman1/aai-cli
|
|
2
|
+
|
|
3
|
+
The `aai` command — scaffold, run, test, and deploy aai voice agents.
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
npm i -g @alexkroman1/aai-cli # or: npx @alexkroman1/aai-cli@latest
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Commands
|
|
10
|
+
|
|
11
|
+
| Command | What it does |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| `aai init [dir]` | Scaffold a new agent project (`--template <name>`, `--yes`) |
|
|
14
|
+
| `aai templates` | List the shipped project templates |
|
|
15
|
+
| `aai dev` | Local dev server: loads `agent.ts`, rebuilds on change, serves the browser client (`--port`) |
|
|
16
|
+
| `aai test` | Run the project's vitest suite |
|
|
17
|
+
| `aai build` | Bundle without deploying (type-checks first; `--skipTypecheck` opts out) |
|
|
18
|
+
| `aai deploy` | Bundle and deploy to the platform (uploads `.env` as agent secrets) |
|
|
19
|
+
| `aai delete` | Remove a deployed agent |
|
|
20
|
+
| `aai secret put\|delete\|list` | Manage a deployed agent's secrets |
|
|
21
|
+
| `aai storage status\|enable\|disable` | Manage the agent's opt-in SQL database (`ctx.db`) |
|
|
22
|
+
|
|
23
|
+
Every command accepts `--json` for machine-readable output (auto-detected
|
|
24
|
+
when stdout is not a TTY). `aai <command> --help` shows flags.
|
|
25
|
+
|
|
26
|
+
## Typical flow
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
aai init my-agent --template pizza-ordering
|
|
30
|
+
cd my-agent
|
|
31
|
+
# put ASSEMBLYAI_API_KEY=... in .env
|
|
32
|
+
aai dev # talk to it at the printed URL
|
|
33
|
+
aai deploy # ship it; .env values become the agent's secrets
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Deploys type-check the project, preflight required credentials (a missing
|
|
37
|
+
provider key fails the deploy instead of the first call), and print the
|
|
38
|
+
agent's public URL.
|
|
39
|
+
|
|
40
|
+
## Notes
|
|
41
|
+
|
|
42
|
+
- A bare `aai` in a project directory offers to deploy (TTY-confirmed);
|
|
43
|
+
outside one it runs `init`.
|
|
44
|
+
- `--server <url>` targets a self-hosted platform; the origin is remembered
|
|
45
|
+
in your user config after explicit approval.
|
|
46
|
+
- The API key is stored `0600` in your user config dir (`AAI_CONFIG_DIR`
|
|
47
|
+
overrides the location).
|
|
48
|
+
|
|
49
|
+
## Documentation
|
|
50
|
+
|
|
51
|
+
SDK API reference: <https://alexkroman.github.io/agent/>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { u as validateAgentExport } from "./_utils-Ch0J4s6a.mjs";
|
|
3
|
-
import { t as buildClient } from "./client-bundler-
|
|
3
|
+
import { t as buildClient } from "./client-bundler-yiWoXrgb.mjs";
|
|
4
4
|
import { buildWorker } from "./worker-bundler.mjs";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { pathToFileURL } from "node:url";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { n as log } from "./_ui-8kOEB-JH.mjs";
|
|
3
3
|
import { a as errorMessage, r as errorCode } from "./_utils-Ch0J4s6a.mjs";
|
|
4
|
-
import { n as fallbackHtmlPlugin } from "./client-bundler-
|
|
4
|
+
import { n as fallbackHtmlPlugin } from "./client-bundler-yiWoXrgb.mjs";
|
|
5
5
|
import { buildWorker } from "./worker-bundler.mjs";
|
|
6
|
-
import { n as createWorkerEvaluator } from "./_bundler-
|
|
6
|
+
import { n as createWorkerEvaluator } from "./_bundler-Cjaxa2wi.mjs";
|
|
7
7
|
import { n as ensureApiKey } from "./_config-D3F9km8X.mjs";
|
|
8
8
|
import { t as resolveServerEnv } from "./_server-common-CnaP_Urf.mjs";
|
|
9
9
|
import { createRequire } from "node:module";
|
|
@@ -1,62 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
2
|
+
import { c as readJson, d as writeJson, s as isEexist } from "./_utils-Ch0J4s6a.mjs";
|
|
3
3
|
import { r as isDevMode, t as getMonorepoRoot } from "./_agent-D8zBb3M5.mjs";
|
|
4
|
-
import {
|
|
4
|
+
import { REPO_URL, downloadAndMergeTemplate } from "./_templates-DW9CvuDN.mjs";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import fs from "node:fs/promises";
|
|
7
|
-
const REPO_URL = `https://github.com/alexkroman/agent`;
|
|
8
|
-
/**
|
|
9
|
-
* Templates as shipped inside the published tarball, copied into `dist/` by
|
|
10
|
-
* `bundle-templates.mjs` at build time — so this resolves to `dist/` for a
|
|
11
|
-
* published CLI and to the (template-less) package root when running source
|
|
12
|
-
* in the monorepo, where the branch above wins.
|
|
13
|
-
*
|
|
14
|
-
* They used to be fetched at `init` time with giget from
|
|
15
|
-
* `github:alexkroman/agent/packages/aai-templates#main`. That required a
|
|
16
|
-
* network for every `init`, and pinned templates to `main` regardless of the
|
|
17
|
-
* CLI version the user had installed, so a template written against a newer
|
|
18
|
-
* SDK could land in a project resolving an older one. Bundling pins the two
|
|
19
|
-
* together by construction. It also puts the templates inside the studio's
|
|
20
|
-
* guest sandbox, which has the CLI in its baked toolchain but no way to fetch
|
|
21
|
-
* anything from GitHub.
|
|
22
|
-
*/
|
|
23
|
-
function bundledTemplatesDir() {
|
|
24
|
-
return import.meta.dirname;
|
|
25
|
-
}
|
|
26
|
-
/** Resolve the templates root — env override, then monorepo, then bundled. */
|
|
27
|
-
function resolveTemplatesDir() {
|
|
28
|
-
const override = process.env.AAI_TEMPLATES_DIR;
|
|
29
|
-
if (override) return override;
|
|
30
|
-
const monorepoRoot = getMonorepoRoot();
|
|
31
|
-
if (monorepoRoot) return path.join(monorepoRoot, "packages", "aai-templates");
|
|
32
|
-
return bundledTemplatesDir();
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Copy a template into targetDir, merging scaffold files underneath.
|
|
36
|
-
*/
|
|
37
|
-
async function downloadAndMergeTemplate(template, targetDir) {
|
|
38
|
-
const root = resolveTemplatesDir();
|
|
39
|
-
const templatesDir = path.join(root, "templates");
|
|
40
|
-
let available;
|
|
41
|
-
try {
|
|
42
|
-
available = await fs.readdir(templatesDir, { withFileTypes: true });
|
|
43
|
-
} catch (err) {
|
|
44
|
-
throw new Error(`Templates directory is missing or unreadable at ${templatesDir} (incomplete @alexkroman1/aai-cli install?): ${errorMessage(err)}`, { cause: err });
|
|
45
|
-
}
|
|
46
|
-
const names = available.filter((e) => e.isDirectory()).map((e) => e.name);
|
|
47
|
-
if (!names.includes(template)) throw new Error(`Unknown template "${template}". Available templates: ${names.join(", ")}`);
|
|
48
|
-
await fs.cp(path.join(templatesDir, template), targetDir, {
|
|
49
|
-
recursive: true,
|
|
50
|
-
force: true
|
|
51
|
-
});
|
|
52
|
-
const scaffoldDir = path.join(root, "scaffold");
|
|
53
|
-
if (existsSync(scaffoldDir)) await fs.cp(scaffoldDir, targetDir, {
|
|
54
|
-
recursive: true,
|
|
55
|
-
force: false,
|
|
56
|
-
errorOnExist: false
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
//#endregion
|
|
60
7
|
//#region _init.ts
|
|
61
8
|
function readmeContent(slug) {
|
|
62
9
|
return `# ${slug}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { a as errorMessage } from "./_utils-Ch0J4s6a.mjs";
|
|
3
|
+
import { t as getMonorepoRoot } from "./_agent-D8zBb3M5.mjs";
|
|
4
|
+
import { existsSync } from "node:fs";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import fs from "node:fs/promises";
|
|
7
|
+
const REPO_URL = `https://github.com/alexkroman/agent`;
|
|
8
|
+
/**
|
|
9
|
+
* Templates as shipped inside the published tarball, copied into `dist/` by
|
|
10
|
+
* `bundle-templates.mjs` at build time — so this resolves to `dist/` for a
|
|
11
|
+
* published CLI and to the (template-less) package root when running source
|
|
12
|
+
* in the monorepo, where the branch above wins.
|
|
13
|
+
*
|
|
14
|
+
* They used to be fetched at `init` time with giget from
|
|
15
|
+
* `github:alexkroman/agent/packages/aai-templates#main`. That required a
|
|
16
|
+
* network for every `init`, and pinned templates to `main` regardless of the
|
|
17
|
+
* CLI version the user had installed, so a template written against a newer
|
|
18
|
+
* SDK could land in a project resolving an older one. Bundling pins the two
|
|
19
|
+
* together by construction. It also puts the templates inside the studio's
|
|
20
|
+
* guest sandbox, which has the CLI in its baked toolchain but no way to fetch
|
|
21
|
+
* anything from GitHub.
|
|
22
|
+
*/
|
|
23
|
+
function bundledTemplatesDir() {
|
|
24
|
+
return import.meta.dirname;
|
|
25
|
+
}
|
|
26
|
+
/** Resolve the templates root — env override, then monorepo, then bundled. */
|
|
27
|
+
function resolveTemplatesDir() {
|
|
28
|
+
const override = process.env.AAI_TEMPLATES_DIR;
|
|
29
|
+
if (override) return override;
|
|
30
|
+
const monorepoRoot = getMonorepoRoot();
|
|
31
|
+
if (monorepoRoot) return path.join(monorepoRoot, "packages", "aai-templates");
|
|
32
|
+
return bundledTemplatesDir();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* List the shipped template names (sorted). Backs `aai templates` and the
|
|
36
|
+
* unknown-template error, so the discoverable list and the validated list
|
|
37
|
+
* can never drift.
|
|
38
|
+
*/
|
|
39
|
+
async function listTemplates(root = resolveTemplatesDir()) {
|
|
40
|
+
const templatesDir = path.join(root, "templates");
|
|
41
|
+
let available;
|
|
42
|
+
try {
|
|
43
|
+
available = await fs.readdir(templatesDir, { withFileTypes: true });
|
|
44
|
+
} catch (err) {
|
|
45
|
+
throw new Error(`Templates directory is missing or unreadable at ${templatesDir} (incomplete @alexkroman1/aai-cli install?): ${errorMessage(err)}`, { cause: err });
|
|
46
|
+
}
|
|
47
|
+
return available.filter((e) => e.isDirectory()).map((e) => e.name).sort();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Copy a template into targetDir, merging scaffold files underneath.
|
|
51
|
+
*/
|
|
52
|
+
async function downloadAndMergeTemplate(template, targetDir) {
|
|
53
|
+
const root = resolveTemplatesDir();
|
|
54
|
+
const templatesDir = path.join(root, "templates");
|
|
55
|
+
const names = await listTemplates(root);
|
|
56
|
+
if (!names.includes(template)) throw new Error(`Unknown template "${template}". Available templates: ${names.join(", ")}`);
|
|
57
|
+
await fs.cp(path.join(templatesDir, template), targetDir, {
|
|
58
|
+
recursive: true,
|
|
59
|
+
force: true
|
|
60
|
+
});
|
|
61
|
+
const scaffoldDir = path.join(root, "scaffold");
|
|
62
|
+
if (existsSync(scaffoldDir)) await fs.cp(scaffoldDir, targetDir, {
|
|
63
|
+
recursive: true,
|
|
64
|
+
force: false,
|
|
65
|
+
errorOnExist: false
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
69
|
+
export { REPO_URL, downloadAndMergeTemplate, listTemplates };
|
package/dist/_templates.d.ts
CHANGED
|
@@ -15,6 +15,12 @@ export declare const REPO_URL = "https://github.com/alexkroman/agent";
|
|
|
15
15
|
* anything from GitHub.
|
|
16
16
|
*/
|
|
17
17
|
export declare function bundledTemplatesDir(): string;
|
|
18
|
+
/**
|
|
19
|
+
* List the shipped template names (sorted). Backs `aai templates` and the
|
|
20
|
+
* unknown-template error, so the discoverable list and the validated list
|
|
21
|
+
* can never drift.
|
|
22
|
+
*/
|
|
23
|
+
export declare function listTemplates(root?: string): Promise<string[]>;
|
|
18
24
|
/**
|
|
19
25
|
* Copy a template into targetDir, merging scaffold files underneath.
|
|
20
26
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { n as log, o as CliError, u as ok } from "./_ui-8kOEB-JH.mjs";
|
|
3
|
-
import { r as evalWorkerBundle, t as buildAgentBundle } from "./_bundler-
|
|
3
|
+
import { r as evalWorkerBundle, t as buildAgentBundle } from "./_bundler-Cjaxa2wi.mjs";
|
|
4
4
|
import { t as assertTypechecks } from "./_typecheck-gate-9IHWDnl1.mjs";
|
|
5
5
|
import { classifyVitestError, runVitest } from "./test-3Gq4pqH_.mjs";
|
|
6
6
|
//#region build.ts
|
package/dist/cli.mjs
CHANGED
|
@@ -68,7 +68,10 @@ async function runCommand(args, fn) {
|
|
|
68
68
|
} catch (err) {
|
|
69
69
|
const code = err instanceof CliError ? err.code : "command_failed";
|
|
70
70
|
const hint = err instanceof CliError ? err.hint : void 0;
|
|
71
|
-
if (mode === "human")
|
|
71
|
+
if (mode === "human") {
|
|
72
|
+
log.error(errorMessage(err));
|
|
73
|
+
if (hint) log.info(hint);
|
|
74
|
+
}
|
|
72
75
|
result = fail(code, errorMessage(err), hint);
|
|
73
76
|
}
|
|
74
77
|
if (mode === "json") await writeLine(`${JSON.stringify(result)}\n`);
|
|
@@ -93,7 +96,7 @@ const init = defineCommand({
|
|
|
93
96
|
template: {
|
|
94
97
|
type: "string",
|
|
95
98
|
alias: "t",
|
|
96
|
-
description: "Template to use (
|
|
99
|
+
description: "Template to use (run `aai templates` for the list)"
|
|
97
100
|
},
|
|
98
101
|
server: sharedArgs.server,
|
|
99
102
|
yes: sharedArgs.yes,
|
|
@@ -105,7 +108,7 @@ const init = defineCommand({
|
|
|
105
108
|
},
|
|
106
109
|
async run({ args }) {
|
|
107
110
|
await runCommand(args, async (mode) => {
|
|
108
|
-
const { executeInit } = await import("./init-
|
|
111
|
+
const { executeInit } = await import("./init-BkW9BuZF.mjs");
|
|
109
112
|
return executeInit({
|
|
110
113
|
dir: args.dir,
|
|
111
114
|
force: args.force,
|
|
@@ -134,7 +137,7 @@ const dev = defineCommand({
|
|
|
134
137
|
async run({ args }) {
|
|
135
138
|
await runCommand(args, async () => {
|
|
136
139
|
const cwd = await setup({ agent: true });
|
|
137
|
-
const { executeDev } = await import("./dev-
|
|
140
|
+
const { executeDev } = await import("./dev-2oUsvgRX.mjs");
|
|
138
141
|
return executeDev({
|
|
139
142
|
cwd,
|
|
140
143
|
port: args.port
|
|
@@ -175,7 +178,7 @@ const build = defineCommand({
|
|
|
175
178
|
async run({ args }) {
|
|
176
179
|
await runCommand(args, async () => {
|
|
177
180
|
const cwd = await setup({ agent: true });
|
|
178
|
-
const { executeBuild } = await import("./build-
|
|
181
|
+
const { executeBuild } = await import("./build-D_PgQOD4.mjs");
|
|
179
182
|
return executeBuild({
|
|
180
183
|
cwd,
|
|
181
184
|
skipTests: args.skipTests,
|
|
@@ -204,7 +207,7 @@ const deploy = defineCommand({
|
|
|
204
207
|
async run({ args }) {
|
|
205
208
|
await runCommand(args, async () => {
|
|
206
209
|
const cwd = await setup({ agent: true });
|
|
207
|
-
const { executeDeploy } = await import("./deploy-
|
|
210
|
+
const { executeDeploy } = await import("./deploy-C0VLnnJe.mjs");
|
|
208
211
|
return executeDeploy({
|
|
209
212
|
cwd,
|
|
210
213
|
server: args.server,
|
|
@@ -318,7 +321,7 @@ const storageDir = {
|
|
|
318
321
|
const storage = defineCommand({
|
|
319
322
|
meta: {
|
|
320
323
|
name: "storage",
|
|
321
|
-
description: "Manage the agent's database
|
|
324
|
+
description: "Manage the agent's app database"
|
|
322
325
|
},
|
|
323
326
|
subCommands: {
|
|
324
327
|
status: defineCommand({
|
|
@@ -341,7 +344,7 @@ const storage = defineCommand({
|
|
|
341
344
|
enable: defineCommand({
|
|
342
345
|
meta: {
|
|
343
346
|
name: "enable",
|
|
344
|
-
description: "Enable the agent's database
|
|
347
|
+
description: "Enable the agent's app database"
|
|
345
348
|
},
|
|
346
349
|
args: {
|
|
347
350
|
dir: storageDir,
|
|
@@ -358,7 +361,7 @@ const storage = defineCommand({
|
|
|
358
361
|
disable: defineCommand({
|
|
359
362
|
meta: {
|
|
360
363
|
name: "disable",
|
|
361
|
-
description: "Disable storage
|
|
364
|
+
description: "Disable storage and DROP the database schema with all its data"
|
|
362
365
|
},
|
|
363
366
|
args: {
|
|
364
367
|
dir: storageDir,
|
|
@@ -382,6 +385,27 @@ const storage = defineCommand({
|
|
|
382
385
|
})
|
|
383
386
|
}
|
|
384
387
|
});
|
|
388
|
+
const templates = defineCommand({
|
|
389
|
+
meta: {
|
|
390
|
+
name: "templates",
|
|
391
|
+
description: "List available project templates"
|
|
392
|
+
},
|
|
393
|
+
args: { json: sharedArgs.json },
|
|
394
|
+
async run({ args }) {
|
|
395
|
+
await runCommand(args, async (mode) => {
|
|
396
|
+
const { listTemplates } = await import("./_templates-DW9CvuDN.mjs");
|
|
397
|
+
const names = await listTemplates();
|
|
398
|
+
if (mode === "human") {
|
|
399
|
+
for (const name of names) log.message(name);
|
|
400
|
+
log.info("Scaffold one with `aai init --template <name>`.");
|
|
401
|
+
}
|
|
402
|
+
return {
|
|
403
|
+
ok: true,
|
|
404
|
+
data: { templates: names }
|
|
405
|
+
};
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
});
|
|
385
409
|
const mainCommand = defineCommand({
|
|
386
410
|
meta: {
|
|
387
411
|
name: "aai",
|
|
@@ -396,7 +420,8 @@ const mainCommand = defineCommand({
|
|
|
396
420
|
deploy,
|
|
397
421
|
delete: del,
|
|
398
422
|
secret,
|
|
399
|
-
storage
|
|
423
|
+
storage,
|
|
424
|
+
templates
|
|
400
425
|
}
|
|
401
426
|
});
|
|
402
427
|
if (process.env.VITEST !== "true") {
|
|
@@ -95,6 +95,9 @@ const DEDUPED_PEERS = ["react", "react-dom"];
|
|
|
95
95
|
* Build the client SPA with Vite if `client.tsx` exists.
|
|
96
96
|
* Returns a map of relative file paths to string contents for deploy,
|
|
97
97
|
* or `{}` when the project has no `client.tsx`.
|
|
98
|
+
*
|
|
99
|
+
* @internal — build hook for aai-server/the studio; not a supported public
|
|
100
|
+
* API and not covered by semver.
|
|
98
101
|
*/
|
|
99
102
|
async function buildClient(cwd, opts = {}) {
|
|
100
103
|
if (!await fileExists(path.join(cwd, "client.tsx"))) return {};
|
package/dist/client-bundler.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { type PluginOption } from "vite";
|
|
2
|
+
/**
|
|
3
|
+
* Options for client SPA bundling.
|
|
4
|
+
*
|
|
5
|
+
* @internal — build hook for aai-server/the studio; not a supported public
|
|
6
|
+
* API and not covered by semver.
|
|
7
|
+
*/
|
|
2
8
|
export type BuildClientOptions = {
|
|
3
9
|
/**
|
|
4
10
|
* Plugins to inject instead of relying on the project's `vite.config.ts`
|
|
@@ -17,5 +23,8 @@ export type BuildClientOptions = {
|
|
|
17
23
|
* Build the client SPA with Vite if `client.tsx` exists.
|
|
18
24
|
* Returns a map of relative file paths to string contents for deploy,
|
|
19
25
|
* or `{}` when the project has no `client.tsx`.
|
|
26
|
+
*
|
|
27
|
+
* @internal — build hook for aai-server/the studio; not a supported public
|
|
28
|
+
* API and not covered by semver.
|
|
20
29
|
*/
|
|
21
30
|
export declare function buildClient(cwd: string, opts?: BuildClientOptions): Promise<Record<string, string>>;
|
package/dist/client-bundler.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { n as log, t as fmtUrl, u as ok } from "./_ui-8kOEB-JH.mjs";
|
|
3
3
|
import { a as errorMessage } from "./_utils-Ch0J4s6a.mjs";
|
|
4
|
-
import { t as buildAgentBundle } from "./_bundler-
|
|
4
|
+
import { t as buildAgentBundle } from "./_bundler-Cjaxa2wi.mjs";
|
|
5
5
|
import { o as writeProjectConfig } from "./_config-D3F9km8X.mjs";
|
|
6
6
|
import { t as resolveServerEnv } from "./_server-common-CnaP_Urf.mjs";
|
|
7
7
|
import { i as resolveDeployTarget } from "./_agent-D8zBb3M5.mjs";
|
|
@@ -11,7 +11,7 @@ import { styleText } from "node:util";
|
|
|
11
11
|
async function executeDev(opts) {
|
|
12
12
|
const port = parsePort(opts.port);
|
|
13
13
|
const agentName = path.basename(path.resolve(opts.cwd));
|
|
14
|
-
const { startDevServer } = await import("./_dev-server-
|
|
14
|
+
const { startDevServer } = await import("./_dev-server-cigzayJe.mjs");
|
|
15
15
|
let cleanup;
|
|
16
16
|
let shuttingDown = false;
|
|
17
17
|
const onSignal = () => {
|
|
@@ -74,7 +74,7 @@ function resolveTargetDir(dir) {
|
|
|
74
74
|
}
|
|
75
75
|
/** Run deploy after init and return deploy metadata if successful. */
|
|
76
76
|
async function tryDeploy(cwd, server) {
|
|
77
|
-
const { executeDeploy } = await import("./deploy-
|
|
77
|
+
const { executeDeploy } = await import("./deploy-C0VLnnJe.mjs");
|
|
78
78
|
try {
|
|
79
79
|
const result = await executeDeploy({
|
|
80
80
|
cwd,
|
|
@@ -92,7 +92,7 @@ async function tryDeploy(cwd, server) {
|
|
|
92
92
|
}
|
|
93
93
|
/** Scaffold the project, optionally showing a spinner. */
|
|
94
94
|
async function scaffoldProject(dir, cwd, template, silent) {
|
|
95
|
-
const { runInit } = await import("./_init-
|
|
95
|
+
const { runInit } = await import("./_init-_G8l4lh2.mjs");
|
|
96
96
|
const s = silent ? void 0 : p.spinner();
|
|
97
97
|
s?.start(`Creating ${dir}`);
|
|
98
98
|
await runInit({
|