@lumifai/harness-tool-pack-postgres 0.0.1 → 0.1.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 +24 -8
- package/dist/catalog.d.ts +6 -0
- package/dist/catalog.js +23 -0
- package/dist/catalog.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/pg-client.d.ts +19 -0
- package/dist/pg-client.js +66 -0
- package/dist/pg-client.js.map +1 -0
- package/dist/postgres-write.d.ts +41 -0
- package/dist/postgres-write.js +391 -0
- package/dist/postgres-write.js.map +1 -0
- package/dist/postgres.d.ts +29 -6
- package/dist/postgres.js +185 -35
- package/dist/postgres.js.map +1 -1
- package/dist/query-executor.js +26 -1
- package/dist/query-executor.js.map +1 -1
- package/dist/query-language.js +11 -4
- package/dist/query-language.js.map +1 -1
- package/package.json +8 -3
- package/skills/postgres-write/SKILL.md +81 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @lumifai/harness-tool-pack-postgres
|
|
2
2
|
|
|
3
|
-
PostgreSQL schema inspection, JSON query,
|
|
3
|
+
PostgreSQL schema inspection, JSON query, guarded insert, and allowlisted file-write tools for the Lumif harness.
|
|
4
4
|
|
|
5
5
|
## Setup
|
|
6
6
|
|
|
@@ -15,6 +15,20 @@ createPostgresToolPack({
|
|
|
15
15
|
});
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
+
To enable the file-based insert/update tools, add explicit table and column allowlists to the same
|
|
19
|
+
pack. Without `allowedTables`, those tools are not registered.
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
createPostgresToolPack({
|
|
23
|
+
connectionString: process.env.DATABASE_URL,
|
|
24
|
+
allowedTables: ['public.campaign_briefs'],
|
|
25
|
+
allowedColumns: {
|
|
26
|
+
'public.campaign_briefs': ['id', 'name', 'metadata'],
|
|
27
|
+
},
|
|
28
|
+
jsonColumns: { 'public.campaign_briefs': ['metadata'] },
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
18
32
|
Access control (which schemas, tables, columns, and rows are visible or writable)
|
|
19
33
|
is enforced in the database by the connection role's `GRANT`s and row-level
|
|
20
34
|
security policies. Provision a dedicated role with the minimum privileges needed
|
|
@@ -23,13 +37,15 @@ as that role; the tools expose exactly what the role can see and write.
|
|
|
23
37
|
|
|
24
38
|
## Tools
|
|
25
39
|
|
|
26
|
-
| Tool | Purpose
|
|
27
|
-
| ----------------------------- |
|
|
28
|
-
| `postgres_list_schemas` | List accessible schemas with relation counts
|
|
29
|
-
| `postgres_get_schema_details` | Columns, keys, foreign keys, optional indexes
|
|
30
|
-
| `postgres_preview_data` | Bounded preview of one relation
|
|
31
|
-
| `postgres_query` | Execute a validated JSON `QueryPlan`
|
|
32
|
-
| `postgres_insert` | Insert rows from inline JSON or a workspace CSV
|
|
40
|
+
| Tool | Purpose |
|
|
41
|
+
| ----------------------------- | ------------------------------------------------- |
|
|
42
|
+
| `postgres_list_schemas` | List accessible schemas with relation counts |
|
|
43
|
+
| `postgres_get_schema_details` | Columns, keys, foreign keys, optional indexes |
|
|
44
|
+
| `postgres_preview_data` | Bounded preview of one relation |
|
|
45
|
+
| `postgres_query` | Execute a validated JSON `QueryPlan` |
|
|
46
|
+
| `postgres_insert` | Insert rows from inline JSON or a workspace CSV |
|
|
47
|
+
| `postgres_insert_from_file` | Insert rows from an allowlisted workspace JSON |
|
|
48
|
+
| `postgres_update_from_file` | Update one row from an allowlisted workspace JSON |
|
|
33
49
|
|
|
34
50
|
Raw SQL is intentionally unsupported.
|
|
35
51
|
|
package/dist/catalog.d.ts
CHANGED
|
@@ -43,3 +43,9 @@ export declare function loadPostgresCatalog(client: Client, options?: {
|
|
|
43
43
|
}): Promise<PostgresCatalog>;
|
|
44
44
|
export declare function loadRelationIndexes(client: Client, schema: string, relation: string): Promise<CatalogRelation['indexes']>;
|
|
45
45
|
export declare function getCatalogRelation(catalog: PostgresCatalog, schema: string, name: string): CatalogRelation | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Intersect a loaded catalog with an optional `schema.table` allowlist.
|
|
48
|
+
* When `allowlist` is undefined, the catalog is returned unchanged.
|
|
49
|
+
* When provided (including empty), only matching relations remain.
|
|
50
|
+
*/
|
|
51
|
+
export declare function intersectCatalogAllowlist(catalog: PostgresCatalog, allowlist: readonly string[] | undefined): PostgresCatalog;
|
package/dist/catalog.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.listSchemaSummaries = listSchemaSummaries;
|
|
|
4
4
|
exports.loadPostgresCatalog = loadPostgresCatalog;
|
|
5
5
|
exports.loadRelationIndexes = loadRelationIndexes;
|
|
6
6
|
exports.getCatalogRelation = getCatalogRelation;
|
|
7
|
+
exports.intersectCatalogAllowlist = intersectCatalogAllowlist;
|
|
7
8
|
const constants_1 = require("./constants");
|
|
8
9
|
function relationKey(schema, name) {
|
|
9
10
|
return `${schema}.${name}`;
|
|
@@ -218,4 +219,26 @@ function extractIndexColumns(indexDef) {
|
|
|
218
219
|
function getCatalogRelation(catalog, schema, name) {
|
|
219
220
|
return catalog.relations.get(relationKey(schema, name));
|
|
220
221
|
}
|
|
222
|
+
/**
|
|
223
|
+
* Intersect a loaded catalog with an optional `schema.table` allowlist.
|
|
224
|
+
* When `allowlist` is undefined, the catalog is returned unchanged.
|
|
225
|
+
* When provided (including empty), only matching relations remain.
|
|
226
|
+
*/
|
|
227
|
+
function intersectCatalogAllowlist(catalog, allowlist) {
|
|
228
|
+
if (allowlist === undefined) {
|
|
229
|
+
return catalog;
|
|
230
|
+
}
|
|
231
|
+
const allowed = new Set(allowlist);
|
|
232
|
+
const relations = new Map();
|
|
233
|
+
for (const [key, relation] of catalog.relations) {
|
|
234
|
+
if (allowed.has(key)) {
|
|
235
|
+
relations.set(key, relation);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
const schemas = new Set();
|
|
239
|
+
for (const relation of relations.values()) {
|
|
240
|
+
schemas.add(relation.schema);
|
|
241
|
+
}
|
|
242
|
+
return { schemas, relations };
|
|
243
|
+
}
|
|
221
244
|
//# sourceMappingURL=catalog.js.map
|
package/dist/catalog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":";;AAkDA,kDAwBC;AAED,kDAqOC;AAED,kDA8BC;AA4BD,gDAMC;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
export { DEFAULT_POSTGRES_QUERY_LIMIT, MAX_POSTGRES_QUERY_LIMIT, DEFAULT_MAX_INSERT_ROWS, MAX_INSERT_ROWS, createPostgresTools, createPostgresToolPack, resolvePostgresSkillPath, queryPlanSchema, previewInputSchema, schemaDetailsInputSchema, insertInputSchema, insertResultSchema, } from './postgres';
|
|
2
|
+
export { createPostgresWriteTools, resolvePostgresWriteSkillPath, validatePostgresWriteOptions, DEFAULT_POSTGRES_WRITE_MAX_ROWS, MAX_POSTGRES_PARAMETERS, } from './postgres-write';
|
|
2
3
|
export type { PostgresToolsOptions } from './postgres';
|
|
4
|
+
export type { PostgresConflictMode, PostgresWriteToolsOptions } from './postgres-write';
|
|
5
|
+
export { DEFAULT_POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT_MS, DEFAULT_POSTGRES_LOCK_TIMEOUT_MS, DEFAULT_POSTGRES_STATEMENT_TIMEOUT_MS, withPostgresTransaction, } from './pg-client';
|
|
6
|
+
export type { PostgresTransactionOptions } from './pg-client';
|
|
3
7
|
export type { QueryPlan, QueryResult } from './query-language';
|
|
4
8
|
export type { InsertInput, InsertResult } from './insert-language';
|
|
5
9
|
export { QUERY_PLAN_VERSION } from './constants';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isPostgresToolError = exports.PostgresToolError = exports.QUERY_PLAN_VERSION = exports.insertResultSchema = exports.insertInputSchema = exports.schemaDetailsInputSchema = exports.previewInputSchema = exports.queryPlanSchema = exports.resolvePostgresSkillPath = exports.createPostgresToolPack = exports.createPostgresTools = exports.MAX_INSERT_ROWS = exports.DEFAULT_MAX_INSERT_ROWS = exports.MAX_POSTGRES_QUERY_LIMIT = exports.DEFAULT_POSTGRES_QUERY_LIMIT = void 0;
|
|
3
|
+
exports.isPostgresToolError = exports.PostgresToolError = exports.QUERY_PLAN_VERSION = exports.withPostgresTransaction = exports.DEFAULT_POSTGRES_STATEMENT_TIMEOUT_MS = exports.DEFAULT_POSTGRES_LOCK_TIMEOUT_MS = exports.DEFAULT_POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT_MS = exports.MAX_POSTGRES_PARAMETERS = exports.DEFAULT_POSTGRES_WRITE_MAX_ROWS = exports.validatePostgresWriteOptions = exports.resolvePostgresWriteSkillPath = exports.createPostgresWriteTools = exports.insertResultSchema = exports.insertInputSchema = exports.schemaDetailsInputSchema = exports.previewInputSchema = exports.queryPlanSchema = exports.resolvePostgresSkillPath = exports.createPostgresToolPack = exports.createPostgresTools = exports.MAX_INSERT_ROWS = exports.DEFAULT_MAX_INSERT_ROWS = exports.MAX_POSTGRES_QUERY_LIMIT = exports.DEFAULT_POSTGRES_QUERY_LIMIT = void 0;
|
|
4
4
|
var postgres_1 = require("./postgres");
|
|
5
5
|
Object.defineProperty(exports, "DEFAULT_POSTGRES_QUERY_LIMIT", { enumerable: true, get: function () { return postgres_1.DEFAULT_POSTGRES_QUERY_LIMIT; } });
|
|
6
6
|
Object.defineProperty(exports, "MAX_POSTGRES_QUERY_LIMIT", { enumerable: true, get: function () { return postgres_1.MAX_POSTGRES_QUERY_LIMIT; } });
|
|
@@ -14,6 +14,17 @@ Object.defineProperty(exports, "previewInputSchema", { enumerable: true, get: fu
|
|
|
14
14
|
Object.defineProperty(exports, "schemaDetailsInputSchema", { enumerable: true, get: function () { return postgres_1.schemaDetailsInputSchema; } });
|
|
15
15
|
Object.defineProperty(exports, "insertInputSchema", { enumerable: true, get: function () { return postgres_1.insertInputSchema; } });
|
|
16
16
|
Object.defineProperty(exports, "insertResultSchema", { enumerable: true, get: function () { return postgres_1.insertResultSchema; } });
|
|
17
|
+
var postgres_write_1 = require("./postgres-write");
|
|
18
|
+
Object.defineProperty(exports, "createPostgresWriteTools", { enumerable: true, get: function () { return postgres_write_1.createPostgresWriteTools; } });
|
|
19
|
+
Object.defineProperty(exports, "resolvePostgresWriteSkillPath", { enumerable: true, get: function () { return postgres_write_1.resolvePostgresWriteSkillPath; } });
|
|
20
|
+
Object.defineProperty(exports, "validatePostgresWriteOptions", { enumerable: true, get: function () { return postgres_write_1.validatePostgresWriteOptions; } });
|
|
21
|
+
Object.defineProperty(exports, "DEFAULT_POSTGRES_WRITE_MAX_ROWS", { enumerable: true, get: function () { return postgres_write_1.DEFAULT_POSTGRES_WRITE_MAX_ROWS; } });
|
|
22
|
+
Object.defineProperty(exports, "MAX_POSTGRES_PARAMETERS", { enumerable: true, get: function () { return postgres_write_1.MAX_POSTGRES_PARAMETERS; } });
|
|
23
|
+
var pg_client_1 = require("./pg-client");
|
|
24
|
+
Object.defineProperty(exports, "DEFAULT_POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT_MS", { enumerable: true, get: function () { return pg_client_1.DEFAULT_POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT_MS; } });
|
|
25
|
+
Object.defineProperty(exports, "DEFAULT_POSTGRES_LOCK_TIMEOUT_MS", { enumerable: true, get: function () { return pg_client_1.DEFAULT_POSTGRES_LOCK_TIMEOUT_MS; } });
|
|
26
|
+
Object.defineProperty(exports, "DEFAULT_POSTGRES_STATEMENT_TIMEOUT_MS", { enumerable: true, get: function () { return pg_client_1.DEFAULT_POSTGRES_STATEMENT_TIMEOUT_MS; } });
|
|
27
|
+
Object.defineProperty(exports, "withPostgresTransaction", { enumerable: true, get: function () { return pg_client_1.withPostgresTransaction; } });
|
|
17
28
|
var constants_1 = require("./constants");
|
|
18
29
|
Object.defineProperty(exports, "QUERY_PLAN_VERSION", { enumerable: true, get: function () { return constants_1.QUERY_PLAN_VERSION; } });
|
|
19
30
|
var errors_1 = require("./errors");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAaoB;AAZlB,wHAAA,4BAA4B,OAAA;AAC5B,oHAAA,wBAAwB,OAAA;AACxB,mHAAA,uBAAuB,OAAA;AACvB,2GAAA,eAAe,OAAA;AACf,+GAAA,mBAAmB,OAAA;AACnB,kHAAA,sBAAsB,OAAA;AACtB,oHAAA,wBAAwB,OAAA;AACxB,2GAAA,eAAe,OAAA;AACf,8GAAA,kBAAkB,OAAA;AAClB,oHAAA,wBAAwB,OAAA;AACxB,6GAAA,iBAAiB,OAAA;AACjB,8GAAA,kBAAkB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAaoB;AAZlB,wHAAA,4BAA4B,OAAA;AAC5B,oHAAA,wBAAwB,OAAA;AACxB,mHAAA,uBAAuB,OAAA;AACvB,2GAAA,eAAe,OAAA;AACf,+GAAA,mBAAmB,OAAA;AACnB,kHAAA,sBAAsB,OAAA;AACtB,oHAAA,wBAAwB,OAAA;AACxB,2GAAA,eAAe,OAAA;AACf,8GAAA,kBAAkB,OAAA;AAClB,oHAAA,wBAAwB,OAAA;AACxB,6GAAA,iBAAiB,OAAA;AACjB,8GAAA,kBAAkB,OAAA;AAEpB,mDAM0B;AALxB,0HAAA,wBAAwB,OAAA;AACxB,+HAAA,6BAA6B,OAAA;AAC7B,8HAAA,4BAA4B,OAAA;AAC5B,iIAAA,+BAA+B,OAAA;AAC/B,yHAAA,uBAAuB,OAAA;AAIzB,yCAKqB;AAJnB,oJAAA,uDAAuD,OAAA;AACvD,6HAAA,gCAAgC,OAAA;AAChC,kIAAA,qCAAqC,OAAA;AACrC,oHAAA,uBAAuB,OAAA;AAKzB,yCAAiD;AAAxC,+GAAA,kBAAkB,OAAA;AAC3B,mCAAkE;AAAzD,2GAAA,iBAAiB,OAAA;AAAE,6GAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ToolExecutionContext } from '@mastra/core/tools';
|
|
2
|
+
import { Client } from 'pg';
|
|
3
|
+
export type MaybePromise<T> = T | Promise<T>;
|
|
4
|
+
export type PostgresTransactionOptions = {
|
|
5
|
+
statementTimeoutMs?: number;
|
|
6
|
+
lockTimeoutMs?: number;
|
|
7
|
+
idleInTransactionTimeoutMs?: number;
|
|
8
|
+
};
|
|
9
|
+
export interface PostgresClientOptions extends PostgresTransactionOptions {
|
|
10
|
+
connectionString?: string;
|
|
11
|
+
resolveConnectionString?: (context: ToolExecutionContext) => MaybePromise<string>;
|
|
12
|
+
}
|
|
13
|
+
export type PostgresClientErrorFormatter = (error: unknown) => Error;
|
|
14
|
+
export declare const DEFAULT_POSTGRES_STATEMENT_TIMEOUT_MS = 10000;
|
|
15
|
+
export declare const DEFAULT_POSTGRES_LOCK_TIMEOUT_MS = 2000;
|
|
16
|
+
export declare const DEFAULT_POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT_MS = 5000;
|
|
17
|
+
export declare function withPostgresTransaction<T>(client: Client, options: PostgresTransactionOptions, run: () => Promise<T>): Promise<T>;
|
|
18
|
+
export declare function resolvePostgresConnectionString(options: PostgresClientOptions, context: ToolExecutionContext): Promise<string>;
|
|
19
|
+
export declare function withPostgresClient<T>(options: PostgresClientOptions, context: ToolExecutionContext, run: (client: Client, connectionString: string) => Promise<T>, formatError?: PostgresClientErrorFormatter): Promise<T>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT_MS = exports.DEFAULT_POSTGRES_LOCK_TIMEOUT_MS = exports.DEFAULT_POSTGRES_STATEMENT_TIMEOUT_MS = void 0;
|
|
4
|
+
exports.withPostgresTransaction = withPostgresTransaction;
|
|
5
|
+
exports.resolvePostgresConnectionString = resolvePostgresConnectionString;
|
|
6
|
+
exports.withPostgresClient = withPostgresClient;
|
|
7
|
+
const pg_1 = require("pg");
|
|
8
|
+
const constants_1 = require("./constants");
|
|
9
|
+
const errors_1 = require("./errors");
|
|
10
|
+
exports.DEFAULT_POSTGRES_STATEMENT_TIMEOUT_MS = constants_1.DEFAULT_STATEMENT_TIMEOUT_MS;
|
|
11
|
+
exports.DEFAULT_POSTGRES_LOCK_TIMEOUT_MS = constants_1.DEFAULT_LOCK_TIMEOUT_MS;
|
|
12
|
+
exports.DEFAULT_POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT_MS = constants_1.DEFAULT_IDLE_IN_TRANSACTION_TIMEOUT_MS;
|
|
13
|
+
function timeoutValue(name, value, fallback) {
|
|
14
|
+
const resolved = value ?? fallback;
|
|
15
|
+
if (!Number.isSafeInteger(resolved) || resolved <= 0) {
|
|
16
|
+
throw new Error(`${name} must be a positive safe integer number of milliseconds.`);
|
|
17
|
+
}
|
|
18
|
+
return String(resolved);
|
|
19
|
+
}
|
|
20
|
+
async function withPostgresTransaction(client, options, run) {
|
|
21
|
+
await client.query('BEGIN');
|
|
22
|
+
try {
|
|
23
|
+
await client.query("SELECT set_config('statement_timeout', $1, true)", [
|
|
24
|
+
timeoutValue('statementTimeoutMs', options.statementTimeoutMs, constants_1.DEFAULT_STATEMENT_TIMEOUT_MS),
|
|
25
|
+
]);
|
|
26
|
+
await client.query("SELECT set_config('lock_timeout', $1, true)", [
|
|
27
|
+
timeoutValue('lockTimeoutMs', options.lockTimeoutMs, constants_1.DEFAULT_LOCK_TIMEOUT_MS),
|
|
28
|
+
]);
|
|
29
|
+
await client.query("SELECT set_config('idle_in_transaction_session_timeout', $1, true)", [
|
|
30
|
+
timeoutValue('idleInTransactionTimeoutMs', options.idleInTransactionTimeoutMs, constants_1.DEFAULT_IDLE_IN_TRANSACTION_TIMEOUT_MS),
|
|
31
|
+
]);
|
|
32
|
+
const result = await run();
|
|
33
|
+
await client.query('COMMIT');
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
await client.query('ROLLBACK').catch(() => undefined);
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function resolvePostgresConnectionString(options, context) {
|
|
42
|
+
if (options.resolveConnectionString) {
|
|
43
|
+
return options.resolveConnectionString(context);
|
|
44
|
+
}
|
|
45
|
+
if (options.connectionString) {
|
|
46
|
+
return options.connectionString;
|
|
47
|
+
}
|
|
48
|
+
throw new errors_1.PostgresToolError('CONFIGURATION_ERROR', 'Postgres tools require connectionString or resolveConnectionString.');
|
|
49
|
+
}
|
|
50
|
+
async function withPostgresClient(options, context, run, formatError) {
|
|
51
|
+
const connectionString = await resolvePostgresConnectionString(options, context);
|
|
52
|
+
const client = new pg_1.Client({ connectionString });
|
|
53
|
+
try {
|
|
54
|
+
await client.connect();
|
|
55
|
+
try {
|
|
56
|
+
return await run(client, connectionString);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
throw formatError ? formatError(error) : error;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
await client.end().catch(() => undefined);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=pg-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pg-client.js","sourceRoot":"","sources":["../src/pg-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { ToolsInput } from '@mastra/core/agent';
|
|
2
|
+
import { type ToolExecutionContext } from '@mastra/core/tools';
|
|
3
|
+
import type { Client } from 'pg';
|
|
4
|
+
import type { PostgresToolsOptions } from './postgres';
|
|
5
|
+
type MaybePromise<T> = T | Promise<T>;
|
|
6
|
+
export declare const DEFAULT_POSTGRES_WRITE_MAX_ROWS = 500;
|
|
7
|
+
export declare const MAX_POSTGRES_PARAMETERS = 65535;
|
|
8
|
+
export type PostgresConflictMode = 'ignore' | 'update';
|
|
9
|
+
export type PostgresWriteToolsOptions = PostgresToolsOptions & {
|
|
10
|
+
/**
|
|
11
|
+
* Fully-qualified `schema.table` targets that may be written to.
|
|
12
|
+
* Required — write tools fail closed when this is missing or empty.
|
|
13
|
+
*/
|
|
14
|
+
allowedTables: string[];
|
|
15
|
+
/**
|
|
16
|
+
* Per-table column allowlist keyed by `schema.table`.
|
|
17
|
+
* Every allowed table must have at least one configured column; only these columns may appear
|
|
18
|
+
* in insert/update JSON files.
|
|
19
|
+
*/
|
|
20
|
+
allowedColumns?: Record<string, string[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Optional per-table json/jsonb columns keyed by `schema.table`.
|
|
23
|
+
* Values for these columns are cast with `::jsonb` in SQL.
|
|
24
|
+
*/
|
|
25
|
+
jsonColumns?: Record<string, string[]>;
|
|
26
|
+
/** Maximum rows per insert file. Defaults to {@link DEFAULT_POSTGRES_WRITE_MAX_ROWS}. */
|
|
27
|
+
maxRows?: number;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve the update lookup value from request/session context when the agent
|
|
30
|
+
* does not pass `whereValue` (e.g. campaign id from harness state).
|
|
31
|
+
*/
|
|
32
|
+
resolveWhereValue?: (context: ToolExecutionContext) => MaybePromise<string | number | boolean | undefined>;
|
|
33
|
+
};
|
|
34
|
+
export declare function resolvePostgresWriteSkillPath(): string;
|
|
35
|
+
export declare function createPostgresWriteTools(options: PostgresWriteToolsOptions): ToolsInput;
|
|
36
|
+
export declare function validatePostgresWriteOptions(options: PostgresWriteToolsOptions): void;
|
|
37
|
+
export declare function assertWorkspaceRelativePath(filePath: string): void;
|
|
38
|
+
export declare function valuePlaceholder(column: string, placeholderIndex: number, jsonColumns: Set<string>): string;
|
|
39
|
+
export declare function insertRows(client: Client, schema: string, table: string, columns: string[], rows: Record<string, unknown>[], conflictColumns: string[] | undefined, onConflict: PostgresConflictMode | undefined, jsonColumns: Set<string>): Promise<number>;
|
|
40
|
+
export declare function updateRow(client: Client, schema: string, table: string, whereColumn: string, whereValue: string | number | boolean, columns: string[], set: Record<string, unknown>, jsonColumns: Set<string>): Promise<number>;
|
|
41
|
+
export {};
|