aegra-hono 0.11.0 → 0.11.1
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 +6 -2
- package/dist/cli.js +153 -29
- package/dist/cli.js.map +4 -4
- package/dist/graph.d.ts +2 -2
- package/dist/graph.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +4 -4
- package/dist/runtime.js +4 -4
- package/dist/runtime.js.map +4 -4
- package/package.json +6 -2
package/README.md
CHANGED
|
@@ -12,13 +12,17 @@ Aegra 运行在 Bun 与 Hono 之上,应用数据通过 Drizzle ORM 和 Postgre
|
|
|
12
12
|
|
|
13
13
|
环境要求:Bun 1.3.10+ 与 PostgreSQL。Redis 可选:本地执行不需要,分布式 worker 需要。
|
|
14
14
|
|
|
15
|
-
使用已安装的 CLI
|
|
15
|
+
使用已安装的 CLI,或通过 `bunx aegra-hono` 免安装运行:
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
+
bun add --global aegra-hono
|
|
18
19
|
aegra init ./my-agent
|
|
20
|
+
# 等价:bunx aegra-hono init ./my-agent
|
|
19
21
|
cd my-agent
|
|
20
22
|
bun install
|
|
21
23
|
cp .env.example .env
|
|
24
|
+
bun run services:up
|
|
25
|
+
bun run db
|
|
22
26
|
bun run dev
|
|
23
27
|
```
|
|
24
28
|
|
|
@@ -36,7 +40,7 @@ bun run dev
|
|
|
36
40
|
docker compose up --build
|
|
37
41
|
```
|
|
38
42
|
|
|
39
|
-
|
|
43
|
+
`init` 会生成可直接安装和部署的 TypeScript 后端,包括 `aegra.json`、LangGraph 图、严格 TypeScript 配置、环境变量示例、Dockerfile 与 Docker Compose。服务默认监听 `http://localhost:2026`,健康检查端点为 `GET /health`,接口文档位于 `/docs`:
|
|
40
44
|
|
|
41
45
|
| 端点 | 内容 |
|
|
42
46
|
|:--|:--|
|
package/dist/cli.js
CHANGED
|
@@ -23,7 +23,7 @@ var init_settings = __esm(() => {
|
|
|
23
23
|
booleanFromEnv = z.stringbool().default(false);
|
|
24
24
|
environmentSchema = z.object({
|
|
25
25
|
PROJECT_NAME: z.string().default("Aegra"),
|
|
26
|
-
VERSION: z.string().default("0.11.
|
|
26
|
+
VERSION: z.string().default("0.11.1"),
|
|
27
27
|
ENV_MODE: z.string().default("PRODUCTION"),
|
|
28
28
|
LOG_VERBOSITY: z.string().default("verbose"),
|
|
29
29
|
LOG_EXCLUDE_PATHS: z.string().default(""),
|
|
@@ -562,11 +562,19 @@ async function initProject(args) {
|
|
|
562
562
|
if (!["basic", "hono", "auth", "full"].includes(template)) {
|
|
563
563
|
throw new Error("Template must be one of: basic, hono, auth, full");
|
|
564
564
|
}
|
|
565
|
-
const
|
|
565
|
+
const pkg = await Bun.file(resolve2(import.meta.dir, "../package.json")).json();
|
|
566
|
+
const dependencyVersion = (name2, source) => {
|
|
567
|
+
const version = source[name2];
|
|
568
|
+
if (!version)
|
|
569
|
+
throw new Error(`Package metadata is missing ${name2}`);
|
|
570
|
+
return version;
|
|
571
|
+
};
|
|
572
|
+
const packageSpec = process.env.AEGRA_INIT_PACKAGE_SPEC?.trim() || pkg.version;
|
|
573
|
+
const bunVersion = dependencyVersion("@types/bun", pkg.devDependencies);
|
|
566
574
|
const escapedName = JSON.stringify(`Hello from ${name}`);
|
|
567
575
|
const graph = `import { AIMessage } from "@langchain/core/messages";
|
|
568
576
|
import { MessagesAnnotation, StateGraph, START, END } from "@langchain/langgraph";
|
|
569
|
-
import { defineGraph } from
|
|
577
|
+
import { defineGraph } from ${JSON.stringify(`${pkg.name}/graph`)};
|
|
570
578
|
|
|
571
579
|
export const graph = defineGraph(new StateGraph(MessagesAnnotation)
|
|
572
580
|
.addNode("reply", async () => ({ messages: [new AIMessage(${escapedName})] }))
|
|
@@ -574,79 +582,184 @@ export const graph = defineGraph(new StateGraph(MessagesAnnotation)
|
|
|
574
582
|
`;
|
|
575
583
|
const withHono = template === "hono" || template === "full";
|
|
576
584
|
const withAuth = template === "auth" || template === "full";
|
|
585
|
+
const withRedis = template === "full";
|
|
577
586
|
const config = {
|
|
578
587
|
name,
|
|
588
|
+
dependencies: ["./src"],
|
|
579
589
|
graphs: { [slug]: "./src/graph.ts:graph" },
|
|
580
590
|
...withAuth ? { auth: { path: "./src/auth.ts:auth" } } : {},
|
|
581
591
|
...withHono ? { http: { app: "./src/app.ts:app", ...withAuth ? { enable_custom_route_auth: true } : {} } } : {}
|
|
582
592
|
};
|
|
583
|
-
const
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
environment:
|
|
587
|
-
POSTGRES_USER: postgres
|
|
588
|
-
POSTGRES_PASSWORD: postgres
|
|
589
|
-
POSTGRES_DB: aegra
|
|
593
|
+
const redisService = withRedis ? ` redis:
|
|
594
|
+
image: redis:7-alpine
|
|
595
|
+
restart: unless-stopped
|
|
590
596
|
ports:
|
|
591
|
-
- "
|
|
597
|
+
- "\${REDIS_PORT:-6379}:6379"
|
|
592
598
|
volumes:
|
|
593
|
-
-
|
|
599
|
+
- redis-data:/data
|
|
594
600
|
healthcheck:
|
|
595
|
-
test: ["CMD
|
|
601
|
+
test: ["CMD", "redis-cli", "ping"]
|
|
596
602
|
interval: 5s
|
|
597
603
|
timeout: 5s
|
|
598
604
|
retries: 10
|
|
599
|
-
|
|
600
|
-
|
|
605
|
+
|
|
606
|
+
` : "";
|
|
607
|
+
const redisDependency = withRedis ? ` redis:
|
|
608
|
+
condition: service_healthy
|
|
609
|
+
` : "";
|
|
610
|
+
const compose = `services:
|
|
611
|
+
postgres:
|
|
612
|
+
image: pgvector/pgvector:pg18
|
|
613
|
+
restart: unless-stopped
|
|
614
|
+
environment:
|
|
615
|
+
POSTGRES_USER: \${POSTGRES_USER:-postgres}
|
|
616
|
+
POSTGRES_PASSWORD: \${POSTGRES_PASSWORD:-postgres}
|
|
617
|
+
POSTGRES_DB: \${POSTGRES_DB:-aegra}
|
|
601
618
|
ports:
|
|
602
|
-
- "
|
|
619
|
+
- "\${POSTGRES_PORT:-5432}:5432"
|
|
603
620
|
volumes:
|
|
604
|
-
-
|
|
621
|
+
- postgres-data:/var/lib/postgresql
|
|
605
622
|
healthcheck:
|
|
606
|
-
test: ["CMD", "
|
|
623
|
+
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
|
|
607
624
|
interval: 5s
|
|
608
625
|
timeout: 5s
|
|
609
626
|
retries: 10
|
|
610
|
-
|
|
627
|
+
|
|
628
|
+
${redisService} api:
|
|
629
|
+
build: .
|
|
630
|
+
restart: unless-stopped
|
|
631
|
+
ports:
|
|
632
|
+
- "\${PORT:-2026}:2026"
|
|
633
|
+
env_file:
|
|
634
|
+
- .env
|
|
635
|
+
environment:
|
|
636
|
+
DATABASE_URL: postgresql://\${POSTGRES_USER:-postgres}:\${POSTGRES_PASSWORD:-postgres}@postgres:5432/\${POSTGRES_DB:-aegra}
|
|
637
|
+
PORT: "2026"
|
|
638
|
+
AEGRA_CONFIG: /app/aegra.json
|
|
639
|
+
REDIS_BROKER_ENABLED: "${withRedis}"
|
|
640
|
+
REDIS_URL: redis://redis:6379/0
|
|
641
|
+
depends_on:
|
|
642
|
+
postgres:
|
|
643
|
+
condition: service_healthy
|
|
644
|
+
${redisDependency} healthcheck:
|
|
645
|
+
test: ["CMD", "bun", "-e", "const r=await fetch('http://localhost:2026/health');process.exit(r.ok?0:1)"]
|
|
646
|
+
interval: 30s
|
|
647
|
+
timeout: 10s
|
|
648
|
+
retries: 3
|
|
649
|
+
start_period: 10s
|
|
650
|
+
|
|
651
|
+
volumes:
|
|
611
652
|
postgres-data:
|
|
612
|
-
${
|
|
653
|
+
${withRedis ? ` redis-data:
|
|
613
654
|
` : ""}`;
|
|
655
|
+
const dockerfile = `FROM oven/bun:${bunVersion}-alpine AS install
|
|
656
|
+
WORKDIR /app
|
|
657
|
+
COPY package.json bun.lock ./
|
|
658
|
+
RUN bun install --frozen-lockfile --production
|
|
659
|
+
|
|
660
|
+
FROM oven/bun:${bunVersion}-alpine AS runtime
|
|
661
|
+
WORKDIR /app
|
|
662
|
+
ENV NODE_ENV=production
|
|
663
|
+
COPY --from=install /app/node_modules ./node_modules
|
|
664
|
+
COPY package.json aegra.json ./
|
|
665
|
+
COPY src ./src
|
|
666
|
+
USER bun
|
|
667
|
+
EXPOSE 2026
|
|
668
|
+
CMD ["bun", "run", "start"]
|
|
669
|
+
`;
|
|
670
|
+
const localServices = `docker compose up -d postgres${withRedis ? " redis" : ""}`;
|
|
671
|
+
const packageJson = {
|
|
672
|
+
name: slug,
|
|
673
|
+
private: true,
|
|
674
|
+
type: "module",
|
|
675
|
+
scripts: {
|
|
676
|
+
dev: "aegra dev",
|
|
677
|
+
start: "aegra serve",
|
|
678
|
+
check: "tsc --noEmit",
|
|
679
|
+
db: "aegra db upgrade",
|
|
680
|
+
"services:up": localServices,
|
|
681
|
+
"services:down": "docker compose down",
|
|
682
|
+
"docker:up": "docker compose up --build -d",
|
|
683
|
+
"docker:down": "docker compose down"
|
|
684
|
+
},
|
|
685
|
+
dependencies: {
|
|
686
|
+
[pkg.name]: packageSpec,
|
|
687
|
+
"@langchain/core": dependencyVersion("@langchain/core", pkg.dependencies),
|
|
688
|
+
"@langchain/langgraph": dependencyVersion("@langchain/langgraph", pkg.dependencies),
|
|
689
|
+
...withHono ? { hono: dependencyVersion("hono", pkg.dependencies) } : {}
|
|
690
|
+
},
|
|
691
|
+
devDependencies: {
|
|
692
|
+
"@types/bun": bunVersion,
|
|
693
|
+
typescript: dependencyVersion("typescript", pkg.devDependencies)
|
|
694
|
+
},
|
|
695
|
+
engines: { bun: `>=${bunVersion}` },
|
|
696
|
+
packageManager: `bun@${bunVersion}`
|
|
697
|
+
};
|
|
614
698
|
const files = {
|
|
615
699
|
"aegra.json": `${JSON.stringify(config, null, 2)}
|
|
616
700
|
`,
|
|
617
|
-
"package.json": `${JSON.stringify(
|
|
701
|
+
"package.json": `${JSON.stringify(packageJson, null, 2)}
|
|
618
702
|
`,
|
|
619
|
-
"tsconfig.json": `${JSON.stringify({ compilerOptions: { target: "
|
|
703
|
+
"tsconfig.json": `${JSON.stringify({ compilerOptions: { target: "ES2023", module: "Preserve", moduleResolution: "bundler", strict: true, noUncheckedIndexedAccess: true, exactOptionalPropertyTypes: true, noEmit: true, types: ["bun"], skipLibCheck: true }, include: ["src"] }, null, 2)}
|
|
620
704
|
`,
|
|
621
705
|
"src/graph.ts": graph,
|
|
622
|
-
".env.example": `
|
|
623
|
-
|
|
706
|
+
".env.example": `PROJECT_NAME=${name}
|
|
707
|
+
PORT=2026
|
|
708
|
+
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/aegra
|
|
709
|
+
POSTGRES_USER=postgres
|
|
710
|
+
POSTGRES_PASSWORD=postgres
|
|
711
|
+
POSTGRES_DB=aegra
|
|
712
|
+
REDIS_BROKER_ENABLED=${withRedis}
|
|
624
713
|
REDIS_URL=redis://localhost:6379/0
|
|
625
714
|
${withAuth ? `AEGRA_AUTH_TOKEN=replace-me
|
|
626
715
|
` : ""}`,
|
|
627
716
|
".gitignore": `node_modules
|
|
628
717
|
.env
|
|
718
|
+
dist
|
|
719
|
+
*.tsbuildinfo
|
|
629
720
|
`,
|
|
721
|
+
".dockerignore": `node_modules
|
|
722
|
+
.env
|
|
723
|
+
dist
|
|
724
|
+
.git
|
|
725
|
+
*.log
|
|
726
|
+
`,
|
|
727
|
+
Dockerfile: dockerfile,
|
|
630
728
|
"docker-compose.yml": compose,
|
|
631
729
|
"README.md": `# ${name}
|
|
632
730
|
|
|
731
|
+
TypeScript Aegra backend generated with \`${pkg.name}\`.
|
|
732
|
+
|
|
733
|
+
## Local development
|
|
734
|
+
|
|
633
735
|
\`\`\`bash
|
|
634
736
|
bun install
|
|
635
737
|
cp .env.example .env
|
|
636
|
-
|
|
738
|
+
bun run services:up
|
|
637
739
|
bun run db
|
|
638
740
|
bun run dev
|
|
639
741
|
\`\`\`
|
|
742
|
+
|
|
743
|
+
The API listens on http://localhost:2026 and exposes its API reference at http://localhost:2026/docs.
|
|
744
|
+
|
|
745
|
+
## Docker
|
|
746
|
+
|
|
747
|
+
\`\`\`bash
|
|
748
|
+
bun install
|
|
749
|
+
cp .env.example .env
|
|
750
|
+
bun run docker:up
|
|
751
|
+
\`\`\`
|
|
640
752
|
`
|
|
641
753
|
};
|
|
642
754
|
if (withHono)
|
|
643
755
|
files["src/app.ts"] = `import { Hono } from "hono";
|
|
644
|
-
import { defineApp } from
|
|
756
|
+
import { defineApp } from ${JSON.stringify(`${pkg.name}/hono`)};
|
|
757
|
+
import type { AppVariables } from ${JSON.stringify(`${pkg.name}/types`)};
|
|
645
758
|
|
|
646
|
-
export const app = defineApp(new Hono().get("/hello", (context) => context.json({ message: ${escapedName} })));
|
|
759
|
+
export const app = defineApp(new Hono<{ Variables: AppVariables }>().get("/hello", (context) => context.json({ message: ${escapedName} })));
|
|
647
760
|
`;
|
|
648
761
|
if (withAuth)
|
|
649
|
-
files["src/auth.ts"] = `import { Auth } from
|
|
762
|
+
files["src/auth.ts"] = `import { Auth } from ${JSON.stringify(`${pkg.name}/auth`)};
|
|
650
763
|
|
|
651
764
|
export const auth = new Auth();
|
|
652
765
|
auth.authenticate((request) => {
|
|
@@ -664,6 +777,17 @@ auth.authenticate((request) => {
|
|
|
664
777
|
skipped++;
|
|
665
778
|
}
|
|
666
779
|
console.log(`Created ${created} files in ${root}${skipped ? ` (${skipped} skipped; use --force to overwrite)` : ""}`);
|
|
780
|
+
if (!skipped) {
|
|
781
|
+
const changeDirectory = root === resolve2(".") ? "" : ` cd ${JSON.stringify(root)}
|
|
782
|
+
`;
|
|
783
|
+
console.log(`
|
|
784
|
+
Next steps:
|
|
785
|
+
${changeDirectory} bun install
|
|
786
|
+
cp .env.example .env
|
|
787
|
+
bun run services:up
|
|
788
|
+
bun run db
|
|
789
|
+
bun run dev`);
|
|
790
|
+
}
|
|
667
791
|
}
|
|
668
792
|
async function main(argv = process.argv.slice(2)) {
|
|
669
793
|
const [command, ...args] = argv;
|
|
@@ -711,4 +835,4 @@ export {
|
|
|
711
835
|
main
|
|
712
836
|
};
|
|
713
837
|
|
|
714
|
-
//# debugId=
|
|
838
|
+
//# debugId=3D3537488E50FB9064756E2164756E21
|
package/dist/cli.js.map
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/config/settings.ts", "../src/config/project.ts", "../src/core/schema.ts", "../src/core/database.ts", "../src/cli.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { z } from \"zod\";\n\nconst booleanFromEnv = z.stringbool().default(false);\nconst positiveIntFromEnv = (fallback: number) => z.coerce.number().int().positive().default(fallback);\n\nconst environmentSchema = z.object({\n PROJECT_NAME: z.string().default(\"Aegra\"),\n VERSION: z.string().default(\"0.11.
|
|
5
|
+
"import { z } from \"zod\";\n\nconst booleanFromEnv = z.stringbool().default(false);\nconst positiveIntFromEnv = (fallback: number) => z.coerce.number().int().positive().default(fallback);\n\nconst environmentSchema = z.object({\n PROJECT_NAME: z.string().default(\"Aegra\"),\n VERSION: z.string().default(\"0.11.1\"),\n ENV_MODE: z.string().default(\"PRODUCTION\"),\n LOG_VERBOSITY: z.string().default(\"verbose\"),\n LOG_EXCLUDE_PATHS: z.string().default(\"\"),\n HOST: z.string().default(\"0.0.0.0\"),\n PORT: z.coerce.number().int().min(1).max(65_535).default(2026),\n AEGRA_CONFIG: z.string().default(\"aegra.json\"),\n RUN_MIGRATIONS_ON_STARTUP: z.stringbool().default(true),\n DATABASE_URL: z.string().optional(),\n POSTGRES_USER: z.string().default(\"postgres\"),\n POSTGRES_PASSWORD: z.string().default(\"postgres\"),\n POSTGRES_HOST: z.string().default(\"localhost\"),\n POSTGRES_PORT: z.coerce.number().int().min(1).max(65_535).default(5432),\n POSTGRES_DB: z.string().default(\"aegra\"),\n REDIS_BROKER_ENABLED: booleanFromEnv,\n REDIS_URL: z.string().default(\"redis://localhost:6379/0\"),\n WORKER_COUNT: positiveIntFromEnv(3),\n N_JOBS_PER_WORKER: positiveIntFromEnv(10),\n WORKER_QUEUE_KEY: z.string().default(\"aegra:jobs\"),\n BG_JOB_TIMEOUT_SECS: positiveIntFromEnv(3600),\n BG_JOB_MAX_RETRIES: z.coerce.number().int().nonnegative().default(3),\n WORKER_DRAIN_TIMEOUT: z.coerce.number().nonnegative().default(30),\n STUCK_PENDING_THRESHOLD_SECONDS: positiveIntFromEnv(120),\n LEASE_DURATION_SECONDS: positiveIntFromEnv(30),\n HEARTBEAT_INTERVAL_SECONDS: positiveIntFromEnv(10),\n REAPER_INTERVAL_SECONDS: positiveIntFromEnv(15),\n POSTGRES_POLL_INTERVAL_SECONDS: positiveIntFromEnv(5),\n KEEPALIVE_INTERVAL_SECS: positiveIntFromEnv(5),\n CRON_ENABLED: z.stringbool().default(true),\n CRON_POLL_INTERVAL_SECONDS: positiveIntFromEnv(60),\n CRON_CLAIM_DURATION_SECONDS: positiveIntFromEnv(300),\n CRON_MAX_PER_USER: z.coerce.number().int().nonnegative().default(100),\n CRON_ALLOW_SECONDS_SCHEDULE: booleanFromEnv,\n CRON_TICK_BATCH_SIZE: positiveIntFromEnv(100),\n CRON_MAX_PAYLOAD_BYTES: positiveIntFromEnv(65_536),\n AEGRA_THREAD_TTL: z.string().optional(),\n LANGGRAPH_THREAD_TTL: z.string().optional(),\n MAX_SEARCH_LIMIT: positiveIntFromEnv(1000),\n ENABLE_PROMETHEUS_METRICS: booleanFromEnv,\n FF_V2_EVENT_STREAMING: z.stringbool().default(true),\n OTEL_SERVICE_NAME: z.string().default(\"aegra-backend\"),\n OTEL_TARGETS: z.string().default(\"\"),\n OTEL_CONSOLE_EXPORT: booleanFromEnv,\n OTEL_EXPORTER_OTLP_ENDPOINT: z.string().optional(),\n OTEL_EXPORTER_OTLP_HEADERS: z.string().optional(),\n LANGFUSE_BASE_URL: z.string().default(\"http://localhost:3000\"),\n LANGFUSE_PUBLIC_KEY: z.string().optional(),\n LANGFUSE_SECRET_KEY: z.string().optional(),\n PHOENIX_COLLECTOR_ENDPOINT: z.string().default(\"http://127.0.0.1:6006/v1/traces\"),\n PHOENIX_API_KEY: z.string().optional(),\n}).superRefine((value, issue) => {\n if (value.LEASE_DURATION_SECONDS <= 2 * value.HEARTBEAT_INTERVAL_SECONDS) {\n issue.addIssue({ code: \"custom\", path: [\"LEASE_DURATION_SECONDS\"],\n message: \"LEASE_DURATION_SECONDS must exceed twice HEARTBEAT_INTERVAL_SECONDS\" });\n }\n});\n\nconst raw = environmentSchema.parse(process.env);\n\nexport const settings = {\n ...raw,\n DATABASE_URL:\n raw.DATABASE_URL ??\n `postgresql://${encodeURIComponent(raw.POSTGRES_USER)}:${encodeURIComponent(raw.POSTGRES_PASSWORD)}@${raw.POSTGRES_HOST}:${raw.POSTGRES_PORT}/${raw.POSTGRES_DB}`,\n} as const;\n\nexport type Settings = typeof settings;\n",
|
|
6
6
|
"import { readFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport { z } from \"zod\";\nimport { settings } from \"./settings.ts\";\n\nconst corsSchema = z.object({\n allow_origins: z.array(z.string()).default([\"*\"]),\n allow_methods: z.array(z.string()).default([\"*\"]),\n allow_headers: z.array(z.string()).default([\"*\"]),\n allow_credentials: z.boolean().optional(),\n expose_headers: z.array(z.string()).default([\"Content-Location\", \"Location\"]),\n max_age: z.number().int().nonnegative().default(600),\n});\n\nconst configSchema = z.object({\n dependencies: z.array(z.string()).default([]),\n graphs: z.record(z.string(), z.string()).default({}),\n auth: z.object({ path: z.string(), disable_studio_auth: z.boolean().default(false) }).optional(),\n http: z\n .object({\n app: z.string().optional(),\n enable_custom_route_auth: z.boolean().default(false),\n cors: corsSchema.optional(),\n })\n .optional(),\n store: z\n .object({\n index: z\n .object({ dims: z.number().int().positive(), embed: z.string(), fields: z.array(z.string()).nullable().optional() })\n .nullable()\n .optional(),\n scopes: z.record(z.string(), z.array(z.string())).default({}),\n })\n .optional(),\n checkpointer: z\n .object({\n ttl: z\n .object({\n strategy: z.enum([\"delete\", \"keep_latest\"]).default(\"delete\"),\n default_ttl: z.number().positive().optional(),\n sweep_interval_minutes: z.number().positive().default(5),\n sweep_limit: z.number().int().positive().default(100),\n })\n .nullable()\n .optional(),\n })\n .optional(),\n});\n\nexport type AegraConfig = z.infer<typeof configSchema>;\n\nlet cachedConfig: AegraConfig | undefined;\n\nexport async function loadConfig(): Promise<AegraConfig> {\n if (cachedConfig) return cachedConfig;\n const configPath = resolve(settings.AEGRA_CONFIG);\n const content = await readFile(configPath, \"utf8\");\n cachedConfig = configSchema.parse(JSON.parse(content));\n return cachedConfig;\n}\n\nexport function configDirectory(): string {\n return dirname(resolve(settings.AEGRA_CONFIG));\n}\n\nexport function clearConfigCache(): void {\n cachedConfig = undefined;\n}\n",
|
|
7
7
|
"import { sql } from \"drizzle-orm\";\nimport { bigint, bigserial, boolean, doublePrecision, index, integer, jsonb, pgTable, primaryKey, text, timestamp, unique, uniqueIndex } from \"drizzle-orm/pg-core\";\nimport type { JsonObject, JsonValue } from \"../types.ts\";\n\nconst timestamps = {\n created_at: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n updated_at: timestamp(\"updated_at\", { withTimezone: true }).notNull().defaultNow(),\n};\n\nexport const migrations = pgTable(\"aegra_migrations\", {\n version: integer(\"version\").primaryKey(),\n applied_at: timestamp(\"applied_at\", { withTimezone: true }).notNull().defaultNow(),\n});\n\nexport const assistants = pgTable(\"assistant\", {\n assistant_id: text(\"assistant_id\").primaryKey().default(sql`gen_random_uuid()::text`),\n name: text(\"name\").notNull(),\n description: text(\"description\"),\n graph_id: text(\"graph_id\").notNull(),\n config: jsonb(\"config\").$type<JsonObject>().notNull().default({}),\n context: jsonb(\"context\").$type<JsonObject>().notNull().default({}),\n user_id: text(\"user_id\").notNull(),\n version: integer(\"version\").notNull().default(1),\n metadata: jsonb(\"metadata\").$type<JsonObject>().notNull().default({}),\n ...timestamps,\n}, (table) => [\n index(\"idx_assistant_user\").on(table.user_id),\n unique(\"assistant_user_id_unique\").on(table.user_id, table.assistant_id),\n uniqueIndex(\"idx_assistant_user_graph_config\").on(table.user_id, table.graph_id, sql`md5(${table.config}::text)`),\n index(\"idx_assistant_metadata_gin\").using(\"gin\", sql`${table.metadata} jsonb_path_ops`),\n]);\n\nexport const assistantVersions = pgTable(\"assistant_versions\", {\n assistant_id: text(\"assistant_id\").notNull().references(() => assistants.assistant_id, { onDelete: \"cascade\" }),\n version: integer(\"version\").notNull(),\n graph_id: text(\"graph_id\").notNull(),\n config: jsonb(\"config\").$type<JsonObject>(),\n context: jsonb(\"context\").$type<JsonObject>(),\n metadata: jsonb(\"metadata\").$type<JsonObject>().notNull().default({}),\n name: text(\"name\"),\n description: text(\"description\"),\n created_at: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n}, (table) => [primaryKey({ columns: [table.assistant_id, table.version] })]);\n\nexport const threads = pgTable(\"thread\", {\n thread_id: text(\"thread_id\").primaryKey(),\n status: text(\"status\").notNull().default(\"idle\"),\n metadata_json: jsonb(\"metadata_json\").$type<JsonObject>().notNull().default({}),\n user_id: text(\"user_id\").notNull(),\n ...timestamps,\n}, (table) => [index(\"idx_thread_user\").on(table.user_id),\n index(\"idx_thread_metadata_gin\").using(\"gin\", sql`${table.metadata_json} jsonb_path_ops`)]);\n\nexport const runs = pgTable(\"runs\", {\n run_id: text(\"run_id\").primaryKey().default(sql`gen_random_uuid()::text`),\n thread_id: text(\"thread_id\").notNull().references(() => threads.thread_id, { onDelete: \"cascade\" }),\n assistant_id: text(\"assistant_id\").references(() => assistants.assistant_id, { onDelete: \"cascade\" }),\n status: text(\"status\").notNull().default(\"pending\"),\n input: jsonb(\"input\").$type<JsonObject>(),\n config: jsonb(\"config\").$type<JsonObject>(),\n context: jsonb(\"context\").$type<JsonObject>(),\n output: jsonb(\"output\").$type<JsonObject>(),\n error_message: text(\"error_message\"),\n user_id: text(\"user_id\").notNull(),\n execution_params: jsonb(\"execution_params\").$type<JsonObject>(),\n claimed_by: text(\"claimed_by\"),\n lease_expires_at: timestamp(\"lease_expires_at\", { withTimezone: true }),\n ...timestamps,\n}, (table) => [\n index(\"idx_runs_thread_id\").on(table.thread_id), index(\"idx_runs_status\").on(table.status),\n index(\"idx_runs_user\").on(table.user_id), index(\"idx_runs_assistant_id\").on(table.assistant_id),\n index(\"idx_runs_created_at\").on(table.created_at),\n index(\"idx_runs_lease_reaper\").on(table.status, table.lease_expires_at).where(sql`${table.status} = 'running'`),\n]);\n\nexport const threadEvents = pgTable(\"thread_events\", {\n seq: bigserial(\"seq\", { mode: \"number\" }).primaryKey(),\n thread_id: text(\"thread_id\").notNull().references(() => threads.thread_id, { onDelete: \"cascade\" }),\n run_id: text(\"run_id\").notNull().references(() => runs.run_id, { onDelete: \"cascade\" }),\n user_id: text(\"user_id\").notNull(),\n event_id: text(\"event_id\").notNull().unique(),\n method: text(\"method\").notNull(),\n namespace: text(\"namespace\").array().notNull().default(sql`'{}'::text[]`),\n event_data: jsonb(\"event_data\").$type<JsonValue>().notNull(),\n event_timestamp: bigint(\"event_timestamp\", { mode: \"number\" }).notNull(),\n created_at: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n}, (table) => [index(\"idx_thread_events_replay\").on(table.user_id, table.thread_id, table.seq)]);\n\nexport const crons = pgTable(\"crons\", {\n cron_id: text(\"cron_id\").primaryKey().default(sql`gen_random_uuid()::text`),\n assistant_id: text(\"assistant_id\").notNull().references(() => assistants.assistant_id, { onDelete: \"cascade\" }),\n thread_id: text(\"thread_id\").references(() => threads.thread_id, { onDelete: \"cascade\" }),\n user_id: text(\"user_id\").notNull(),\n schedule: text(\"schedule\").notNull(),\n payload: jsonb(\"payload\").$type<JsonObject>().notNull().default({}),\n metadata: jsonb(\"metadata\").$type<JsonObject>().notNull().default({}),\n on_run_completed: text(\"on_run_completed\"),\n enabled: boolean(\"enabled\").notNull().default(true),\n end_time: timestamp(\"end_time\", { withTimezone: true }),\n next_run_date: timestamp(\"next_run_date\", { withTimezone: true }),\n claimed_until: timestamp(\"claimed_until\", { withTimezone: true }),\n ...timestamps,\n}, (table) => [\n index(\"idx_cron_user\").on(table.user_id), index(\"idx_cron_assistant_id\").on(table.assistant_id),\n index(\"idx_cron_thread_id\").on(table.thread_id), index(\"idx_cron_next_run\").on(table.enabled, table.next_run_date),\n]);\n\nexport const storeItems = pgTable(\"store_items\", {\n user_id: text(\"user_id\").notNull(),\n namespace: text(\"namespace\").array().notNull(),\n key: text(\"key\").notNull(),\n value: jsonb(\"value\").$type<JsonObject>().notNull(),\n ...timestamps,\n}, (table) => [primaryKey({ columns: [table.namespace, table.key] })]);\n\nexport const threadTtl = pgTable(\"thread_ttl\", {\n thread_id: text(\"thread_id\").primaryKey().references(() => threads.thread_id, { onDelete: \"cascade\" }),\n strategy: text(\"strategy\").notNull().default(\"delete\"),\n ttl_minutes: doublePrecision(\"ttl_minutes\").notNull(),\n created_at: timestamp(\"created_at\", { withTimezone: true }).notNull().defaultNow(),\n expires_at: timestamp(\"expires_at\", { withTimezone: true }).notNull(),\n}, (table) => [index(\"idx_thread_ttl_expires_at\").on(table.expires_at)]);\n",
|
|
8
8
|
"import postgres from \"postgres\";\nimport { drizzle } from \"drizzle-orm/postgres-js\";\nimport { loadConfig } from \"../config/project.ts\";\nimport { settings } from \"../config/settings.ts\";\nimport * as schema from \"./schema.ts\";\n\nexport const client = postgres(settings.DATABASE_URL, {\n max: 20,\n idle_timeout: 30,\n connect_timeout: 10,\n transform: { undefined: null },\n // Bootstrap DDL raises \"already exists\" notices on every boot; keep them only\n // in verbose mode so the structured request log stays readable.\n onnotice: (notice) => {\n if (settings.LOG_VERBOSITY !== \"verbose\") return;\n console.log(JSON.stringify({ event: \"postgres_notice\", severity: notice.severity, code: notice.code, message: notice.message }));\n },\n});\nexport const db = drizzle({ client, schema });\n\nconst migrations = [\n `CREATE TABLE IF NOT EXISTS aegra_migrations (\n version integer PRIMARY KEY,\n applied_at timestamptz NOT NULL DEFAULT now()\n )`,\n `CREATE TABLE IF NOT EXISTS assistant (\n assistant_id text PRIMARY KEY DEFAULT gen_random_uuid()::text,\n name text NOT NULL,\n description text,\n graph_id text NOT NULL,\n config jsonb NOT NULL DEFAULT '{}'::jsonb,\n context jsonb NOT NULL DEFAULT '{}'::jsonb,\n user_id text NOT NULL,\n version integer NOT NULL DEFAULT 1,\n metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n created_at timestamptz NOT NULL DEFAULT now(),\n updated_at timestamptz NOT NULL DEFAULT now(),\n UNIQUE(user_id, assistant_id)\n )`,\n `CREATE UNIQUE INDEX IF NOT EXISTS idx_assistant_user_graph_config\n ON assistant(user_id, graph_id, md5(config::text))`,\n `CREATE INDEX IF NOT EXISTS idx_assistant_user ON assistant(user_id)`,\n `CREATE INDEX IF NOT EXISTS idx_assistant_metadata_gin ON assistant USING gin (metadata jsonb_path_ops)`,\n `CREATE TABLE IF NOT EXISTS assistant_versions (\n assistant_id text NOT NULL REFERENCES assistant(assistant_id) ON DELETE CASCADE,\n version integer NOT NULL,\n graph_id text NOT NULL,\n config jsonb,\n context jsonb,\n metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n name text,\n description text,\n created_at timestamptz NOT NULL DEFAULT now(),\n PRIMARY KEY(assistant_id, version)\n )`,\n `CREATE TABLE IF NOT EXISTS thread (\n thread_id text PRIMARY KEY,\n status text NOT NULL DEFAULT 'idle',\n metadata_json jsonb NOT NULL DEFAULT '{}'::jsonb,\n user_id text NOT NULL,\n created_at timestamptz NOT NULL DEFAULT now(),\n updated_at timestamptz NOT NULL DEFAULT now()\n )`,\n `CREATE INDEX IF NOT EXISTS idx_thread_user ON thread(user_id)`,\n `CREATE INDEX IF NOT EXISTS idx_thread_metadata_gin ON thread USING gin (metadata_json jsonb_path_ops)`,\n `CREATE TABLE IF NOT EXISTS runs (\n run_id text PRIMARY KEY DEFAULT gen_random_uuid()::text,\n thread_id text NOT NULL REFERENCES thread(thread_id) ON DELETE CASCADE,\n assistant_id text REFERENCES assistant(assistant_id) ON DELETE CASCADE,\n status text NOT NULL DEFAULT 'pending',\n input jsonb,\n config jsonb,\n context jsonb,\n output jsonb,\n error_message text,\n user_id text NOT NULL,\n execution_params jsonb,\n claimed_by text,\n lease_expires_at timestamptz,\n created_at timestamptz NOT NULL DEFAULT now(),\n updated_at timestamptz NOT NULL DEFAULT now()\n )`,\n `CREATE INDEX IF NOT EXISTS idx_runs_thread_id ON runs(thread_id)`,\n `CREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status)`,\n `CREATE INDEX IF NOT EXISTS idx_runs_user ON runs(user_id)`,\n `CREATE INDEX IF NOT EXISTS idx_runs_assistant_id ON runs(assistant_id)`,\n `CREATE INDEX IF NOT EXISTS idx_runs_created_at ON runs(created_at)`,\n `CREATE INDEX IF NOT EXISTS idx_runs_lease_reaper ON runs(status, lease_expires_at) WHERE status = 'running'`,\n `CREATE TABLE IF NOT EXISTS thread_events (\n seq bigserial PRIMARY KEY,\n thread_id text NOT NULL REFERENCES thread(thread_id) ON DELETE CASCADE,\n run_id text NOT NULL REFERENCES runs(run_id) ON DELETE CASCADE,\n user_id text NOT NULL,\n event_id text NOT NULL UNIQUE,\n method text NOT NULL,\n namespace text[] NOT NULL DEFAULT '{}',\n event_data jsonb NOT NULL,\n event_timestamp bigint NOT NULL,\n created_at timestamptz NOT NULL DEFAULT now()\n )`,\n `CREATE INDEX IF NOT EXISTS idx_thread_events_replay ON thread_events(user_id, thread_id, seq)`,\n `CREATE TABLE IF NOT EXISTS crons (\n cron_id text PRIMARY KEY DEFAULT gen_random_uuid()::text,\n assistant_id text NOT NULL REFERENCES assistant(assistant_id) ON DELETE CASCADE,\n thread_id text REFERENCES thread(thread_id) ON DELETE CASCADE,\n user_id text NOT NULL,\n schedule text NOT NULL,\n payload jsonb NOT NULL DEFAULT '{}'::jsonb,\n metadata jsonb NOT NULL DEFAULT '{}'::jsonb,\n on_run_completed text,\n enabled boolean NOT NULL DEFAULT true,\n end_time timestamptz,\n next_run_date timestamptz,\n claimed_until timestamptz,\n created_at timestamptz NOT NULL DEFAULT now(),\n updated_at timestamptz NOT NULL DEFAULT now()\n )`,\n `CREATE TABLE IF NOT EXISTS store_items (\n user_id text NOT NULL,\n namespace text[] NOT NULL,\n key text NOT NULL,\n value jsonb NOT NULL,\n created_at timestamptz NOT NULL DEFAULT now(),\n updated_at timestamptz NOT NULL DEFAULT now(),\n PRIMARY KEY(namespace, key)\n )`,\n // Store isolation lives in the namespace head ([\"users\", identity, ...]), so\n // the primary key must not include the writer. Older databases keyed on\n // user_id and are migrated in place; shared scopes otherwise duplicate rows.\n `DO $$\n DECLARE legacy_key boolean;\n BEGIN\n SELECT EXISTS (\n SELECT 1 FROM pg_constraint c\n JOIN pg_class t ON t.oid = c.conrelid\n WHERE t.relname = 'store_items' AND c.contype = 'p'\n AND pg_get_constraintdef(c.oid) = 'PRIMARY KEY (user_id, namespace, key)'\n ) INTO legacy_key;\n IF legacy_key THEN\n IF to_regclass('store_embeddings') IS NOT NULL THEN\n ALTER TABLE store_embeddings DROP CONSTRAINT IF EXISTS store_embeddings_user_id_namespace_key_fkey;\n ALTER TABLE store_embeddings DROP CONSTRAINT IF EXISTS store_embeddings_pkey;\n END IF;\n ALTER TABLE store_items DROP CONSTRAINT store_items_pkey;\n ALTER TABLE store_items ADD CONSTRAINT store_items_pkey PRIMARY KEY (namespace, key);\n IF to_regclass('store_embeddings') IS NOT NULL THEN\n ALTER TABLE store_embeddings ADD CONSTRAINT store_embeddings_pkey PRIMARY KEY (namespace, key);\n ALTER TABLE store_embeddings ADD CONSTRAINT store_embeddings_item_fkey\n FOREIGN KEY (namespace, key) REFERENCES store_items(namespace, key) ON DELETE CASCADE;\n END IF;\n END IF;\n END $$`,\n `CREATE INDEX IF NOT EXISTS idx_cron_user ON crons(user_id)`,\n `CREATE INDEX IF NOT EXISTS idx_cron_assistant_id ON crons(assistant_id)`,\n `CREATE INDEX IF NOT EXISTS idx_cron_thread_id ON crons(thread_id)`,\n `CREATE INDEX IF NOT EXISTS idx_cron_next_run ON crons(enabled, next_run_date)`,\n `CREATE TABLE IF NOT EXISTS thread_ttl (\n thread_id text PRIMARY KEY REFERENCES thread(thread_id) ON DELETE CASCADE,\n strategy text NOT NULL DEFAULT 'delete',\n ttl_minutes double precision NOT NULL,\n created_at timestamptz NOT NULL DEFAULT now(),\n expires_at timestamptz NOT NULL\n )`,\n `CREATE INDEX IF NOT EXISTS idx_thread_ttl_expires_at ON thread_ttl(expires_at)`,\n];\n\nexport async function migrate(): Promise<void> {\n for (const statement of migrations) await client.unsafe(statement);\n if ((await loadConfig()).store?.index) {\n await client.unsafe(\"CREATE EXTENSION IF NOT EXISTS vector\");\n await client.unsafe(`CREATE TABLE IF NOT EXISTS store_embeddings (\n user_id text NOT NULL,\n namespace text[] NOT NULL,\n key text NOT NULL,\n embedding vector NOT NULL,\n PRIMARY KEY(namespace, key),\n FOREIGN KEY(namespace, key) REFERENCES store_items(namespace, key) ON DELETE CASCADE\n )`);\n }\n}\n\nexport async function pingDatabase(): Promise<boolean> {\n try {\n await client`SELECT 1`;\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function closeDatabase(): Promise<void> {\n await client.end({ timeout: 5 });\n}\n",
|
|
9
|
-
"#!/usr/bin/env bun\nimport { mkdir } from \"node:fs/promises\";\nimport { basename, dirname, resolve } from \"node:path\";\n\ntype Options = Record<string, string | boolean>;\n\nfunction usage(exitCode = 1): never {\n console.log(`Usage: aegra <command> [options]\n\nCommands:\n init [path] Create a TypeScript Aegra project\n dev Start with Bun hot reload\n serve Start the production server\n up|down [args] Run Docker Compose\n db upgrade Apply database migrations\n version Print the version\n\nServer options: --host, --port, --config|-c, --env-file|-e\nInit options: --name|-n, --template|-t <basic|hono|auth|full>, --force`);\n process.exit(exitCode);\n}\n\nfunction parseOptions(args: string[]): { positional: string[]; options: Options } {\n const positional: string[] = [];\n const options: Options = {};\n for (let index = 0; index < args.length; index++) {\n const value = args[index]!;\n if (!value.startsWith(\"-\")) { positional.push(value); continue; }\n const [rawName, inline] = value.split(\"=\", 2);\n const name = ({ \"-c\": \"config\", \"-e\": \"env-file\", \"-n\": \"name\", \"-t\": \"template\" } as Record<string, string>)[rawName!] ?? rawName!.replace(/^--/, \"\");\n if ([\"force\", \"help\", \"no-db-check\"].includes(name)) { options[name] = true; continue; }\n const next = inline ?? args[++index];\n if (!next) throw new Error(`Missing value for ${rawName}`);\n options[name] = next;\n }\n return { positional, options };\n}\n\nasync function loadEnv(path: string): Promise<void> {\n const file = Bun.file(path);\n if (!(await file.exists())) return;\n for (const line of (await file.text()).split(/\\r?\\n/)) {\n const match = line.match(/^\\s*(?:export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*?)\\s*$/);\n if (!match || process.env[match[1]!] !== undefined) continue;\n process.env[match[1]!] = match[2]!.replace(/^(['\"])(.*)\\1$/, \"$2\");\n }\n}\n\nfunction run(command: string[], env?: Record<string, string | undefined>): void {\n const result = Bun.spawnSync(command, { stdin: \"inherit\", stdout: \"inherit\", stderr: \"inherit\", ...(env ? { env } : {}) });\n if (result.exitCode !== 0) process.exit(result.exitCode);\n}\n\nasync function serverEnvironment(options: Options): Promise<Record<string, string | undefined>> {\n await loadEnv(String(options[\"env-file\"] ?? resolve(\".env\")));\n if (options.host) process.env.HOST = String(options.host);\n if (options.port) process.env.PORT = String(options.port);\n if (options.config) process.env.AEGRA_CONFIG = resolve(String(options.config));\n else if (!process.env.AEGRA_CONFIG && await Bun.file(resolve(\"langgraph.json\")).exists()\n && !(await Bun.file(resolve(\"aegra.json\")).exists())) process.env.AEGRA_CONFIG = \"langgraph.json\";\n return process.env;\n}\n\nfunction slugify(value: string): string {\n return value.toLowerCase().trim().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\") || \"aegra-agent\";\n}\n\nasync function writeProjectFile(root: string, path: string, content: string, force: boolean): Promise<\"created\" | \"skipped\"> {\n const target = resolve(root, path);\n if (!force && await Bun.file(target).exists()) return \"skipped\";\n await mkdir(dirname(target), { recursive: true });\n await Bun.write(target, content);\n return \"created\";\n}\n\nasync function initProject(args: string[]): Promise<void> {\n const { positional, options } = parseOptions(args);\n if (options.help) usage(0);\n const root = resolve(positional[0] ?? \".\");\n const name = String(options.name ?? basename(root));\n const slug = slugify(name);\n const requestedTemplate = String(options.template ?? \"basic\");\n const template = requestedTemplate === \"1\" ? \"basic\" : requestedTemplate;\n if (![\"basic\", \"hono\", \"auth\", \"full\"].includes(template)) {\n throw new Error(\"Template must be one of: basic, hono, auth, full\");\n }\n const version = (await Bun.file(resolve(import.meta.dir, \"../package.json\")).json() as { version: string }).version;\n const escapedName = JSON.stringify(`Hello from ${name}`);\n const graph = `import { AIMessage } from \"@langchain/core/messages\";\\nimport { MessagesAnnotation, StateGraph, START, END } from \"@langchain/langgraph\";\\nimport { defineGraph } from \"aegra-hono/graph\";\\n\\nexport const graph = defineGraph(new StateGraph(MessagesAnnotation)\\n .addNode(\"reply\", async () => ({ messages: [new AIMessage(${escapedName})] }))\\n .addEdge(START, \"reply\").addEdge(\"reply\", END).compile());\\n`;\n const withHono = template === \"hono\" || template === \"full\";\n const withAuth = template === \"auth\" || template === \"full\";\n const config = {\n name,\n graphs: { [slug]: \"./src/graph.ts:graph\" },\n ...(withAuth ? { auth: { path: \"./src/auth.ts:auth\" } } : {}),\n ...(withHono ? { http: { app: \"./src/app.ts:app\", ...(withAuth ? { enable_custom_route_auth: true } : {}) } } : {}),\n };\n const compose = `services:\\n postgres:\\n image: pgvector/pgvector:pg18\\n environment:\\n POSTGRES_USER: postgres\\n POSTGRES_PASSWORD: postgres\\n POSTGRES_DB: aegra\\n ports:\\n - \"5432:5432\"\\n volumes:\\n - postgres-data:/var/lib/postgresql/data\\n healthcheck:\\n test: [\"CMD-SHELL\", \"pg_isready -U postgres -d aegra\"]\\n interval: 5s\\n timeout: 5s\\n retries: 10\\n${template === \"full\" ? ` redis:\\n image: redis:7-alpine\\n ports:\\n - \"6379:6379\"\\n volumes:\\n - redis-data:/data\\n healthcheck:\\n test: [\"CMD\", \"redis-cli\", \"ping\"]\\n interval: 5s\\n timeout: 5s\\n retries: 10\\n` : \"\"}volumes:\\n postgres-data:\\n${template === \"full\" ? \" redis-data:\\n\" : \"\"}`;\n const files: Record<string, string> = {\n \"aegra.json\": `${JSON.stringify(config, null, 2)}\\n`,\n \"package.json\": `${JSON.stringify({ name: slug, private: true, type: \"module\", scripts: { dev: \"aegra dev\", start: \"aegra serve\", check: \"tsc --noEmit\", db: \"aegra db upgrade\", services: \"docker compose up -d\" }, dependencies: { aegra: version, \"@langchain/core\": \"1.2.10\", \"@langchain/langgraph\": \"1.4.14\", ...(withHono ? { hono: \"4.13.7\" } : {}) }, devDependencies: { \"@types/bun\": \"1.3.10\", typescript: \"5.9.3\" }, engines: { bun: \">=1.3.10\" } }, null, 2)}\\n`,\n \"tsconfig.json\": `${JSON.stringify({ compilerOptions: { target: \"ES2022\", module: \"Preserve\", moduleResolution: \"bundler\", strict: true, noEmit: true, types: [\"bun\"], skipLibCheck: true }, include: [\"src\"] }, null, 2)}\\n`,\n \"src/graph.ts\": graph,\n \".env.example\": `DATABASE_URL=postgresql://postgres:postgres@localhost:5432/aegra\\nREDIS_BROKER_ENABLED=${template === \"full\" ? \"true\" : \"false\"}\\nREDIS_URL=redis://localhost:6379/0\\n${withAuth ? \"AEGRA_AUTH_TOKEN=replace-me\\n\" : \"\"}`,\n \".gitignore\": `node_modules\\n.env\\n`,\n \"docker-compose.yml\": compose,\n \"README.md\": `# ${name}\\n\\n\\`\\`\\`bash\\nbun install\\ncp .env.example .env\\ndocker compose up -d\\nbun run db\\nbun run dev\\n\\`\\`\\`\\n`,\n };\n if (withHono) files[\"src/app.ts\"] = `import { Hono } from \"hono\";\\nimport { defineApp } from \"aegra-hono/hono\";\\n\\nexport const app = defineApp(new Hono().get(\"/hello\", (context) => context.json({ message: ${escapedName} })));\\n`;\n if (withAuth) files[\"src/auth.ts\"] = `import { Auth } from \"aegra-hono/auth\";\\n\\nexport const auth = new Auth();\\nauth.authenticate((request) => {\\n const token = process.env.AEGRA_AUTH_TOKEN;\\n if (!token || request.headers.get(\"authorization\") !== \\`Bearer \\${token}\\`) throw new Error(\"Invalid bearer token\");\\n return { identity: request.headers.get(\"x-user-id\")?.trim() || \"authenticated-user\", isAuthenticated: true, permissions: [] };\\n});\\n`;\n let created = 0;\n let skipped = 0;\n for (const [path, content] of Object.entries(files)) {\n if (await writeProjectFile(root, path, content, Boolean(options.force)) === \"created\") created++;\n else skipped++;\n }\n console.log(`Created ${created} files in ${root}${skipped ? ` (${skipped} skipped; use --force to overwrite)` : \"\"}`);\n}\n\nexport async function main(argv = process.argv.slice(2)): Promise<void> {\n const [command, ...args] = argv;\n if (!command || command === \"help\" || command === \"--help\") usage(command ? 0 : 1);\n if (command === \"init\") return initProject(args);\n if (command === \"version\" || command === \"--version\") {\n const pkg = await Bun.file(resolve(import.meta.dir, \"../package.json\")).json() as { version: string };\n console.log(pkg.version);\n return;\n }\n if (command === \"dev\" || command === \"serve\") {\n const { options } = parseOptions(args);\n if (options.help) usage(0);\n const env = await serverEnvironment(options);\n const builtEntrypoint = resolve(import.meta.dir, \"index.js\");\n const entrypoint = await Bun.file(builtEntrypoint).exists() ? builtEntrypoint : resolve(import.meta.dir, \"index.ts\");\n if (command === \"dev\") run([\"bun\", \"--hot\", entrypoint], env);\n else await import(entrypoint);\n return;\n }\n if (command === \"up\" || command === \"down\") return run([\"docker\", \"compose\", command, ...args]);\n if (command === \"db\" && args[0] === \"upgrade\") {\n const { options } = parseOptions(args.slice(1));\n await serverEnvironment(options);\n const { migrate, closeDatabase } = await import(\"./core/database.ts\");\n await migrate();\n await closeDatabase();\n console.log(\"Database is up to date\");\n return;\n }\n usage();\n}\n\nif (import.meta.main) main().catch((error: unknown) => { console.error(error instanceof Error ? error.message : error); process.exit(1); });\n"
|
|
9
|
+
"#!/usr/bin/env bun\nimport { mkdir } from \"node:fs/promises\";\nimport { basename, dirname, resolve } from \"node:path\";\n\ntype Options = Record<string, string | boolean>;\n\nfunction usage(exitCode = 1): never {\n console.log(`Usage: aegra <command> [options]\n\nCommands:\n init [path] Create a TypeScript Aegra project\n dev Start with Bun hot reload\n serve Start the production server\n up|down [args] Run Docker Compose\n db upgrade Apply database migrations\n version Print the version\n\nServer options: --host, --port, --config|-c, --env-file|-e\nInit options: --name|-n, --template|-t <basic|hono|auth|full>, --force`);\n process.exit(exitCode);\n}\n\nfunction parseOptions(args: string[]): { positional: string[]; options: Options } {\n const positional: string[] = [];\n const options: Options = {};\n for (let index = 0; index < args.length; index++) {\n const value = args[index]!;\n if (!value.startsWith(\"-\")) { positional.push(value); continue; }\n const [rawName, inline] = value.split(\"=\", 2);\n const name = ({ \"-c\": \"config\", \"-e\": \"env-file\", \"-n\": \"name\", \"-t\": \"template\" } as Record<string, string>)[rawName!] ?? rawName!.replace(/^--/, \"\");\n if ([\"force\", \"help\", \"no-db-check\"].includes(name)) { options[name] = true; continue; }\n const next = inline ?? args[++index];\n if (!next) throw new Error(`Missing value for ${rawName}`);\n options[name] = next;\n }\n return { positional, options };\n}\n\nasync function loadEnv(path: string): Promise<void> {\n const file = Bun.file(path);\n if (!(await file.exists())) return;\n for (const line of (await file.text()).split(/\\r?\\n/)) {\n const match = line.match(/^\\s*(?:export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*?)\\s*$/);\n if (!match || process.env[match[1]!] !== undefined) continue;\n process.env[match[1]!] = match[2]!.replace(/^(['\"])(.*)\\1$/, \"$2\");\n }\n}\n\nfunction run(command: string[], env?: Record<string, string | undefined>): void {\n const result = Bun.spawnSync(command, { stdin: \"inherit\", stdout: \"inherit\", stderr: \"inherit\", ...(env ? { env } : {}) });\n if (result.exitCode !== 0) process.exit(result.exitCode);\n}\n\nasync function serverEnvironment(options: Options): Promise<Record<string, string | undefined>> {\n await loadEnv(String(options[\"env-file\"] ?? resolve(\".env\")));\n if (options.host) process.env.HOST = String(options.host);\n if (options.port) process.env.PORT = String(options.port);\n if (options.config) process.env.AEGRA_CONFIG = resolve(String(options.config));\n else if (!process.env.AEGRA_CONFIG && await Bun.file(resolve(\"langgraph.json\")).exists()\n && !(await Bun.file(resolve(\"aegra.json\")).exists())) process.env.AEGRA_CONFIG = \"langgraph.json\";\n return process.env;\n}\n\nfunction slugify(value: string): string {\n return value.toLowerCase().trim().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\") || \"aegra-agent\";\n}\n\nasync function writeProjectFile(root: string, path: string, content: string, force: boolean): Promise<\"created\" | \"skipped\"> {\n const target = resolve(root, path);\n if (!force && await Bun.file(target).exists()) return \"skipped\";\n await mkdir(dirname(target), { recursive: true });\n await Bun.write(target, content);\n return \"created\";\n}\n\nasync function initProject(args: string[]): Promise<void> {\n const { positional, options } = parseOptions(args);\n if (options.help) usage(0);\n const root = resolve(positional[0] ?? \".\");\n const name = String(options.name ?? basename(root));\n const slug = slugify(name);\n const requestedTemplate = String(options.template ?? \"basic\");\n const template = requestedTemplate === \"1\" ? \"basic\" : requestedTemplate;\n if (![\"basic\", \"hono\", \"auth\", \"full\"].includes(template)) {\n throw new Error(\"Template must be one of: basic, hono, auth, full\");\n }\n\n const pkg = await Bun.file(resolve(import.meta.dir, \"../package.json\")).json() as {\n name: string;\n version: string;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n };\n const dependencyVersion = (name: string, source: Record<string, string>): string => {\n const version = source[name];\n if (!version) throw new Error(`Package metadata is missing ${name}`);\n return version;\n };\n const packageSpec = process.env.AEGRA_INIT_PACKAGE_SPEC?.trim() || pkg.version;\n const bunVersion = dependencyVersion(\"@types/bun\", pkg.devDependencies);\n const escapedName = JSON.stringify(`Hello from ${name}`);\n const graph = `import { AIMessage } from \"@langchain/core/messages\";\\nimport { MessagesAnnotation, StateGraph, START, END } from \"@langchain/langgraph\";\\nimport { defineGraph } from ${JSON.stringify(`${pkg.name}/graph`)};\\n\\nexport const graph = defineGraph(new StateGraph(MessagesAnnotation)\\n .addNode(\"reply\", async () => ({ messages: [new AIMessage(${escapedName})] }))\\n .addEdge(START, \"reply\").addEdge(\"reply\", END).compile());\\n`;\n const withHono = template === \"hono\" || template === \"full\";\n const withAuth = template === \"auth\" || template === \"full\";\n const withRedis = template === \"full\";\n const config = {\n name,\n dependencies: [\"./src\"],\n graphs: { [slug]: \"./src/graph.ts:graph\" },\n ...(withAuth ? { auth: { path: \"./src/auth.ts:auth\" } } : {}),\n ...(withHono ? { http: { app: \"./src/app.ts:app\", ...(withAuth ? { enable_custom_route_auth: true } : {}) } } : {}),\n };\n const redisService = withRedis ? ` redis:\\n image: redis:7-alpine\\n restart: unless-stopped\\n ports:\\n - \"\\${REDIS_PORT:-6379}:6379\"\\n volumes:\\n - redis-data:/data\\n healthcheck:\\n test: [\"CMD\", \"redis-cli\", \"ping\"]\\n interval: 5s\\n timeout: 5s\\n retries: 10\\n\\n` : \"\";\n const redisDependency = withRedis ? ` redis:\\n condition: service_healthy\\n` : \"\";\n const compose = `services:\\n postgres:\\n image: pgvector/pgvector:pg18\\n restart: unless-stopped\\n environment:\\n POSTGRES_USER: \\${POSTGRES_USER:-postgres}\\n POSTGRES_PASSWORD: \\${POSTGRES_PASSWORD:-postgres}\\n POSTGRES_DB: \\${POSTGRES_DB:-aegra}\\n ports:\\n - \"\\${POSTGRES_PORT:-5432}:5432\"\\n volumes:\\n - postgres-data:/var/lib/postgresql\\n healthcheck:\\n test: [\"CMD-SHELL\", \"pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB\"]\\n interval: 5s\\n timeout: 5s\\n retries: 10\\n\\n${redisService} api:\\n build: .\\n restart: unless-stopped\\n ports:\\n - \"\\${PORT:-2026}:2026\"\\n env_file:\\n - .env\\n environment:\\n DATABASE_URL: postgresql://\\${POSTGRES_USER:-postgres}:\\${POSTGRES_PASSWORD:-postgres}@postgres:5432/\\${POSTGRES_DB:-aegra}\\n PORT: \"2026\"\\n AEGRA_CONFIG: /app/aegra.json\\n REDIS_BROKER_ENABLED: \"${withRedis}\"\\n REDIS_URL: redis://redis:6379/0\\n depends_on:\\n postgres:\\n condition: service_healthy\\n${redisDependency} healthcheck:\\n test: [\"CMD\", \"bun\", \"-e\", \"const r=await fetch('http://localhost:2026/health');process.exit(r.ok?0:1)\"]\\n interval: 30s\\n timeout: 10s\\n retries: 3\\n start_period: 10s\\n\\nvolumes:\\n postgres-data:\\n${withRedis ? \" redis-data:\\n\" : \"\"}`;\n const dockerfile = `FROM oven/bun:${bunVersion}-alpine AS install\\nWORKDIR /app\\nCOPY package.json bun.lock ./\\nRUN bun install --frozen-lockfile --production\\n\\nFROM oven/bun:${bunVersion}-alpine AS runtime\\nWORKDIR /app\\nENV NODE_ENV=production\\nCOPY --from=install /app/node_modules ./node_modules\\nCOPY package.json aegra.json ./\\nCOPY src ./src\\nUSER bun\\nEXPOSE 2026\\nCMD [\"bun\", \"run\", \"start\"]\\n`;\n const localServices = `docker compose up -d postgres${withRedis ? \" redis\" : \"\"}`;\n const packageJson = {\n name: slug,\n private: true,\n type: \"module\",\n scripts: {\n dev: \"aegra dev\",\n start: \"aegra serve\",\n check: \"tsc --noEmit\",\n db: \"aegra db upgrade\",\n \"services:up\": localServices,\n \"services:down\": \"docker compose down\",\n \"docker:up\": \"docker compose up --build -d\",\n \"docker:down\": \"docker compose down\",\n },\n dependencies: {\n [pkg.name]: packageSpec,\n \"@langchain/core\": dependencyVersion(\"@langchain/core\", pkg.dependencies),\n \"@langchain/langgraph\": dependencyVersion(\"@langchain/langgraph\", pkg.dependencies),\n ...(withHono ? { hono: dependencyVersion(\"hono\", pkg.dependencies) } : {}),\n },\n devDependencies: {\n \"@types/bun\": bunVersion,\n typescript: dependencyVersion(\"typescript\", pkg.devDependencies),\n },\n engines: { bun: `>=${bunVersion}` },\n packageManager: `bun@${bunVersion}`,\n };\n const files: Record<string, string> = {\n \"aegra.json\": `${JSON.stringify(config, null, 2)}\\n`,\n \"package.json\": `${JSON.stringify(packageJson, null, 2)}\\n`,\n \"tsconfig.json\": `${JSON.stringify({ compilerOptions: { target: \"ES2023\", module: \"Preserve\", moduleResolution: \"bundler\", strict: true, noUncheckedIndexedAccess: true, exactOptionalPropertyTypes: true, noEmit: true, types: [\"bun\"], skipLibCheck: true }, include: [\"src\"] }, null, 2)}\\n`,\n \"src/graph.ts\": graph,\n \".env.example\": `PROJECT_NAME=${name}\\nPORT=2026\\nDATABASE_URL=postgresql://postgres:postgres@localhost:5432/aegra\\nPOSTGRES_USER=postgres\\nPOSTGRES_PASSWORD=postgres\\nPOSTGRES_DB=aegra\\nREDIS_BROKER_ENABLED=${withRedis}\\nREDIS_URL=redis://localhost:6379/0\\n${withAuth ? \"AEGRA_AUTH_TOKEN=replace-me\\n\" : \"\"}`,\n \".gitignore\": `node_modules\\n.env\\ndist\\n*.tsbuildinfo\\n`,\n \".dockerignore\": `node_modules\\n.env\\ndist\\n.git\\n*.log\\n`,\n \"Dockerfile\": dockerfile,\n \"docker-compose.yml\": compose,\n \"README.md\": `# ${name}\\n\\nTypeScript Aegra backend generated with \\`${pkg.name}\\`.\\n\\n## Local development\\n\\n\\`\\`\\`bash\\nbun install\\ncp .env.example .env\\nbun run services:up\\nbun run db\\nbun run dev\\n\\`\\`\\`\\n\\nThe API listens on http://localhost:2026 and exposes its API reference at http://localhost:2026/docs.\\n\\n## Docker\\n\\n\\`\\`\\`bash\\nbun install\\ncp .env.example .env\\nbun run docker:up\\n\\`\\`\\`\\n`,\n };\n if (withHono) files[\"src/app.ts\"] = `import { Hono } from \"hono\";\\nimport { defineApp } from ${JSON.stringify(`${pkg.name}/hono`)};\\nimport type { AppVariables } from ${JSON.stringify(`${pkg.name}/types`)};\\n\\nexport const app = defineApp(new Hono<{ Variables: AppVariables }>().get(\"/hello\", (context) => context.json({ message: ${escapedName} })));\\n`;\n if (withAuth) files[\"src/auth.ts\"] = `import { Auth } from ${JSON.stringify(`${pkg.name}/auth`)};\\n\\nexport const auth = new Auth();\\nauth.authenticate((request) => {\\n const token = process.env.AEGRA_AUTH_TOKEN;\\n if (!token || request.headers.get(\"authorization\") !== \\`Bearer \\${token}\\`) throw new Error(\"Invalid bearer token\");\\n return { identity: request.headers.get(\"x-user-id\")?.trim() || \"authenticated-user\", isAuthenticated: true, permissions: [] };\\n});\\n`;\n let created = 0;\n let skipped = 0;\n for (const [path, content] of Object.entries(files)) {\n if (await writeProjectFile(root, path, content, Boolean(options.force)) === \"created\") created++;\n else skipped++;\n }\n console.log(`Created ${created} files in ${root}${skipped ? ` (${skipped} skipped; use --force to overwrite)` : \"\"}`);\n if (!skipped) {\n const changeDirectory = root === resolve(\".\") ? \"\" : ` cd ${JSON.stringify(root)}\\n`;\n console.log(`\\nNext steps:\\n${changeDirectory} bun install\\n cp .env.example .env\\n bun run services:up\\n bun run db\\n bun run dev`);\n }\n}\n\nexport async function main(argv = process.argv.slice(2)): Promise<void> {\n const [command, ...args] = argv;\n if (!command || command === \"help\" || command === \"--help\") usage(command ? 0 : 1);\n if (command === \"init\") return initProject(args);\n if (command === \"version\" || command === \"--version\") {\n const pkg = await Bun.file(resolve(import.meta.dir, \"../package.json\")).json() as { version: string };\n console.log(pkg.version);\n return;\n }\n if (command === \"dev\" || command === \"serve\") {\n const { options } = parseOptions(args);\n if (options.help) usage(0);\n const env = await serverEnvironment(options);\n const builtEntrypoint = resolve(import.meta.dir, \"index.js\");\n const entrypoint = await Bun.file(builtEntrypoint).exists() ? builtEntrypoint : resolve(import.meta.dir, \"index.ts\");\n if (command === \"dev\") run([\"bun\", \"--hot\", entrypoint], env);\n else await import(entrypoint);\n return;\n }\n if (command === \"up\" || command === \"down\") return run([\"docker\", \"compose\", command, ...args]);\n if (command === \"db\" && args[0] === \"upgrade\") {\n const { options } = parseOptions(args.slice(1));\n await serverEnvironment(options);\n const { migrate, closeDatabase } = await import(\"./core/database.ts\");\n await migrate();\n await closeDatabase();\n console.log(\"Database is up to date\");\n return;\n }\n usage();\n}\n\nif (import.meta.main) main().catch((error: unknown) => { console.error(error instanceof Error ? error.message : error); process.exit(1); });\n"
|
|
10
10
|
],
|
|
11
|
-
"mappings": "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",
|
|
12
|
-
"debugId": "
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "3D3537488E50FB9064756E2164756E21",
|
|
13
13
|
"names": []
|
|
14
14
|
}
|
package/dist/graph.d.ts
CHANGED
|
@@ -13,8 +13,8 @@ export type RunnableGraph = {
|
|
|
13
13
|
toJSON(): Record<string, unknown>;
|
|
14
14
|
}>;
|
|
15
15
|
getSubgraphsAsync?(namespace?: string, recurse?: boolean): AsyncGenerator<[string, RunnableGraph]>;
|
|
16
|
-
builder?:
|
|
17
|
-
checkpointer?: BaseCheckpointSaver;
|
|
16
|
+
builder?: unknown;
|
|
17
|
+
checkpointer?: BaseCheckpointSaver | boolean;
|
|
18
18
|
store?: BaseStore;
|
|
19
19
|
};
|
|
20
20
|
export interface ServerRuntime {
|
package/dist/graph.js.map
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/graph.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import type { RunnableConfig } from \"@langchain/core/runnables\";\nimport type { BaseCheckpointSaver, BaseStore } from \"@langchain/langgraph-checkpoint\";\nimport type { AuthUser, JsonObject } from \"./types.ts\";\n\nexport type RunnableGraph = {\n invoke(input: unknown, options?: Record<string, unknown>): Promise<unknown>;\n stream(input: unknown, options?: Record<string, unknown>): Promise<AsyncIterable<unknown>>;\n getState?(config: RunnableConfig, options?: Record<string, unknown>): Promise<unknown>;\n getStateHistory?(config: RunnableConfig, options?: Record<string, unknown>): AsyncIterable<unknown>;\n updateState?(config: RunnableConfig, values: unknown, asNode?: string): Promise<RunnableConfig>;\n getGraphAsync?(config?: RunnableConfig & { xray?: boolean | number }): Promise<{ toJSON(): Record<string, unknown> }>;\n getSubgraphsAsync?(namespace?: string, recurse?: boolean): AsyncGenerator<[string, RunnableGraph]>;\n builder?:
|
|
5
|
+
"import type { RunnableConfig } from \"@langchain/core/runnables\";\nimport type { BaseCheckpointSaver, BaseStore } from \"@langchain/langgraph-checkpoint\";\nimport type { AuthUser, JsonObject } from \"./types.ts\";\n\nexport type RunnableGraph = {\n invoke(input: unknown, options?: Record<string, unknown>): Promise<unknown>;\n stream(input: unknown, options?: Record<string, unknown>): Promise<AsyncIterable<unknown>>;\n getState?(config: RunnableConfig, options?: Record<string, unknown>): Promise<unknown>;\n getStateHistory?(config: RunnableConfig, options?: Record<string, unknown>): AsyncIterable<unknown>;\n updateState?(config: RunnableConfig, values: unknown, asNode?: string): Promise<RunnableConfig>;\n getGraphAsync?(config?: RunnableConfig & { xray?: boolean | number }): Promise<{ toJSON(): Record<string, unknown> }>;\n getSubgraphsAsync?(namespace?: string, recurse?: boolean): AsyncGenerator<[string, RunnableGraph]>;\n builder?: unknown;\n checkpointer?: BaseCheckpointSaver | boolean;\n store?: BaseStore;\n};\n\nexport interface ServerRuntime {\n accessContext: \"threads.create_run\" | \"threads.update\" | \"threads.read\" | \"assistants.read\";\n user: AuthUser;\n store?: BaseStore;\n context?: JsonObject | null;\n}\n\nexport type GraphFactory =\n | (() => RunnableGraph | Promise<RunnableGraph>)\n | ((config: RunnableConfig | undefined) => RunnableGraph | Promise<RunnableGraph>)\n | ((runtime: ServerRuntime) => RunnableGraph | Promise<RunnableGraph>)\n | ((config: RunnableConfig | undefined, runtime: ServerRuntime) => RunnableGraph | Promise<RunnableGraph>);\n\nexport type GraphDefinition = RunnableGraph | GraphFactory;\n\nexport function defineGraph<T extends GraphDefinition>(graph: T): T {\n return graph;\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": ";;;;;;;;;;;;;;;;;;AAgCO,SAAS,WAAsC,CAAC,OAAa;AAAA,EAClE,OAAO;AAAA;",
|
|
8
8
|
"debugId": "3C2AFB1C029A7EE964756E2164756E21",
|
package/dist/index.js
CHANGED
|
@@ -22,7 +22,7 @@ var init_settings = __esm(() => {
|
|
|
22
22
|
booleanFromEnv = z.stringbool().default(false);
|
|
23
23
|
environmentSchema = z.object({
|
|
24
24
|
PROJECT_NAME: z.string().default("Aegra"),
|
|
25
|
-
VERSION: z.string().default("0.11.
|
|
25
|
+
VERSION: z.string().default("0.11.1"),
|
|
26
26
|
ENV_MODE: z.string().default("PRODUCTION"),
|
|
27
27
|
LOG_VERBOSITY: z.string().default("verbose"),
|
|
28
28
|
LOG_EXCLUDE_PATHS: z.string().default(""),
|
|
@@ -1283,7 +1283,7 @@ function jsonSchema(runtime, definition, input = false) {
|
|
|
1283
1283
|
return { type: "object", properties: definitionProperties(definition) };
|
|
1284
1284
|
}
|
|
1285
1285
|
function graphSchemas(graph) {
|
|
1286
|
-
const builder = graph.builder;
|
|
1286
|
+
const builder = graph.builder && typeof graph.builder === "object" ? graph.builder : undefined;
|
|
1287
1287
|
return {
|
|
1288
1288
|
input_schema: jsonSchema(builder?._inputRuntimeDefinition, builder?._inputDefinition, true),
|
|
1289
1289
|
output_schema: jsonSchema(builder?._outputRuntimeDefinition, builder?._outputDefinition),
|
|
@@ -3175,7 +3175,7 @@ var openapi_default = {
|
|
|
3175
3175
|
info: {
|
|
3176
3176
|
title: "Aegra",
|
|
3177
3177
|
description: "\u751F\u4EA7\u53EF\u7528\u7684 Agent Protocol \u670D\u52A1\u7AEF",
|
|
3178
|
-
version: "0.11.
|
|
3178
|
+
version: "0.11.1"
|
|
3179
3179
|
},
|
|
3180
3180
|
paths: {
|
|
3181
3181
|
"/info": {
|
|
@@ -10180,4 +10180,4 @@ async function shutdown() {
|
|
|
10180
10180
|
process.on("SIGINT", () => void shutdown().then(() => process.exit(0)));
|
|
10181
10181
|
process.on("SIGTERM", () => void shutdown().then(() => process.exit(0)));
|
|
10182
10182
|
|
|
10183
|
-
//# debugId=
|
|
10183
|
+
//# debugId=102CE14D822106BF64756E2164756E21
|