Skip to content

Commit 1056ea9

Browse files
committed
Merge branch 'main' of github.com:devforth/adminforth
2 parents 5eb5d21 + 8db8d87 commit 1056ea9

14 files changed

Lines changed: 232 additions & 34 deletions

File tree

live-demo/app/index.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1-
import betterSqlite3 from 'better-sqlite3';
21
import express from 'express';
3-
import AdminForth, { AdminForthDataTypes, Filters, AdminForthResource, AdminForthResourceColumn } from 'adminforth';
2+
import type { Request, Response } from 'express';
3+
import AdminForth, { Filters } from 'adminforth';
4+
import type { AdminUser } from 'adminforth';
45
import fs from 'fs';
56
import usersResource from "./resources/users";
67
import apartmentsResource from "./resources/apartments";
78
import auditLogsResource from "./resources/auditLogs"
89
import translations from "./resources/translations";
910
import sessionsResource from './resources/agent_resources/sessions';
1011
import turnsResource from './resources/agent_resources/turns';
12+
import checkpointsResource from './resources/agent_resources/checkpoints';
1113
import jobs_resource from './resources/jobs';
1214
import { randomUUID } from 'crypto';
1315
try { fs.mkdirSync('db') } catch (e) {}
@@ -66,6 +68,7 @@ new AdminForth({
6668
translations,
6769
sessionsResource,
6870
turnsResource,
71+
checkpointsResource,
6972
jobs_resource,
7073
],
7174
menu: [
@@ -179,7 +182,7 @@ if (import.meta.url === `file://${process.argv[1]}`) {
179182
},
180183
},
181184
admin.express.authorize(
182-
async (req, res) => {
185+
async (req: Request, res: Response) => {
183186
const db = admin.resource('aparts').dataConnector.client;
184187
const days = req.body.days || 7;
185188
const apartsByDays = await db.prepare(
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
-- CreateTable
2+
CREATE TABLE "agent_checkpoints" (
3+
"id" TEXT NOT NULL PRIMARY KEY,
4+
"thread_id" TEXT NOT NULL,
5+
"checkpoint_namespace" TEXT NOT NULL,
6+
"checkpoint_id" TEXT NOT NULL,
7+
"parent_checkpoint_id" TEXT,
8+
"row_kind" TEXT NOT NULL,
9+
"task_id" TEXT,
10+
"sequence" INTEGER NOT NULL,
11+
"created_at" DATETIME NOT NULL,
12+
"checkpoint_payload" TEXT,
13+
"metadata_payload" TEXT,
14+
"writes_payload" TEXT,
15+
"schema_version" INTEGER NOT NULL
16+
);
17+
18+
-- CreateIndex
19+
CREATE INDEX "agent_checkpoints_thread_id_checkpoint_namespace_checkpoint_id_idx" ON "agent_checkpoints"("thread_id", "checkpoint_namespace", "checkpoint_id");
20+
21+
-- CreateIndex
22+
CREATE INDEX "agent_checkpoints_created_at_idx" ON "agent_checkpoints"("created_at");

live-demo/app/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"@adminforth/agent": "^1.41.0",
2020
"@adminforth/audio-adapter-openai": "^1.2.0",
2121
"@adminforth/audit-log": "^1.9.18",
22+
"@adminforth/auto-remove": "^1.0.8",
2223
"@adminforth/background-jobs": "^1.11.4",
2324
"@adminforth/bulk-ai-flow": "^1.24.3",
2425
"@adminforth/chat-gpt": "^1.0.20",

live-demo/app/pnpm-lock.yaml

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import { AdminForthDataTypes } from 'adminforth';
2+
import type { AdminForthResourceInput, AdminUser } from 'adminforth';
3+
import AutoRemovePlugin from '@adminforth/auto-remove';
4+
5+
async function allowedForSuperAdmins({ adminUser }: { adminUser: AdminUser }): Promise<boolean> {
6+
return adminUser.dbUser.role === 'superadmin';
7+
}
8+
9+
const checkpointsResource: AdminForthResourceInput = {
10+
dataSource: 'maindb',
11+
table: 'agent_checkpoints',
12+
resourceId: 'agent_checkpoints',
13+
label: 'Agent Checkpoints',
14+
columns: [
15+
{
16+
name: 'id',
17+
primaryKey: true,
18+
type: AdminForthDataTypes.STRING,
19+
showIn: {
20+
edit: false,
21+
create: false,
22+
},
23+
},
24+
{
25+
name: 'thread_id',
26+
type: AdminForthDataTypes.STRING,
27+
},
28+
{
29+
name: 'checkpoint_namespace',
30+
type: AdminForthDataTypes.STRING,
31+
},
32+
{
33+
name: 'checkpoint_id',
34+
type: AdminForthDataTypes.STRING,
35+
},
36+
{
37+
name: 'parent_checkpoint_id',
38+
type: AdminForthDataTypes.STRING,
39+
},
40+
{
41+
name: 'row_kind',
42+
type: AdminForthDataTypes.STRING,
43+
},
44+
{
45+
name: 'task_id',
46+
type: AdminForthDataTypes.STRING,
47+
},
48+
{
49+
name: 'sequence',
50+
type: AdminForthDataTypes.INTEGER,
51+
},
52+
{
53+
name: 'created_at',
54+
type: AdminForthDataTypes.DATETIME,
55+
showIn: {
56+
edit: false,
57+
create: false,
58+
},
59+
},
60+
{
61+
name: 'checkpoint_payload',
62+
type: AdminForthDataTypes.TEXT,
63+
},
64+
{
65+
name: 'metadata_payload',
66+
type: AdminForthDataTypes.TEXT,
67+
},
68+
{
69+
name: 'writes_payload',
70+
type: AdminForthDataTypes.TEXT,
71+
},
72+
{
73+
name: 'schema_version',
74+
type: AdminForthDataTypes.INTEGER,
75+
},
76+
],
77+
plugins: [
78+
new AutoRemovePlugin({
79+
createdAtField: 'created_at',
80+
mode: 'time-based',
81+
deleteOlderThan: '3d',
82+
interval: '1d',
83+
}),
84+
],
85+
options: {
86+
allowedActions: {
87+
list: allowedForSuperAdmins,
88+
show: allowedForSuperAdmins,
89+
create: false,
90+
edit: false,
91+
delete: false,
92+
},
93+
},
94+
};
95+
96+
export default checkpointsResource;

live-demo/app/resources/agent_resources/sessions.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ async function allowedForSuperAdmins({ adminUser }: { adminUser: AdminUser }): P
66
return adminUser.dbUser.role === 'superadmin';
77
}
88

9-
export default {
9+
const sessionsResource: AdminForthResourceInput = {
1010
dataSource: 'maindb',
1111
table: 'sessions',
1212
resourceId: 'sessions',
@@ -53,4 +53,6 @@ export default {
5353
delete: false,
5454
},
5555
},
56-
} as AdminForthResourceInput;
56+
};
57+
58+
export default sessionsResource;

live-demo/app/resources/agent_resources/turns.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ async function allowedForSuperAdmins({ adminUser }: { adminUser: AdminUser }): P
66
return adminUser.dbUser.role === 'superadmin';
77
}
88

9-
export default {
9+
const turnsResource: AdminForthResourceInput = {
1010
dataSource: 'maindb',
1111
table: 'turns',
1212
resourceId: 'turns',
@@ -53,4 +53,6 @@ export default {
5353
delete: false,
5454
},
5555
},
56-
} as AdminForthResourceInput;
56+
};
57+
58+
export default turnsResource;

live-demo/app/resources/apartments.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { AdminForthDataTypes } from 'adminforth';
2+
import type { AdminForthResourceInput } from 'adminforth';
23
import importExport from '@adminforth/import-export';
34
import RichEditorPlugin from '@adminforth/rich-editor';
45
import TextCompletePlugin from '@adminforth/text-complete';
@@ -11,14 +12,14 @@ import BulkAiFlowPlugin from '@adminforth/bulk-ai-flow';
1112
import AdminForthImageVisionAdapterOpenAi from '@adminforth/image-vision-adapter-openai';
1213
import CloneRow from "@adminforth/clone-row";
1314

14-
const blockDemoUsers = async ({ record, adminUser, resource }) => {
15+
const blockDemoUsers = async ({ adminUser }: { adminUser: any }) => {
1516
if (adminUser.dbUser && adminUser.dbUser.role !== 'superadmin') {
1617
return { ok: false, error: "You can't do this on demo.adminforth.dev" }
1718
}
1819
return { ok: true };
1920
}
2021

21-
export default {
22+
const apartmentsResource: AdminForthResourceInput = {
2223
dataSource: 'maindb',
2324
table: 'apartments',
2425
resourceId: 'aparts', // resourceId is defaulted to table name but you can redefine it like this e.g.
@@ -142,7 +143,7 @@ export default {
142143
},
143144
{
144145
name: 'description',
145-
type: AdminForthDataTypes.RICHTEXT,
146+
type: AdminForthDataTypes.TEXT,
146147
sortable: false,
147148
showIn: ['show', 'edit', 'create', 'filter'],
148149
components: {
@@ -170,15 +171,10 @@ export default {
170171
adapter: new CompletionAdapterOpenAIResponses({
171172
openAiApiKey: process.env.OPENAI_API_KEY as string,
172173
model: 'gpt-4o', // default "gpt-4o-mini"
173-
expert: {
174-
temperature: 0.7 //Model temperature, default 0.7
174+
extraRequestBodyParameters: {
175+
temperature: 0.7,
175176
}
176177
}),
177-
provider: 'openai-chat-gpt',
178-
params: {
179-
apiKey: process.env.OPENAI_API_KEY as string,
180-
// model: 'gpt-4o', gpt-4o-model is a default (cheapest one)
181-
},
182178
expert: {
183179
debounceTime: 250,
184180
}
@@ -295,4 +291,6 @@ export default {
295291
filter: true,
296292
},
297293
},
298-
}
294+
};
295+
296+
export default apartmentsResource;

live-demo/app/resources/auditLogs.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import AuditLogPlugin from '@adminforth/audit-log';
22
import { AdminForthDataTypes } from 'adminforth'
3+
import type { AdminForthResourceInput } from 'adminforth';
34
import { randomUUID } from 'crypto';
45
import importExport from '@adminforth/import-export';
56

67

78

8-
export default {
9+
const auditLogsResource: AdminForthResourceInput = {
910
dataSource: 'maindb',
1011
table: 'audit_logs',
1112
columns: [
@@ -43,4 +44,6 @@ export default {
4344
}
4445
}),
4546
],
46-
}
47+
};
48+
49+
export default auditLogsResource;

live-demo/app/resources/jobs.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ async function allowedForSuperAdmin({ adminUser }: { adminUser: AdminUser }): Pr
77
return adminUser.dbUser.role === 'superadmin';
88
}
99

10-
export default {
10+
const jobsResource: AdminForthResourceInput = {
1111
dataSource: 'maindb',
1212
table: 'jobs',
1313
resourceId: 'jobs',
@@ -105,4 +105,6 @@ export default {
105105
jobHandlerField: 'job_handler_name',
106106
})
107107
]
108-
} as AdminForthResourceInput;
108+
};
109+
110+
export default jobsResource;

0 commit comments

Comments
 (0)