agentenkit 0.1.5 → 0.2.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 +48 -2
- package/dist/adapters/memory.d.ts +2 -2
- package/dist/adapters/memory.d.ts.map +1 -1
- package/dist/adapters/memory.js +3 -9
- package/dist/adapters/memory.js.map +1 -1
- package/dist/adapters/prisma.d.ts +61 -18
- package/dist/adapters/prisma.d.ts.map +1 -1
- package/dist/adapters/prisma.js +65 -16
- package/dist/adapters/prisma.js.map +1 -1
- package/dist/adapters/sqlite.d.ts +3 -2
- package/dist/adapters/sqlite.d.ts.map +1 -1
- package/dist/adapters/sqlite.js +82 -11
- package/dist/adapters/sqlite.js.map +1 -1
- package/dist/admin/default.d.ts +11 -4
- package/dist/admin/default.d.ts.map +1 -1
- package/dist/admin/default.js +11 -6
- package/dist/admin/default.js.map +1 -1
- package/dist/admin/memory.d.ts.map +1 -1
- package/dist/admin/memory.js +8 -2
- package/dist/admin/memory.js.map +1 -1
- package/dist/admin/migrations/postgres/0001-init.d.ts +10 -0
- package/dist/admin/migrations/postgres/0001-init.d.ts.map +1 -0
- package/dist/admin/migrations/postgres/0001-init.js +56 -0
- package/dist/admin/migrations/postgres/0001-init.js.map +1 -0
- package/dist/admin/migrations/postgres/index.d.ts +9 -0
- package/dist/admin/migrations/postgres/index.d.ts.map +1 -0
- package/dist/admin/migrations/postgres/index.js +17 -0
- package/dist/admin/migrations/postgres/index.js.map +1 -0
- package/dist/admin/migrations/runner.d.ts +81 -0
- package/dist/admin/migrations/runner.d.ts.map +1 -0
- package/dist/admin/migrations/runner.js +137 -0
- package/dist/admin/migrations/runner.js.map +1 -0
- package/dist/admin/migrations/sqlite/0001-init.d.ts +11 -0
- package/dist/admin/migrations/sqlite/0001-init.d.ts.map +1 -0
- package/dist/admin/migrations/sqlite/0001-init.js +44 -0
- package/dist/admin/migrations/sqlite/0001-init.js.map +1 -0
- package/dist/admin/migrations/sqlite/index.d.ts +7 -0
- package/dist/admin/migrations/sqlite/index.d.ts.map +1 -0
- package/dist/admin/migrations/sqlite/index.js +38 -0
- package/dist/admin/migrations/sqlite/index.js.map +1 -0
- package/dist/admin/postgres.d.ts +27 -4
- package/dist/admin/postgres.d.ts.map +1 -1
- package/dist/admin/postgres.js +49 -55
- package/dist/admin/postgres.js.map +1 -1
- package/dist/admin/sqlite.d.ts +18 -2
- package/dist/admin/sqlite.d.ts.map +1 -1
- package/dist/admin/sqlite.js +51 -54
- package/dist/admin/sqlite.js.map +1 -1
- package/dist/core/admin.d.ts +8 -1
- package/dist/core/admin.d.ts.map +1 -1
- package/dist/core/admin.js +21 -2
- package/dist/core/admin.js.map +1 -1
- package/dist/core/agent.d.ts +3 -0
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +4 -4
- package/dist/core/agent.js.map +1 -1
- package/dist/core/context.d.ts +5 -0
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +38 -9
- package/dist/core/context.js.map +1 -1
- package/dist/core/engine.d.ts +4 -1
- package/dist/core/engine.d.ts.map +1 -1
- package/dist/core/engine.js +93 -20
- package/dist/core/engine.js.map +1 -1
- package/dist/core/hitl.d.ts.map +1 -1
- package/dist/core/hitl.js +6 -0
- package/dist/core/hitl.js.map +1 -1
- package/dist/core/loop.d.ts +35 -0
- package/dist/core/loop.d.ts.map +1 -1
- package/dist/core/loop.js +134 -19
- package/dist/core/loop.js.map +1 -1
- package/dist/core/messages.d.ts +48 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +74 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/publish.d.ts +21 -1
- package/dist/core/publish.d.ts.map +1 -1
- package/dist/core/publish.js +57 -3
- package/dist/core/publish.js.map +1 -1
- package/dist/core/run.d.ts.map +1 -1
- package/dist/core/run.js +44 -4
- package/dist/core/run.js.map +1 -1
- package/dist/core/stop.d.ts.map +1 -1
- package/dist/core/stop.js +42 -0
- package/dist/core/stop.js.map +1 -1
- package/dist/core/subagent.d.ts +5 -0
- package/dist/core/subagent.d.ts.map +1 -1
- package/dist/core/subagent.js +23 -10
- package/dist/core/subagent.js.map +1 -1
- package/dist/core/tools.d.ts +12 -0
- package/dist/core/tools.d.ts.map +1 -1
- package/dist/core/tools.js.map +1 -1
- package/dist/core/types.d.ts +164 -9
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +9 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/usage.d.ts +47 -2
- package/dist/core/usage.d.ts.map +1 -1
- package/dist/core/usage.js +130 -2
- package/dist/core/usage.js.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/ports/admin.d.ts +18 -0
- package/dist/ports/admin.d.ts.map +1 -1
- package/dist/ports/runtime.d.ts +78 -4
- package/dist/ports/runtime.d.ts.map +1 -1
- package/dist/ports/storage.d.ts +16 -4
- package/dist/ports/storage.d.ts.map +1 -1
- package/dist/pricing.d.ts +66 -0
- package/dist/pricing.d.ts.map +1 -0
- package/dist/pricing.js +98 -0
- package/dist/pricing.js.map +1 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +7 -2
- package/dist/runtime.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { sql as init } from './0001-init.js';
|
|
2
|
+
/** The admin migrations for SQLite, in apply order. Append only. */
|
|
3
|
+
export const migrations = [{ version: '0001_init', sql: init }];
|
|
4
|
+
/** Columns added after the first release, per table. SQLite cannot express
|
|
5
|
+
* ADD COLUMN IF NOT EXISTS, so these are checked against the live table. */
|
|
6
|
+
const LATER_COLUMNS = {
|
|
7
|
+
agentic_steps: { text: 'TEXT', toolCalls: 'TEXT', threadId: 'TEXT' },
|
|
8
|
+
agentic_runs: {
|
|
9
|
+
prompt: 'TEXT', tokenBudget: 'INTEGER', runState: 'TEXT', providerOptions: 'TEXT',
|
|
10
|
+
},
|
|
11
|
+
agentic_threads: { startedWith: 'TEXT' },
|
|
12
|
+
};
|
|
13
|
+
/** Add the columns a database created by an older release never got. A table
|
|
14
|
+
* that does not exist at all is left alone: on a fresh database the migration
|
|
15
|
+
* files create it, columns and all. */
|
|
16
|
+
async function repair(db) {
|
|
17
|
+
for (const [table, columns] of Object.entries(LATER_COLUMNS)) {
|
|
18
|
+
const have = new Set((await db.rows(`PRAGMA table_info(${table})`)).map((r) => String(r.name)));
|
|
19
|
+
if (have.size === 0)
|
|
20
|
+
continue; // no such table yet
|
|
21
|
+
for (const [column, type] of Object.entries(columns)) {
|
|
22
|
+
if (!have.has(column))
|
|
23
|
+
await db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${type}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** SQLite needs no lock: the driver holds one connection and the database
|
|
28
|
+
* takes one writer at a time. */
|
|
29
|
+
export const dialect = {
|
|
30
|
+
name: 'sqlite',
|
|
31
|
+
ledger: `CREATE TABLE IF NOT EXISTS agentic_migrations (
|
|
32
|
+
version TEXT PRIMARY KEY, checksum TEXT NOT NULL, appliedAt INTEGER NOT NULL)`,
|
|
33
|
+
insert: `INSERT INTO agentic_migrations (version, checksum, appliedAt)
|
|
34
|
+
VALUES (?, ?, CAST(strftime('%s','now') AS INTEGER) * 1000)`,
|
|
35
|
+
selectOne: 'SELECT version FROM agentic_migrations WHERE version = ?',
|
|
36
|
+
repair,
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/admin/migrations/sqlite/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE7C,oEAAoE;AACpE,MAAM,CAAC,MAAM,UAAU,GAAgB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AAE7E;6EAC6E;AAC7E,MAAM,aAAa,GAA2C;IAC5D,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;IACpE,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;KAClF;IACD,eAAe,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;CACzC,CAAC;AAEF;;wCAEwC;AACxC,KAAK,UAAU,MAAM,CAAC,EAAmB;IACvC,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,CAClB,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAC1E,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,SAAS,CAAC,oBAAoB;QACnD,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,MAAM,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,eAAe,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;AACH,CAAC;AAED;kCACkC;AAClC,MAAM,CAAC,MAAM,OAAO,GAAqB;IACvC,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE;kFACwE;IAChF,MAAM,EAAE;uEAC6D;IACrE,SAAS,EAAE,0DAA0D;IACrE,MAAM;CACP,CAAC"}
|
package/dist/admin/postgres.d.ts
CHANGED
|
@@ -6,6 +6,19 @@ export interface PgLike {
|
|
|
6
6
|
query(text: string, params?: unknown[]): Promise<{
|
|
7
7
|
rows: any[];
|
|
8
8
|
}>;
|
|
9
|
+
/** Checks out ONE connection. `pg`'s Pool has it; a bare Client does not,
|
|
10
|
+
* and does not need it — it already is one connection.
|
|
11
|
+
*
|
|
12
|
+
* The migrator needs this: a pool hands each query whichever connection is
|
|
13
|
+
* free, so BEGIN on one and DDL on another is not a transaction at all. */
|
|
14
|
+
connect?(): Promise<PgClientLike>;
|
|
15
|
+
}
|
|
16
|
+
/** One checked-out connection, which must be handed back. */
|
|
17
|
+
export interface PgClientLike {
|
|
18
|
+
query(text: string, params?: unknown[]): Promise<{
|
|
19
|
+
rows: any[];
|
|
20
|
+
}>;
|
|
21
|
+
release(): void;
|
|
9
22
|
}
|
|
10
23
|
/** Open a `pg` Pool from a connection string. Dynamically imported so the
|
|
11
24
|
* driver only loads for callers who actually use Postgres, and marked
|
|
@@ -17,10 +30,20 @@ export declare function openPostgres(url: string): Promise<PgLike>;
|
|
|
17
30
|
export declare class PostgresAdminStore implements AdminStore {
|
|
18
31
|
private readonly db;
|
|
19
32
|
private constructor();
|
|
20
|
-
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
|
|
33
|
+
/** The store with its schema migration already running behind it (§2.9).
|
|
34
|
+
*
|
|
35
|
+
* Connecting stays synchronous — a URL that cannot be reached is a
|
|
36
|
+
* configuration problem worth failing on at startup. Only the schema moves
|
|
37
|
+
* to the background, so a service starts at the same speed whether or not
|
|
38
|
+
* it has migrating to do, and the returned store waits for it before its
|
|
39
|
+
* first call.
|
|
40
|
+
*
|
|
41
|
+
* Several workers starting at once is expected and safe: each migration
|
|
42
|
+
* runs under a transaction-scoped advisory lock, so they queue rather than
|
|
43
|
+
* race. */
|
|
44
|
+
static connect(db: PgLike, log?: {
|
|
45
|
+
error(message: string, ...rest: unknown[]): void;
|
|
46
|
+
}): AdminStore;
|
|
24
47
|
threads: {
|
|
25
48
|
upsert: (t: NewAdminThread) => Promise<void>;
|
|
26
49
|
countByState: () => Promise<Partial<Record<ExecutionState, number>>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/admin/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EACV,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAC1D,aAAa,EAAE,SAAS,EAAE,UAAU,EACrC,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/admin/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EACV,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAC1D,aAAa,EAAE,SAAS,EAAE,UAAU,EACrC,MAAM,mBAAmB,CAAC;AAI3B;2EAC2E;AAC3E,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAC;IAClE;;;;gFAI4E;IAC5E,OAAO,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;CACnC;AAED,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAC;IAClE,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;gEAEgE;AAChE,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY/D;AAmCD;;oEAEoE;AACpE,qBAAa,kBAAmB,YAAW,UAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAvC,OAAO;IAEP;;;;;;;;;;gBAUY;IACZ,MAAM,CAAC,OAAO,CACZ,EAAE,EAAE,MAAM,EACV,GAAG,CAAC,EAAE;QAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;KAAE,GACzD,UAAU;IAYb,OAAO;oBACa,cAAc;;kBAiBhB,iBAAiB,KAAG,OAAO,CAAC,WAAW,EAAE,CAAC;MAkB1D;IAEF,IAAI;qBACiB,YAAY;uBAeV,MAAM,SAAS,QAAQ;qBAczB,MAAM;iCAIM,MAAM;kBAOrB,SAAS;;MAuBzB;IAEF,KAAK;oBACe,aAAa;2BAgBN,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CAAC;iCAOxB,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CAAC;MAO7D;CACH"}
|
package/dist/admin/postgres.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { gatedAdminStore, runMigrations } from './migrations/runner.js';
|
|
2
|
+
import { dialect, migrations } from './migrations/postgres/index.js';
|
|
1
3
|
/** Open a `pg` Pool from a connection string. Dynamically imported so the
|
|
2
4
|
* driver only loads for callers who actually use Postgres, and marked
|
|
3
5
|
* webpackIgnore so a bundler leaves it as a runtime import. */
|
|
@@ -13,49 +15,24 @@ export async function openPostgres(url) {
|
|
|
13
15
|
`admin store. (${err instanceof Error ? err.message : String(err)})`);
|
|
14
16
|
}
|
|
15
17
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
"outputTokens" INT NOT NULL DEFAULT 0, "totalTokens" INT NOT NULL DEFAULT 0,
|
|
35
|
-
result JSONB, prompt TEXT, "tokenBudget" INT, "runState" JSONB
|
|
36
|
-
)`,
|
|
37
|
-
`ALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS prompt TEXT`,
|
|
38
|
-
`ALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS "tokenBudget" INT`,
|
|
39
|
-
`ALTER TABLE agentic_runs ADD COLUMN IF NOT EXISTS "runState" JSONB`,
|
|
40
|
-
`CREATE INDEX IF NOT EXISTS agentic_runs_thread ON agentic_runs("threadId", "startedAt" DESC)`,
|
|
41
|
-
`CREATE INDEX IF NOT EXISTS agentic_runs_state ON agentic_runs(state, "startedAt" DESC)`,
|
|
42
|
-
`CREATE INDEX IF NOT EXISTS agentic_runs_parent ON agentic_runs("parentRunId")`,
|
|
43
|
-
`CREATE TABLE IF NOT EXISTS agentic_steps (
|
|
44
|
-
"runId" TEXT NOT NULL, "threadId" TEXT, "agentId" TEXT, "index" INT NOT NULL,
|
|
45
|
-
"durationMs" INT NOT NULL, "finishReason" TEXT NOT NULL,
|
|
46
|
-
"inputTokens" INT NOT NULL DEFAULT 0, "cachedInputTokens" INT NOT NULL DEFAULT 0,
|
|
47
|
-
"outputTokens" INT NOT NULL DEFAULT 0, "totalTokens" INT NOT NULL DEFAULT 0,
|
|
48
|
-
tools JSONB, text TEXT, "toolCalls" JSONB,
|
|
49
|
-
at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
50
|
-
)`,
|
|
51
|
-
// CREATE TABLE IF NOT EXISTS leaves an existing table alone, so newer
|
|
52
|
-
// columns are added separately.
|
|
53
|
-
`ALTER TABLE agentic_steps ADD COLUMN IF NOT EXISTS text TEXT`,
|
|
54
|
-
`ALTER TABLE agentic_steps ADD COLUMN IF NOT EXISTS "threadId" TEXT`,
|
|
55
|
-
`CREATE INDEX IF NOT EXISTS agentic_steps_thread ON agentic_steps("threadId", at)`,
|
|
56
|
-
`ALTER TABLE agentic_steps ADD COLUMN IF NOT EXISTS "toolCalls" JSONB`,
|
|
57
|
-
`CREATE INDEX IF NOT EXISTS agentic_steps_run ON agentic_steps("runId", "index")`,
|
|
58
|
-
];
|
|
18
|
+
/** Run the migrations on ONE connection, checked out for the length of the
|
|
19
|
+
* transaction and handed back after. */
|
|
20
|
+
async function migrate(db) {
|
|
21
|
+
const client = db.connect ? await db.connect() : null;
|
|
22
|
+
const handle = client ?? db;
|
|
23
|
+
const driver = {
|
|
24
|
+
exec: async (sql, params = []) => {
|
|
25
|
+
await handle.query(sql, params);
|
|
26
|
+
},
|
|
27
|
+
rows: async (sql, params = []) => (await handle.query(sql, params)).rows,
|
|
28
|
+
};
|
|
29
|
+
try {
|
|
30
|
+
await runMigrations(driver, dialect, migrations);
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
client?.release();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
59
36
|
const toRun = (r) => ({
|
|
60
37
|
id: r.id, threadId: r.threadId, parentRunId: r.parentRunId ?? null, depth: r.depth,
|
|
61
38
|
agent: r.agent, model: r.model, state: r.state,
|
|
@@ -67,7 +44,7 @@ const toRun = (r) => ({
|
|
|
67
44
|
outputTokens: r.outputTokens, totalTokens: r.totalTokens,
|
|
68
45
|
result: r.result ?? null,
|
|
69
46
|
prompt: r.prompt ?? null, tokenBudget: r.tokenBudget ?? null,
|
|
70
|
-
runState: r.runState ?? null,
|
|
47
|
+
runState: r.runState ?? null, providerOptions: r.providerOptions ?? null,
|
|
71
48
|
});
|
|
72
49
|
/** Operational history in Postgres — the production store (§2.9), reached
|
|
73
50
|
* through AGENTIC_KIT_ADMIN_DATABASE_URL. Point it at its own database or the
|
|
@@ -77,19 +54,34 @@ export class PostgresAdminStore {
|
|
|
77
54
|
constructor(db) {
|
|
78
55
|
this.db = db;
|
|
79
56
|
}
|
|
80
|
-
/**
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
57
|
+
/** The store with its schema migration already running behind it (§2.9).
|
|
58
|
+
*
|
|
59
|
+
* Connecting stays synchronous — a URL that cannot be reached is a
|
|
60
|
+
* configuration problem worth failing on at startup. Only the schema moves
|
|
61
|
+
* to the background, so a service starts at the same speed whether or not
|
|
62
|
+
* it has migrating to do, and the returned store waits for it before its
|
|
63
|
+
* first call.
|
|
64
|
+
*
|
|
65
|
+
* Several workers starting at once is expected and safe: each migration
|
|
66
|
+
* runs under a transaction-scoped advisory lock, so they queue rather than
|
|
67
|
+
* race. */
|
|
68
|
+
static connect(db, log) {
|
|
69
|
+
const store = new PostgresAdminStore(db);
|
|
70
|
+
const ready = migrate(db).catch((err) => {
|
|
71
|
+
// Loud, because everything downstream of this is silent: admin writes
|
|
72
|
+
// are best effort, so a failed migration shows up as a dashboard with
|
|
73
|
+
// nothing in it rather than as an error.
|
|
74
|
+
(log ?? console).error('admin migrations failed', err);
|
|
75
|
+
throw err;
|
|
76
|
+
});
|
|
77
|
+
return gatedAdminStore(store, ready);
|
|
87
78
|
}
|
|
88
79
|
threads = {
|
|
89
80
|
upsert: async (t) => {
|
|
90
|
-
await this.db.query(`INSERT INTO agentic_threads (id, state, model) VALUES ($1, $2, $3)
|
|
81
|
+
await this.db.query(`INSERT INTO agentic_threads (id, state, model, "startedWith") VALUES ($1, $2, $3, $4)
|
|
91
82
|
ON CONFLICT (id) DO UPDATE
|
|
92
|
-
SET state = EXCLUDED.state, model = EXCLUDED.model, "updatedAt" = now()
|
|
83
|
+
SET state = EXCLUDED.state, model = EXCLUDED.model, "updatedAt" = now(),
|
|
84
|
+
"startedWith" = COALESCE(agentic_threads."startedWith", EXCLUDED."startedWith")`, [t.id, t.state, t.model, t.startedWith ? JSON.stringify(t.startedWith) : null]);
|
|
93
85
|
},
|
|
94
86
|
countByState: async () => {
|
|
95
87
|
const { rows } = await this.db.query('SELECT state, COUNT(*)::int AS n FROM agentic_threads GROUP BY state');
|
|
@@ -108,6 +100,7 @@ export class PostgresAdminStore {
|
|
|
108
100
|
return rows.map((r) => ({
|
|
109
101
|
id: r.id, state: r.state, model: r.model,
|
|
110
102
|
firstSeenAt: new Date(r.firstSeenAt), updatedAt: new Date(r.updatedAt),
|
|
103
|
+
startedWith: r.startedWith ? { ...r.startedWith, at: new Date(r.startedWith.at) } : null,
|
|
111
104
|
}));
|
|
112
105
|
},
|
|
113
106
|
};
|
|
@@ -115,11 +108,12 @@ export class PostgresAdminStore {
|
|
|
115
108
|
start: async (run) => {
|
|
116
109
|
const { rows } = await this.db.query(`INSERT INTO agentic_runs
|
|
117
110
|
(id, "threadId", "parentRunId", depth, agent, model, state,
|
|
118
|
-
prompt, "tokenBudget", "runState")
|
|
119
|
-
VALUES ($1, $2, $3, $4, $5, $6, 'RUNNING', $7, $8, $9) RETURNING *`, [
|
|
111
|
+
prompt, "tokenBudget", "runState", "providerOptions")
|
|
112
|
+
VALUES ($1, $2, $3, $4, $5, $6, 'RUNNING', $7, $8, $9, $10) RETURNING *`, [
|
|
120
113
|
run.id, run.threadId, run.parentRunId ?? null, run.depth ?? 0,
|
|
121
114
|
run.agent, run.model, run.prompt ?? null, run.tokenBudget ?? null,
|
|
122
115
|
run.runState ? JSON.stringify(run.runState) : null,
|
|
116
|
+
run.providerOptions ? JSON.stringify(run.providerOptions) : null,
|
|
123
117
|
]);
|
|
124
118
|
return toRun(rows[0]);
|
|
125
119
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/admin/postgres.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/admin/postgres.ts"],"names":[],"mappings":"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"}
|
package/dist/admin/sqlite.d.ts
CHANGED
|
@@ -4,10 +4,26 @@ import type { SqliteLike } from '../adapters/sqlite.js';
|
|
|
4
4
|
/** Operational history in SQLite — what `dev: true` uses (§2.9).
|
|
5
5
|
*
|
|
6
6
|
* Tables are prefixed `agentic_` because this may well share a database with
|
|
7
|
-
* the caller's own schema; nothing here should collide with a table they own.
|
|
7
|
+
* the caller's own schema; nothing here should collide with a table they own.
|
|
8
|
+
*
|
|
9
|
+
* The schema is applied by the migrator, not here. Use `SqliteAdminStore.open`
|
|
10
|
+
* unless you are driving migrations yourself: it returns a store that waits
|
|
11
|
+
* for the schema before its first call. */
|
|
8
12
|
export declare class SqliteAdminStore implements AdminStore {
|
|
9
13
|
private readonly db;
|
|
10
|
-
constructor(
|
|
14
|
+
private constructor();
|
|
15
|
+
/** The store `setupAgentCore` uses: schema migration running behind it, and
|
|
16
|
+
* every call gated on it (§2.9).
|
|
17
|
+
*
|
|
18
|
+
* Opening the database stays synchronous — a file that cannot be opened is
|
|
19
|
+
* a configuration problem worth failing on at startup. Only the schema
|
|
20
|
+
* moves to the background, so a service starts at the same speed whether or
|
|
21
|
+
* not it has migrating to do. */
|
|
22
|
+
static open(db: SqliteLike, log?: {
|
|
23
|
+
error(message: string, ...rest: unknown[]): void;
|
|
24
|
+
}): AdminStore;
|
|
25
|
+
/** The two calls the migrator needs, over this store's handle. */
|
|
26
|
+
private driver;
|
|
11
27
|
private all;
|
|
12
28
|
private one;
|
|
13
29
|
private write;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/admin/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EACV,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAC1D,aAAa,EAAE,SAAS,EAAE,UAAU,EACrC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/admin/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EACV,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAC1D,aAAa,EAAE,SAAS,EAAE,UAAU,EACrC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAaxD;;;;;;;4CAO4C;AAC5C,qBAAa,gBAAiB,YAAW,UAAU;IAG7B,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAvC,OAAO;IAEP;;;;;;sCAMkC;IAClC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE;QAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;KAAE,GAAG,UAAU;IAYnG,kEAAkE;IAClE,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,GAAG;IAGX,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,KAAK,CAYV;IAEH,OAAO;oBACa,cAAc;;kBAkBhB,iBAAiB,KAAG,OAAO,CAAC,WAAW,EAAE,CAAC;MAkB1D;IAEF,IAAI;qBACiB,YAAY;uBAcV,MAAM,SAAS,QAAQ;qBAWzB,MAAM;iCAIM,MAAM;kBAGrB,SAAS;;MAsBzB;IAEF,KAAK;oBACe,aAAa;2BASN,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CAAC;iCAGxB,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CAAC;MAG7D;IAEF,OAAO,CAAC,MAAM,CAOX;CACJ"}
|
package/dist/admin/sqlite.js
CHANGED
|
@@ -1,62 +1,54 @@
|
|
|
1
|
+
import { gatedAdminStore, runMigrations } from './migrations/runner.js';
|
|
2
|
+
import { dialect, migrations } from './migrations/sqlite/index.js';
|
|
1
3
|
const date = (n) => (n == null ? null : new Date(n));
|
|
4
|
+
/** The stored ThreadStart, with its `at` back as a Date. */
|
|
5
|
+
const parseStart = (v) => {
|
|
6
|
+
const raw = typeof v === 'string' ? JSON.parse(v) : (v ?? null);
|
|
7
|
+
return raw ? { ...raw, at: new Date(raw.at) } : null;
|
|
8
|
+
};
|
|
2
9
|
const json = (v) => (v === undefined ? null : JSON.stringify(v));
|
|
3
10
|
const parse = (v) => (typeof v === 'string' ? JSON.parse(v) : (v ?? null));
|
|
4
|
-
const SCHEMA = `
|
|
5
|
-
CREATE TABLE IF NOT EXISTS agentic_runs (
|
|
6
|
-
id TEXT PRIMARY KEY, threadId TEXT NOT NULL, parentRunId TEXT,
|
|
7
|
-
depth INTEGER NOT NULL DEFAULT 0, agent TEXT NOT NULL, model TEXT NOT NULL,
|
|
8
|
-
state TEXT NOT NULL DEFAULT 'RUNNING', stopReason TEXT, error TEXT,
|
|
9
|
-
startedAt INTEGER NOT NULL, endedAt INTEGER, durationMs INTEGER, queuedMs INTEGER,
|
|
10
|
-
attempts INTEGER NOT NULL DEFAULT 0, steps INTEGER NOT NULL DEFAULT 0,
|
|
11
|
-
inputTokens INTEGER NOT NULL DEFAULT 0, cachedInputTokens INTEGER NOT NULL DEFAULT 0,
|
|
12
|
-
outputTokens INTEGER NOT NULL DEFAULT 0, totalTokens INTEGER NOT NULL DEFAULT 0,
|
|
13
|
-
result TEXT, prompt TEXT, tokenBudget INTEGER, runState TEXT
|
|
14
|
-
);
|
|
15
|
-
CREATE INDEX IF NOT EXISTS agentic_runs_thread ON agentic_runs(threadId, startedAt);
|
|
16
|
-
CREATE INDEX IF NOT EXISTS agentic_runs_state ON agentic_runs(state, startedAt);
|
|
17
|
-
CREATE INDEX IF NOT EXISTS agentic_runs_parent ON agentic_runs(parentRunId);
|
|
18
|
-
CREATE TABLE IF NOT EXISTS agentic_threads (
|
|
19
|
-
id TEXT PRIMARY KEY, state TEXT NOT NULL, model TEXT NOT NULL,
|
|
20
|
-
firstSeenAt INTEGER NOT NULL, updatedAt INTEGER NOT NULL
|
|
21
|
-
);
|
|
22
|
-
CREATE INDEX IF NOT EXISTS agentic_threads_state ON agentic_threads(state, updatedAt);
|
|
23
|
-
CREATE TABLE IF NOT EXISTS agentic_steps (
|
|
24
|
-
runId TEXT NOT NULL, threadId TEXT, agentId TEXT, "index" INTEGER NOT NULL,
|
|
25
|
-
durationMs INTEGER NOT NULL, finishReason TEXT NOT NULL,
|
|
26
|
-
inputTokens INTEGER NOT NULL DEFAULT 0, cachedInputTokens INTEGER NOT NULL DEFAULT 0,
|
|
27
|
-
outputTokens INTEGER NOT NULL DEFAULT 0, totalTokens INTEGER NOT NULL DEFAULT 0,
|
|
28
|
-
tools TEXT, text TEXT, toolCalls TEXT, at INTEGER NOT NULL
|
|
29
|
-
);
|
|
30
|
-
CREATE INDEX IF NOT EXISTS agentic_steps_run ON agentic_steps(runId, "index");
|
|
31
|
-
CREATE INDEX IF NOT EXISTS agentic_steps_thread ON agentic_steps(threadId, at);
|
|
32
|
-
`;
|
|
33
11
|
/** Operational history in SQLite — what `dev: true` uses (§2.9).
|
|
34
12
|
*
|
|
35
13
|
* Tables are prefixed `agentic_` because this may well share a database with
|
|
36
|
-
* the caller's own schema; nothing here should collide with a table they own.
|
|
14
|
+
* the caller's own schema; nothing here should collide with a table they own.
|
|
15
|
+
*
|
|
16
|
+
* The schema is applied by the migrator, not here. Use `SqliteAdminStore.open`
|
|
17
|
+
* unless you are driving migrations yourself: it returns a store that waits
|
|
18
|
+
* for the schema before its first call. */
|
|
37
19
|
export class SqliteAdminStore {
|
|
38
20
|
db;
|
|
21
|
+
// Private: a store built without its migration would answer every query
|
|
22
|
+
// with "no such table". `open` is the only way in.
|
|
39
23
|
constructor(db) {
|
|
40
24
|
this.db = db;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
25
|
+
}
|
|
26
|
+
/** The store `setupAgentCore` uses: schema migration running behind it, and
|
|
27
|
+
* every call gated on it (§2.9).
|
|
28
|
+
*
|
|
29
|
+
* Opening the database stays synchronous — a file that cannot be opened is
|
|
30
|
+
* a configuration problem worth failing on at startup. Only the schema
|
|
31
|
+
* moves to the background, so a service starts at the same speed whether or
|
|
32
|
+
* not it has migrating to do. */
|
|
33
|
+
static open(db, log) {
|
|
34
|
+
const store = new SqliteAdminStore(db);
|
|
35
|
+
const ready = runMigrations(store.driver(), dialect, migrations).catch((err) => {
|
|
36
|
+
// Loud, because everything downstream of this is silent: admin writes
|
|
37
|
+
// are best effort, so a failed migration shows up as a dashboard with
|
|
38
|
+
// nothing in it rather than as an error.
|
|
39
|
+
(log ?? console).error('admin migrations failed', err);
|
|
40
|
+
throw err;
|
|
41
|
+
});
|
|
42
|
+
return gatedAdminStore(store, ready);
|
|
43
|
+
}
|
|
44
|
+
/** The two calls the migrator needs, over this store's handle. */
|
|
45
|
+
driver() {
|
|
46
|
+
return {
|
|
47
|
+
exec: async (sql, params = []) => {
|
|
48
|
+
this.db.prepare(sql).run(...params);
|
|
49
|
+
},
|
|
50
|
+
rows: async (sql, params = []) => this.db.prepare(sql).all(...params),
|
|
51
|
+
};
|
|
60
52
|
}
|
|
61
53
|
all(sql, ...p) {
|
|
62
54
|
return this.db.prepare(sql).all(...p);
|
|
@@ -78,15 +70,19 @@ export class SqliteAdminStore {
|
|
|
78
70
|
outputTokens: r.outputTokens, totalTokens: r.totalTokens,
|
|
79
71
|
result: parse(r.result),
|
|
80
72
|
prompt: r.prompt ?? null, tokenBudget: r.tokenBudget ?? null,
|
|
81
|
-
runState: parse(r.runState),
|
|
73
|
+
runState: parse(r.runState), providerOptions: parse(r.providerOptions),
|
|
82
74
|
});
|
|
83
75
|
threads = {
|
|
84
76
|
upsert: async (t) => {
|
|
85
77
|
const now = Date.now();
|
|
86
|
-
// firstSeenAt
|
|
87
|
-
this.write(`INSERT INTO agentic_threads (id,state,model,firstSeenAt,updatedAt) VALUES (
|
|
78
|
+
// firstSeenAt and startedWith survive an update; the rest is overwritten.
|
|
79
|
+
this.write(`INSERT INTO agentic_threads (id,state,model,firstSeenAt,updatedAt,startedWith) VALUES (?,?,?,?,?,?)
|
|
88
80
|
ON CONFLICT(id) DO UPDATE SET state = excluded.state,
|
|
89
|
-
model = excluded.model, updatedAt = excluded.updatedAt
|
|
81
|
+
model = excluded.model, updatedAt = excluded.updatedAt,
|
|
82
|
+
startedWith = COALESCE(agentic_threads.startedWith, excluded.startedWith)`,
|
|
83
|
+
// SQL NULL when absent, never the string "null": COALESCE must see
|
|
84
|
+
// the column as empty for the first sight to land.
|
|
85
|
+
t.id, t.state, t.model, now, now, t.startedWith ? json(t.startedWith) : null);
|
|
90
86
|
},
|
|
91
87
|
countByState: async () => Object.fromEntries(this.all('SELECT state, COUNT(*) AS n FROM agentic_threads GROUP BY state')
|
|
92
88
|
.map((r) => [r.state, r.n])),
|
|
@@ -105,13 +101,14 @@ export class SqliteAdminStore {
|
|
|
105
101
|
' ORDER BY updatedAt DESC LIMIT ?', ...vals, f.limit ?? 100).map((r) => ({
|
|
106
102
|
id: r.id, state: r.state, model: r.model,
|
|
107
103
|
firstSeenAt: new Date(r.firstSeenAt), updatedAt: new Date(r.updatedAt),
|
|
104
|
+
startedWith: parseStart(r.startedWith),
|
|
108
105
|
}));
|
|
109
106
|
},
|
|
110
107
|
};
|
|
111
108
|
runs = {
|
|
112
109
|
start: async (run) => {
|
|
113
110
|
const startedAt = Date.now();
|
|
114
|
-
this.write('INSERT INTO agentic_runs (id,threadId,parentRunId,depth,agent,model,state,startedAt,prompt,tokenBudget,runState) VALUES (
|
|
111
|
+
this.write('INSERT INTO agentic_runs (id,threadId,parentRunId,depth,agent,model,state,startedAt,prompt,tokenBudget,runState,providerOptions) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)', run.id, run.threadId, run.parentRunId ?? null, run.depth ?? 0, run.agent, run.model, 'RUNNING', startedAt, run.prompt ?? null, run.tokenBudget ?? null, json(run.runState), json(run.providerOptions));
|
|
115
112
|
return this.toRun({
|
|
116
113
|
...run, parentRunId: run.parentRunId ?? null, depth: run.depth ?? 0,
|
|
117
114
|
state: 'RUNNING', startedAt, attempts: 0, steps: 0,
|
package/dist/admin/sqlite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/admin/sqlite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/admin/sqlite.ts"],"names":[],"mappings":"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"}
|
package/dist/core/admin.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RuntimePorts } from '../ports/runtime.js';
|
|
2
|
-
import type { RunFilter, StepRecord } from '../ports/admin.js';
|
|
2
|
+
import type { RunFilter, StepRecord, ThreadStart } from '../ports/admin.js';
|
|
3
3
|
import type { AgentEvent, ExecutionState, RunRecord, UsageTotals } from './types.js';
|
|
4
4
|
/** One completed loop iteration, read back off the event log (§2.9). */
|
|
5
5
|
export interface Percentiles {
|
|
@@ -45,6 +45,9 @@ export interface ThreadSummary {
|
|
|
45
45
|
durationMs: number;
|
|
46
46
|
/** What started it — the first dispatched run's prompt. */
|
|
47
47
|
prompt?: string | null;
|
|
48
|
+
/** The parameters that started it, recorded on first sight (§2.9); falls
|
|
49
|
+
* back to the earliest dispatched run in the window. */
|
|
50
|
+
startedWith?: ThreadStart | null;
|
|
48
51
|
}
|
|
49
52
|
/** A thread opened up: its runs, and every step across them in order. */
|
|
50
53
|
export interface ThreadDetail {
|
|
@@ -61,6 +64,10 @@ export interface RunDetail {
|
|
|
61
64
|
/** The run's events with CHUNKs stripped — the readable spine, not the
|
|
62
65
|
* token-by-token firehose. */
|
|
63
66
|
events: AgentEvent[];
|
|
67
|
+
/** What this run spent, nested runs included (§4): tokens, money, and a
|
|
68
|
+
* line per agent and model. Read from the usage rows, so it is the same
|
|
69
|
+
* number a bill is built from. */
|
|
70
|
+
usage: UsageTotals;
|
|
64
71
|
}
|
|
65
72
|
export declare function summarise(runs: RunRecord[]): RunStats;
|
|
66
73
|
export declare function listRuns(deps: RuntimePorts, filter?: RunFilter): Promise<RunRecord[]>;
|
package/dist/core/admin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/core/admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/core/admin.ts"],"names":[],"mappings":"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"}
|