callman-core 1.19.0 → 1.21.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/dist/ai/jsonRepair.d.ts +2 -0
- package/dist/ai/jsonRepair.d.ts.map +1 -0
- package/dist/ai/jsonRepair.js +61 -0
- package/dist/ai/jsonRepair.js.map +1 -0
- package/dist/host/db/connectionMapping.d.ts +4 -0
- package/dist/host/db/connectionMapping.d.ts.map +1 -1
- package/dist/host/db/connectionMapping.js +4 -0
- package/dist/host/db/connectionMapping.js.map +1 -1
- package/dist/host/db/pgClientConfig.d.ts +11 -0
- package/dist/host/db/pgClientConfig.d.ts.map +1 -0
- package/dist/host/db/pgClientConfig.js +83 -0
- package/dist/host/db/pgClientConfig.js.map +1 -0
- package/dist/host/db/pgSessionManager.d.ts +18 -0
- package/dist/host/db/pgSessionManager.d.ts.map +1 -0
- package/dist/host/db/pgSessionManager.js +162 -0
- package/dist/host/db/pgSessionManager.js.map +1 -0
- package/dist/host/db/postgresAdapter.d.ts.map +1 -1
- package/dist/host/db/postgresAdapter.js +7 -36
- package/dist/host/db/postgresAdapter.js.map +1 -1
- package/dist/host/db/queryExecutor.d.ts +4 -0
- package/dist/host/db/queryExecutor.d.ts.map +1 -1
- package/dist/host/db/queryExecutor.js +40 -2
- package/dist/host/db/queryExecutor.js.map +1 -1
- package/dist/host/db/sqlState.d.ts +2 -0
- package/dist/host/db/sqlState.d.ts.map +1 -0
- package/dist/host/db/sqlState.js +14 -0
- package/dist/host/db/sqlState.js.map +1 -0
- package/dist/host/db/types.d.ts +13 -0
- package/dist/host/db/types.d.ts.map +1 -1
- package/dist/host/index.d.ts +3 -0
- package/dist/host/index.d.ts.map +1 -1
- package/dist/host/index.js +7 -0
- package/dist/host/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/scenario-runner/adapters/ai-executor.d.ts +9 -0
- package/dist/scenario-runner/adapters/ai-executor.d.ts.map +1 -0
- package/dist/scenario-runner/adapters/ai-executor.js +119 -0
- package/dist/scenario-runner/adapters/ai-executor.js.map +1 -0
- package/dist/scenario-runner/adapters/connection-config.d.ts +4 -0
- package/dist/scenario-runner/adapters/connection-config.d.ts.map +1 -1
- package/dist/scenario-runner/adapters/db-executor.d.ts +7 -1
- package/dist/scenario-runner/adapters/db-executor.d.ts.map +1 -1
- package/dist/scenario-runner/adapters/db-executor.js +106 -1
- package/dist/scenario-runner/adapters/db-executor.js.map +1 -1
- package/dist/scenario-runner/adapters/helpers/aiExample.d.ts +12 -0
- package/dist/scenario-runner/adapters/helpers/aiExample.d.ts.map +1 -0
- package/dist/scenario-runner/adapters/helpers/aiExample.js +79 -0
- package/dist/scenario-runner/adapters/helpers/aiExample.js.map +1 -0
- package/dist/scenario-runner/adapters/index.d.ts +4 -2
- package/dist/scenario-runner/adapters/index.d.ts.map +1 -1
- package/dist/scenario-runner/adapters/index.js +15 -1
- package/dist/scenario-runner/adapters/index.js.map +1 -1
- package/dist/scenario-runner/adapters/types.d.ts +22 -0
- package/dist/scenario-runner/adapters/types.d.ts.map +1 -1
- package/dist/scenario-runner/condition.d.ts +1 -0
- package/dist/scenario-runner/condition.d.ts.map +1 -1
- package/dist/scenario-runner/condition.js +164 -4
- package/dist/scenario-runner/condition.js.map +1 -1
- package/dist/scenario-runner/conditionTypes.d.ts +1 -1
- package/dist/scenario-runner/conditionTypes.d.ts.map +1 -1
- package/dist/scenario-runner/graphTraversal.d.ts +6 -0
- package/dist/scenario-runner/graphTraversal.d.ts.map +1 -1
- package/dist/scenario-runner/graphTraversal.js +7 -0
- package/dist/scenario-runner/graphTraversal.js.map +1 -1
- package/dist/scenario-runner/nodePolicy.d.ts +2 -2
- package/dist/scenario-runner/nodePolicy.d.ts.map +1 -1
- package/dist/scenario-runner/nodePolicy.js +2 -0
- package/dist/scenario-runner/nodePolicy.js.map +1 -1
- package/dist/scenario-runner/runScenario.d.ts.map +1 -1
- package/dist/scenario-runner/runScenario.js +70 -1
- package/dist/scenario-runner/runScenario.js.map +1 -1
- package/dist/scenario-runner/types.d.ts +75 -3
- package/dist/scenario-runner/types.d.ts.map +1 -1
- package/dist-cjs/ai/jsonRepair.js +65 -0
- package/dist-cjs/ai/jsonRepair.js.map +1 -0
- package/dist-cjs/host/db/connectionMapping.js +4 -0
- package/dist-cjs/host/db/connectionMapping.js.map +1 -1
- package/dist-cjs/host/db/pgClientConfig.js +90 -0
- package/dist-cjs/host/db/pgClientConfig.js.map +1 -0
- package/dist-cjs/host/db/pgSessionManager.js +170 -0
- package/dist-cjs/host/db/pgSessionManager.js.map +1 -0
- package/dist-cjs/host/db/postgresAdapter.js +7 -36
- package/dist-cjs/host/db/postgresAdapter.js.map +1 -1
- package/dist-cjs/host/db/queryExecutor.js +40 -2
- package/dist-cjs/host/db/queryExecutor.js.map +1 -1
- package/dist-cjs/host/db/sqlState.js +18 -0
- package/dist-cjs/host/db/sqlState.js.map +1 -0
- package/dist-cjs/host/index.js +16 -1
- package/dist-cjs/host/index.js.map +1 -1
- package/dist-cjs/index.js +5 -1
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/scenario-runner/adapters/ai-executor.js +123 -0
- package/dist-cjs/scenario-runner/adapters/ai-executor.js.map +1 -0
- package/dist-cjs/scenario-runner/adapters/db-executor.js +108 -2
- package/dist-cjs/scenario-runner/adapters/db-executor.js.map +1 -1
- package/dist-cjs/scenario-runner/adapters/helpers/aiExample.js +85 -0
- package/dist-cjs/scenario-runner/adapters/helpers/aiExample.js.map +1 -0
- package/dist-cjs/scenario-runner/adapters/index.js +21 -1
- package/dist-cjs/scenario-runner/adapters/index.js.map +1 -1
- package/dist-cjs/scenario-runner/condition.js +166 -5
- package/dist-cjs/scenario-runner/condition.js.map +1 -1
- package/dist-cjs/scenario-runner/graphTraversal.js +8 -1
- package/dist-cjs/scenario-runner/graphTraversal.js.map +1 -1
- package/dist-cjs/scenario-runner/nodePolicy.js +2 -0
- package/dist-cjs/scenario-runner/nodePolicy.js.map +1 -1
- package/dist-cjs/scenario-runner/runScenario.js +70 -1
- package/dist-cjs/scenario-runner/runScenario.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlState.d.ts","sourceRoot":"","sources":["../../../src/host/db/sqlState.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,SAOzD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// SQLSTATE extraction shared by the scenario db-executor, the host query
|
|
2
|
+
// executor, and desktop adapters. Postgres SQLSTATE is 5 alphanumeric chars;
|
|
3
|
+
// `pg` errors expose it as `.code`. `.sqlState` is checked first so hosts
|
|
4
|
+
// can attach it explicitly without colliding with Node's `error.code`
|
|
5
|
+
// values (e.g. ECONNREFUSED).
|
|
6
|
+
export const extractSqlState = (error) => {
|
|
7
|
+
if (!error || typeof error !== "object")
|
|
8
|
+
return undefined;
|
|
9
|
+
const candidate = error.sqlState ?? error.code;
|
|
10
|
+
return typeof candidate === "string" && /^[0-9A-Z]{5}$/.test(candidate)
|
|
11
|
+
? candidate
|
|
12
|
+
: undefined;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=sqlState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlState.js","sourceRoot":"","sources":["../../../src/host/db/sqlState.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,6EAA6E;AAC7E,0EAA0E;AAC1E,sEAAsE;AACtE,8BAA8B;AAC9B,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAc,EAAsB,EAAE;IACpE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,SAAS,GACZ,KAAgC,CAAC,QAAQ,IAAK,KAA4B,CAAC,IAAI,CAAC;IACnF,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;QACrE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC,CAAC"}
|
package/dist/host/db/types.d.ts
CHANGED
|
@@ -16,6 +16,10 @@ export interface DbConnection {
|
|
|
16
16
|
password: string;
|
|
17
17
|
ssl?: boolean;
|
|
18
18
|
trustServerCertificate?: boolean;
|
|
19
|
+
sslMode?: "disable" | "require" | "verify-ca" | "verify-full";
|
|
20
|
+
caCert?: string;
|
|
21
|
+
clientCert?: string;
|
|
22
|
+
clientKey?: string;
|
|
19
23
|
}
|
|
20
24
|
export interface DbConnectionInput {
|
|
21
25
|
id?: string;
|
|
@@ -32,6 +36,10 @@ export interface DbConnectionInput {
|
|
|
32
36
|
password: string;
|
|
33
37
|
ssl?: boolean;
|
|
34
38
|
trustServerCertificate?: boolean;
|
|
39
|
+
sslMode?: "disable" | "require" | "verify-ca" | "verify-full";
|
|
40
|
+
caCert?: string;
|
|
41
|
+
clientCert?: string;
|
|
42
|
+
clientKey?: string;
|
|
35
43
|
}
|
|
36
44
|
export interface DbTemplateContext {
|
|
37
45
|
response?: unknown | null;
|
|
@@ -45,6 +53,10 @@ export interface ExecuteDbQueryPayload {
|
|
|
45
53
|
params?: unknown[];
|
|
46
54
|
phase: DbQueryPhase;
|
|
47
55
|
context?: DbTemplateContext;
|
|
56
|
+
session?: {
|
|
57
|
+
runId: string;
|
|
58
|
+
transactionMode: "none" | "rollback" | "commit";
|
|
59
|
+
};
|
|
48
60
|
}
|
|
49
61
|
export interface DbQueryExecutionResult {
|
|
50
62
|
success: boolean;
|
|
@@ -59,6 +71,7 @@ export interface DbQueryExecutionResult {
|
|
|
59
71
|
durationMs: number;
|
|
60
72
|
executedAt: string;
|
|
61
73
|
error?: string;
|
|
74
|
+
sqlState?: string;
|
|
62
75
|
}
|
|
63
76
|
export interface DbConnectionTestResult {
|
|
64
77
|
success: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/host/db/types.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnF,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;AAErD,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,kBAAkB,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,CAAC;IACvB,cAAc,EAAE,gBAAgB,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd,sBAAsB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/host/db/types.ts"],"names":[],"mappings":"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"}
|
package/dist/host/index.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
export { buildDbExecuteCapability, runConfiguredDbQuery, runRedisCommandsForPhase, buildRedisValueCache, buildRedisCapability, type ConnectionRuntime, type ConnectionRuntimeMap, type DbConnectionRuntime, type RedisConnectionRuntime, type DbNodeConfig, type RequestDatabaseRuntimeConfig, type RequestRedisRuntimeConfig, type ScriptTemplateContext, } from "./connections.js";
|
|
2
2
|
export { executeQuery, executeResolvedDbQuery, testDbConnection, } from "./db/queryExecutor.js";
|
|
3
|
+
export { executePostgresQueryInSession, releasePostgresSessionsForRun, closeAllPostgresSessions, __setPgSessionDriverForTests, __getPgSessionCountForTests, type PgSessionExecuteInput, type PgSessionTransactionMode, } from "./db/pgSessionManager.js";
|
|
3
4
|
export { executeMongoQuery, testMongoConnection, __setMongoDriverForTests, } from "./db/mongoAdapter.js";
|
|
4
5
|
export { executePostgresQuery, testPostgresConnection, __setPostgresDriverForTests, } from "./db/postgresAdapter.js";
|
|
5
6
|
export { executeMysqlQuery, testMysqlConnection, __setMysqlDriverForTests, } from "./db/mysqlAdapter.js";
|
|
6
7
|
export { executeOracleQuery, testOracleConnection, __setOracleDriverForTests, } from "./db/oracleAdapter.js";
|
|
7
8
|
export { executeMssqlQuery, testMssqlConnection, __setMssqlDriverForTests, } from "./db/mssqlAdapter.js";
|
|
8
9
|
export { stripTrailingSqlTerminator } from "./db/sqlNormalize.js";
|
|
10
|
+
export { buildPgSslConfig, buildPgClientConfig } from "./db/pgClientConfig.js";
|
|
11
|
+
export { extractSqlState } from "./db/sqlState.js";
|
|
9
12
|
export { renderDbQueryReference } from "./db/db-query-reference.js";
|
|
10
13
|
export { normalizeOracleConnectString, OracleConnectStringError, } from "./db/oracleConnectString.js";
|
|
11
14
|
export { databaseConfigToDbConnection, type CoreDbProvider, type DatabaseConnectionConfigLike, } from "./db/connectionMapping.js";
|
package/dist/host/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,wBAAwB,EACxB,4BAA4B,EAC5B,2BAA2B,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,GAC9B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,4BAA4B,EAC5B,KAAK,cAAc,EACnB,KAAK,4BAA4B,GAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAC"}
|
package/dist/host/index.js
CHANGED
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
// runner execute `pm.db.*` and `pm.redis` without an external host process.
|
|
4
4
|
export { buildDbExecuteCapability, runConfiguredDbQuery, runRedisCommandsForPhase, buildRedisValueCache, buildRedisCapability, } from "./connections.js";
|
|
5
5
|
export { executeQuery, executeResolvedDbQuery, testDbConnection, } from "./db/queryExecutor.js";
|
|
6
|
+
// Run-scoped Postgres sessions for `useSession` db nodes (BEGIN…ROLLBACK
|
|
7
|
+
// spanning multiple nodes). Hosts wire `releasePostgresSessionsForRun` into
|
|
8
|
+
// the `databaseSessionRelease` driver and `closeAllPostgresSessions` into
|
|
9
|
+
// process shutdown.
|
|
10
|
+
export { executePostgresQueryInSession, releasePostgresSessionsForRun, closeAllPostgresSessions, __setPgSessionDriverForTests, __getPgSessionCountForTests, } from "./db/pgSessionManager.js";
|
|
6
11
|
// Individual adapters + connectivity checks, so hosts (Electron, backend) call
|
|
7
12
|
// the single shared implementation instead of duplicating driver logic.
|
|
8
13
|
export { executeMongoQuery, testMongoConnection, __setMongoDriverForTests, } from "./db/mongoAdapter.js";
|
|
@@ -11,6 +16,8 @@ export { executeMysqlQuery, testMysqlConnection, __setMysqlDriverForTests, } fro
|
|
|
11
16
|
export { executeOracleQuery, testOracleConnection, __setOracleDriverForTests, } from "./db/oracleAdapter.js";
|
|
12
17
|
export { executeMssqlQuery, testMssqlConnection, __setMssqlDriverForTests, } from "./db/mssqlAdapter.js";
|
|
13
18
|
export { stripTrailingSqlTerminator } from "./db/sqlNormalize.js";
|
|
19
|
+
export { buildPgSslConfig, buildPgClientConfig } from "./db/pgClientConfig.js";
|
|
20
|
+
export { extractSqlState } from "./db/sqlState.js";
|
|
14
21
|
export { renderDbQueryReference } from "./db/db-query-reference.js";
|
|
15
22
|
export { normalizeOracleConnectString, OracleConnectStringError, } from "./db/oracleConnectString.js";
|
|
16
23
|
export { databaseConfigToDbConnection, } from "./db/connectionMapping.js";
|
package/dist/host/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,6EAA6E;AAC7E,4EAA4E;AAE5E,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,GASrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,+EAA+E;AAC/E,wEAAwE;AACxE,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,4BAA4B,GAG7B,MAAM,2BAA2B,CAAC;AAanC,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GAIzB,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,6EAA6E;AAC7E,4EAA4E;AAE5E,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,GASrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,yEAAyE;AACzE,4EAA4E;AAC5E,0EAA0E;AAC1E,oBAAoB;AACpB,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,wBAAwB,EACxB,4BAA4B,EAC5B,2BAA2B,GAG5B,MAAM,0BAA0B,CAAC;AAClC,+EAA+E;AAC/E,wEAAwE;AACxE,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,4BAA4B,GAG7B,MAAM,2BAA2B,CAAC;AAanC,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GAIzB,MAAM,yBAAyB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -26,6 +26,7 @@ export { resolveXPathCandidates, type XPathResolution } from "./contract/xpathRe
|
|
|
26
26
|
export { applySoapRequestTransforms, type SoapRequestConfig, type SoapRuntimeRequestLike, } from "./soap/transport.js";
|
|
27
27
|
export { buildWsSecurityHeader, injectWsSecurityHeader, type WsSecurityConfig, type WsSecurityHeaderParts, } from "./soap/wsSecurity.js";
|
|
28
28
|
export { SOAP_11_ENVELOPE_TEMPLATE, SOAP_12_ENVELOPE_TEMPLATE, getSoapEnvelopeTemplate, } from "./soap/envelope.js";
|
|
29
|
+
export { extractJsonPayload } from "./ai/jsonRepair.js";
|
|
29
30
|
export * from "./scenario-runner/index.js";
|
|
30
31
|
export * from "./host/index.js";
|
|
31
32
|
export * from "./types/index.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -25,6 +25,9 @@ export { resolveXPathCandidates } from "./contract/xpathResolver.js";
|
|
|
25
25
|
export { applySoapRequestTransforms, } from "./soap/transport.js";
|
|
26
26
|
export { buildWsSecurityHeader, injectWsSecurityHeader, } from "./soap/wsSecurity.js";
|
|
27
27
|
export { SOAP_11_ENVELOPE_TEMPLATE, SOAP_12_ENVELOPE_TEMPLATE, getSoapEnvelopeTemplate, } from "./soap/envelope.js";
|
|
28
|
+
// Tolerant JSON extraction from LLM reply text (AI node; desktop re-exports
|
|
29
|
+
// this so all hosts repair identically).
|
|
30
|
+
export { extractJsonPayload } from "./ai/jsonRepair.js";
|
|
28
31
|
export * from "./scenario-runner/index.js";
|
|
29
32
|
export * from "./host/index.js";
|
|
30
33
|
export * from "./types/index.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,WAAW,GAKZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,kBAAkB,GAEnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,uBAAuB,GAExB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AA2BhE,OAAO,EACL,eAAe,GAIhB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oBAAoB,GAErB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,GAEtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,GAEjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAwB,MAAM,6BAA6B,CAAC;AAC3F,kDAAkD;AAClD,OAAO,EACL,0BAA0B,GAG3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAGvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,WAAW,GAKZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,kBAAkB,GAEnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,uBAAuB,GAExB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AA2BhE,OAAO,EACL,eAAe,GAIhB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oBAAoB,GAErB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,GAEtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,GAEjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAwB,MAAM,6BAA6B,CAAC;AAC3F,kDAAkD;AAClD,OAAO,EACL,0BAA0B,GAG3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAGvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,4EAA4E;AAC5E,yCAAyC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ScenarioAiExecutionInput, ScenarioAiExecutionResult } from "../types.js";
|
|
2
|
+
import type { AiChatTransport } from "./types.js";
|
|
3
|
+
export interface AiExecutorOptions {
|
|
4
|
+
chatTransport?: AiChatTransport;
|
|
5
|
+
/** Upper bound applied on top of the node's own timeoutMs (host budget). */
|
|
6
|
+
nodeTimeoutMs?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const buildAiExecutor: (options: AiExecutorOptions) => (input: ScenarioAiExecutionInput) => Promise<ScenarioAiExecutionResult>;
|
|
9
|
+
//# sourceMappingURL=ai-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-executor.d.ts","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/ai-executor.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EAE1B,MAAM,aAAa,CAAC;AAIrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAaD,eAAO,MAAM,eAAe,GAC1B,SAAS,iBAAiB,MAEnB,OAAO,wBAAwB,KAAG,OAAO,CAAC,yBAAyB,CA6IzE,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// Canonical AI executor — orchestrates an AI scenario node once, identically
|
|
2
|
+
// on every host. Everything provider-agnostic happens here: template-resolve
|
|
3
|
+
// the prompt, parse the response example, assemble the messages, call the
|
|
4
|
+
// host-injected chat transport, tolerantly parse the reply (jsonRepair), and
|
|
5
|
+
// validate it against the schema derived from the example. Hosts differ only
|
|
6
|
+
// in the transport (backend: direct provider call; desktop: backend proxy) —
|
|
7
|
+
// credentials never reach core.
|
|
8
|
+
//
|
|
9
|
+
// Fail-fast rules run BEFORE the transport call so a misconfigured node never
|
|
10
|
+
// burns provider tokens.
|
|
11
|
+
import { extractJsonPayload } from "../../ai/jsonRepair.js";
|
|
12
|
+
import { validateResponseSchema } from "../../contract/schemaValidator.js";
|
|
13
|
+
import { DEFAULT_AI_MAX_TOKENS, DEFAULT_AI_TIMEOUT_MS, MAX_AI_MAX_TOKENS, MAX_AI_PROMPT_LENGTH, MAX_AI_RESPONSE_EXAMPLE_LENGTH, MAX_AI_TIMEOUT_MS, } from "../graphTraversal.js";
|
|
14
|
+
import { buildScenarioTemplateValues, resolveScenarioTemplateString, } from "../templateResolver.js";
|
|
15
|
+
import { withAbortAndTimeout } from "./helpers/abort.js";
|
|
16
|
+
import { buildAiMessages, deriveSchemaFromExample, parseJsonExample } from "./helpers/aiExample.js";
|
|
17
|
+
const failure = (message, details, durationMs = 0) => ({
|
|
18
|
+
outputData: null,
|
|
19
|
+
details,
|
|
20
|
+
durationMs,
|
|
21
|
+
failureMessage: message,
|
|
22
|
+
});
|
|
23
|
+
export const buildAiExecutor = (options) => async (input) => {
|
|
24
|
+
const config = input.node.data.config;
|
|
25
|
+
const details = {
|
|
26
|
+
connectionId: config.connectionId?.trim() || null,
|
|
27
|
+
provider: null,
|
|
28
|
+
model: null,
|
|
29
|
+
tokensUsed: null,
|
|
30
|
+
resolvedPrompt: null,
|
|
31
|
+
rawText: null,
|
|
32
|
+
};
|
|
33
|
+
if (!options.chatTransport) {
|
|
34
|
+
return failure("This host cannot run AI nodes (transport missing).", details);
|
|
35
|
+
}
|
|
36
|
+
if (!details.connectionId) {
|
|
37
|
+
return failure("AI node needs a managed AI connection.", details);
|
|
38
|
+
}
|
|
39
|
+
// --- Fail-fast validation (no provider call, no tokens burned) --------
|
|
40
|
+
const example = parseJsonExample(config.responseExample ?? "");
|
|
41
|
+
if (example.error || !example.value) {
|
|
42
|
+
return failure(example.error ?? "Response example is invalid.", details);
|
|
43
|
+
}
|
|
44
|
+
if ((config.responseExample ?? "").length > MAX_AI_RESPONSE_EXAMPLE_LENGTH) {
|
|
45
|
+
return failure(`Response example is capped at ${MAX_AI_RESPONSE_EXAMPLE_LENGTH} characters.`, details);
|
|
46
|
+
}
|
|
47
|
+
const templateValues = buildScenarioTemplateValues({
|
|
48
|
+
environment: input.context.environment,
|
|
49
|
+
globals: input.context.globals,
|
|
50
|
+
workflowContext: input.context.workflowContext,
|
|
51
|
+
nodeMetaByLabel: input.context.nodeMetaByLabel,
|
|
52
|
+
responseRoot: input.context.responseRoot,
|
|
53
|
+
dbResult: input.context.dbResult,
|
|
54
|
+
kafkaEvent: input.context.kafkaEvent,
|
|
55
|
+
redisResult: input.context.redisResult,
|
|
56
|
+
});
|
|
57
|
+
const resolvedPrompt = resolveScenarioTemplateString(config.prompt ?? "", templateValues).trim();
|
|
58
|
+
details.resolvedPrompt = resolvedPrompt || null;
|
|
59
|
+
if (!resolvedPrompt) {
|
|
60
|
+
return failure("AI prompt is empty.", details);
|
|
61
|
+
}
|
|
62
|
+
if (resolvedPrompt.length > MAX_AI_PROMPT_LENGTH) {
|
|
63
|
+
return failure(`AI prompt is capped at ${MAX_AI_PROMPT_LENGTH} characters after template resolution.`, details);
|
|
64
|
+
}
|
|
65
|
+
const messages = buildAiMessages({
|
|
66
|
+
resolvedPrompt,
|
|
67
|
+
exampleText: config.responseExample,
|
|
68
|
+
});
|
|
69
|
+
const maxTokens = Math.min(MAX_AI_MAX_TOKENS, Math.max(1, Math.round(config.maxTokens ?? DEFAULT_AI_MAX_TOKENS)));
|
|
70
|
+
const timeoutMs = Math.min(options.nodeTimeoutMs ?? MAX_AI_TIMEOUT_MS, Math.min(MAX_AI_TIMEOUT_MS, Math.max(1000, Math.round(config.timeoutMs ?? DEFAULT_AI_TIMEOUT_MS))));
|
|
71
|
+
// --- Provider call ----------------------------------------------------
|
|
72
|
+
const startedAtMs = Date.now();
|
|
73
|
+
let transportResult;
|
|
74
|
+
try {
|
|
75
|
+
transportResult = await withAbortAndTimeout(options.chatTransport({
|
|
76
|
+
connectionId: details.connectionId,
|
|
77
|
+
messages,
|
|
78
|
+
maxTokens,
|
|
79
|
+
signal: input.signal,
|
|
80
|
+
}), timeoutMs, `AI node ${input.stepId}`, input.signal);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
return failure(error instanceof Error ? error.message : "AI provider call failed.", details, Date.now() - startedAtMs);
|
|
84
|
+
}
|
|
85
|
+
const durationMs = Date.now() - startedAtMs;
|
|
86
|
+
details.provider = transportResult.provider ?? null;
|
|
87
|
+
details.model = transportResult.model ?? null;
|
|
88
|
+
details.tokensUsed =
|
|
89
|
+
typeof transportResult.tokensUsed === "number" ? transportResult.tokensUsed : null;
|
|
90
|
+
details.rawText = transportResult.text ?? null;
|
|
91
|
+
const rawText = (transportResult.text ?? "").trim();
|
|
92
|
+
if (!rawText) {
|
|
93
|
+
return failure("AI provider returned an empty reply.", details, durationMs);
|
|
94
|
+
}
|
|
95
|
+
// --- Tolerant parse + schema validation -------------------------------
|
|
96
|
+
let parsed;
|
|
97
|
+
try {
|
|
98
|
+
parsed = JSON.parse(extractJsonPayload(rawText));
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return failure("AI reply is not valid JSON (even after repair). See the raw reply in the step result.", details, durationMs);
|
|
102
|
+
}
|
|
103
|
+
const schema = deriveSchemaFromExample(example.value);
|
|
104
|
+
const schemaFailures = validateResponseSchema(schema, parsed).filter((entry) => entry.status === "FAIL");
|
|
105
|
+
if (schemaFailures.length > 0) {
|
|
106
|
+
const summary = schemaFailures
|
|
107
|
+
.slice(0, 3)
|
|
108
|
+
.map((entry) => entry.message)
|
|
109
|
+
.join("; ");
|
|
110
|
+
return failure(`AI reply did not match the expected format: ${summary}`, details, durationMs);
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
outputData: parsed,
|
|
114
|
+
details,
|
|
115
|
+
durationMs,
|
|
116
|
+
failureMessage: null,
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=ai-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-executor.js","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/ai-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,10 @@ export interface DatabaseConnectionConfig {
|
|
|
9
9
|
username?: string;
|
|
10
10
|
password?: string;
|
|
11
11
|
ssl?: boolean;
|
|
12
|
+
sslMode?: "disable" | "require" | "verify-ca" | "verify-full";
|
|
13
|
+
caCert?: string;
|
|
14
|
+
clientCert?: string;
|
|
15
|
+
clientKey?: string;
|
|
12
16
|
}
|
|
13
17
|
export interface RedisConnectionConfig {
|
|
14
18
|
host: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-config.d.ts","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/connection-config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,kBAAkB,CAAC;AAErE,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,sBAAsB,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"connection-config.d.ts","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/connection-config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,kBAAkB,CAAC;AAErE,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,sBAAsB,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IAId,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,CAAC;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,GAAG,eAAe,GAAG,eAAe,CAAC;CAC7D;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,uBAAuB,GAC/B,wBAAwB,GACxB,qBAAqB,GACrB,qBAAqB,GACrB,4BAA4B,CAAC"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import type { ScenarioDbExecutionInput, ScenarioDbExecutionResult } from "../types.js";
|
|
1
|
+
import type { DbScenarioExpectedError, ScenarioDbExecutionInput, ScenarioDbExecutionResult } from "../types.js";
|
|
2
2
|
import type { ScenarioRuntimeAdapterFactoryOptions } from "./types.js";
|
|
3
|
+
import { extractSqlState } from "../../host/db/sqlState.js";
|
|
4
|
+
export { extractSqlState };
|
|
5
|
+
export declare const matchDbExpectedError: (expectation: DbScenarioExpectedError, message: string, sqlState: string | undefined) => {
|
|
6
|
+
matched: boolean;
|
|
7
|
+
mismatchReason: string | null;
|
|
8
|
+
};
|
|
3
9
|
export declare const buildDbExecutor: (options: ScenarioRuntimeAdapterFactoryOptions) => (input: ScenarioDbExecutionInput) => Promise<ScenarioDbExecutionResult>;
|
|
4
10
|
//# sourceMappingURL=db-executor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-executor.d.ts","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/db-executor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"db-executor.d.ts","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/db-executor.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAEvE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,CAAC;AAI3B,eAAO,MAAM,oBAAoB,GAC/B,aAAa,uBAAuB,EACpC,SAAS,MAAM,EACf,UAAU,MAAM,GAAG,SAAS,KAC3B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAgCnD,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,SAAS,oCAAoC,MAEtC,OAAO,wBAAwB,KAAG,OAAO,CAAC,yBAAyB,CA+GzE,CAAC"}
|
|
@@ -2,15 +2,87 @@
|
|
|
2
2
|
// Resolves the workspace connection, defers the actual query execution
|
|
3
3
|
// to the host-supplied `databaseExecutor` driver (mongoose / oracledb /
|
|
4
4
|
// postgres / etc.), wraps the result in the scenario adapter shape.
|
|
5
|
+
//
|
|
6
|
+
// Also owns the two stored-function-testing semantics that must behave
|
|
7
|
+
// identically on every host: session capability detection (a `useSession`
|
|
8
|
+
// node on a host without `databaseSessionRelease` fails fast instead of
|
|
9
|
+
// silently running autocommit) and expected-error evaluation (pgTAP
|
|
10
|
+
// `throws_ok` equivalent — a matching failure PASSES the node).
|
|
5
11
|
import { withAbortAndTimeout } from "./helpers/abort.js";
|
|
12
|
+
import { extractSqlState } from "../../host/db/sqlState.js";
|
|
13
|
+
export { extractSqlState };
|
|
14
|
+
// Shared with hosts that build their own dbExecutor (desktop's IPC-backed
|
|
15
|
+
// adapter) so expectError semantics never drift between runners.
|
|
16
|
+
export const matchDbExpectedError = (expectation, message, sqlState) => {
|
|
17
|
+
const wantedState = expectation.sqlState?.trim();
|
|
18
|
+
const wantedPattern = expectation.messagePattern?.trim();
|
|
19
|
+
if (wantedState && wantedState.toUpperCase() !== (sqlState ?? "").toUpperCase()) {
|
|
20
|
+
return {
|
|
21
|
+
matched: false,
|
|
22
|
+
mismatchReason: `expected SQLSTATE ${wantedState}, got ${sqlState ?? "none"}`,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (wantedPattern) {
|
|
26
|
+
let re;
|
|
27
|
+
try {
|
|
28
|
+
re = new RegExp(wantedPattern);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return {
|
|
32
|
+
matched: false,
|
|
33
|
+
mismatchReason: `invalid expectError.messagePattern regex: ${wantedPattern}`,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (!re.test(message)) {
|
|
37
|
+
return {
|
|
38
|
+
matched: false,
|
|
39
|
+
mismatchReason: `error message did not match /${wantedPattern}/`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (!wantedState && !wantedPattern) {
|
|
44
|
+
// An empty expectation still means "this query must fail".
|
|
45
|
+
return { matched: true, mismatchReason: null };
|
|
46
|
+
}
|
|
47
|
+
return { matched: true, mismatchReason: null };
|
|
48
|
+
};
|
|
6
49
|
export const buildDbExecutor = (options) => async (input) => {
|
|
7
50
|
const connection = await options.resolveConnection(input.node.data.config.connectionId);
|
|
51
|
+
const expectError = input.node.data.config.expectError;
|
|
52
|
+
const hasExpectation = Boolean(expectError && (expectError.sqlState?.trim() || expectError.messagePattern?.trim()));
|
|
53
|
+
if (input.session && !options.drivers.databaseSessionRelease) {
|
|
54
|
+
return {
|
|
55
|
+
rawResult: { success: false, rows: [], rowCount: 0, error: "sessions unsupported" },
|
|
56
|
+
dbResult: null,
|
|
57
|
+
outputData: null,
|
|
58
|
+
failureMessage: "This node uses a scenario DB session, but the current runner does not support DB sessions. Run it via a host with session support or disable 'Run in scenario transaction'.",
|
|
59
|
+
};
|
|
60
|
+
}
|
|
8
61
|
try {
|
|
9
62
|
const result = await withAbortAndTimeout(options.drivers.databaseExecutor({
|
|
10
63
|
connection,
|
|
11
64
|
resolvedQuery: input.resolvedQuery,
|
|
12
65
|
resolvedParams: input.resolvedParams,
|
|
66
|
+
session: input.session,
|
|
13
67
|
}), options.nodeTimeoutMs, `Database node ${input.stepId}`, input.signal);
|
|
68
|
+
if (hasExpectation) {
|
|
69
|
+
return {
|
|
70
|
+
rawResult: {
|
|
71
|
+
success: false,
|
|
72
|
+
rows: result.rows,
|
|
73
|
+
rowCount: result.rowCount,
|
|
74
|
+
error: "expected an error but the query succeeded",
|
|
75
|
+
},
|
|
76
|
+
dbResult: result.rows,
|
|
77
|
+
outputData: { rows: result.rows, rowCount: result.rowCount },
|
|
78
|
+
failureMessage: `Expected the query to fail (${[
|
|
79
|
+
expectError?.sqlState ? `SQLSTATE ${expectError.sqlState}` : null,
|
|
80
|
+
expectError?.messagePattern ? `message /${expectError.messagePattern}/` : null,
|
|
81
|
+
]
|
|
82
|
+
.filter(Boolean)
|
|
83
|
+
.join(", ")}), but it succeeded.`,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
14
86
|
return {
|
|
15
87
|
rawResult: {
|
|
16
88
|
success: true,
|
|
@@ -27,16 +99,49 @@ export const buildDbExecutor = (options) => async (input) => {
|
|
|
27
99
|
}
|
|
28
100
|
catch (error) {
|
|
29
101
|
const message = error instanceof Error ? error.message : String(error);
|
|
102
|
+
const sqlState = extractSqlState(error);
|
|
103
|
+
if (hasExpectation && expectError) {
|
|
104
|
+
const { matched, mismatchReason } = matchDbExpectedError(expectError, message, sqlState);
|
|
105
|
+
if (matched) {
|
|
106
|
+
const expectedError = { sqlState: sqlState ?? null, message };
|
|
107
|
+
return {
|
|
108
|
+
rawResult: {
|
|
109
|
+
success: true,
|
|
110
|
+
rows: [],
|
|
111
|
+
rowCount: 0,
|
|
112
|
+
...(sqlState ? { sqlState } : {}),
|
|
113
|
+
},
|
|
114
|
+
dbResult: null,
|
|
115
|
+
outputData: { expectedError, rows: [], rowCount: 0 },
|
|
116
|
+
failureMessage: null,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
rawResult: {
|
|
121
|
+
success: false,
|
|
122
|
+
rows: [],
|
|
123
|
+
rowCount: 0,
|
|
124
|
+
error: message,
|
|
125
|
+
...(sqlState ? { sqlState } : {}),
|
|
126
|
+
},
|
|
127
|
+
dbResult: null,
|
|
128
|
+
outputData: null,
|
|
129
|
+
failureMessage: `Query failed, but not as expected (${mismatchReason}). Actual error: ${message}`,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
30
132
|
return {
|
|
31
133
|
rawResult: {
|
|
32
134
|
success: false,
|
|
33
135
|
rows: [],
|
|
34
136
|
rowCount: 0,
|
|
35
137
|
error: message,
|
|
138
|
+
...(sqlState ? { sqlState } : {}),
|
|
36
139
|
},
|
|
37
140
|
dbResult: null,
|
|
38
141
|
outputData: null,
|
|
39
|
-
failureMessage:
|
|
142
|
+
failureMessage: sqlState
|
|
143
|
+
? `${sqlState}: ${message || "Database query failed."}`
|
|
144
|
+
: message || "Database query failed.",
|
|
40
145
|
};
|
|
41
146
|
}
|
|
42
147
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-executor.js","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/db-executor.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,uEAAuE;AACvE,wEAAwE;AACxE,oEAAoE;
|
|
1
|
+
{"version":3,"file":"db-executor.js","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/db-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ScenarioAiChatMessage } from "../../types.js";
|
|
2
|
+
export interface ParsedAiExample {
|
|
3
|
+
value: Record<string, unknown> | null;
|
|
4
|
+
error: string | null;
|
|
5
|
+
}
|
|
6
|
+
export declare const parseJsonExample: (exampleText: string) => ParsedAiExample;
|
|
7
|
+
export declare const deriveSchemaFromExample: (example: Record<string, unknown>) => Record<string, unknown>;
|
|
8
|
+
export declare const buildAiMessages: ({ resolvedPrompt, exampleText, }: {
|
|
9
|
+
resolvedPrompt: string;
|
|
10
|
+
exampleText: string;
|
|
11
|
+
}) => ScenarioAiChatMessage[];
|
|
12
|
+
//# sourceMappingURL=aiExample.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiExample.d.ts","sourceRoot":"","sources":["../../../../src/scenario-runner/adapters/helpers/aiExample.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,gBAAgB,GAAI,aAAa,MAAM,KAAG,eAqBtD,CAAC;AAsBF,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAWxB,CAAC;AAKF,eAAO,MAAM,eAAe,GAAI,kCAG7B;IACD,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB,KAAG,qBAAqB,EAWxB,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// AI-node response-example helpers, shared by the executor, the condition
|
|
2
|
+
// suggestion builder, and host UIs:
|
|
3
|
+
// - parseJsonExample: tolerant parse of the user-authored JSON example
|
|
4
|
+
// - deriveSchemaFromExample: example -> lenient JSON Schema (top-level keys
|
|
5
|
+
// required, extras allowed; numbers never tighten to integers; nested
|
|
6
|
+
// objects recurse WITHOUT nested `required` so only the contract the
|
|
7
|
+
// downstream `{{Label.field}}` references depend on is enforced)
|
|
8
|
+
// - buildAiMessages: the fixed system instruction + resolved user prompt
|
|
9
|
+
import { extractJsonPayload } from "../../../ai/jsonRepair.js";
|
|
10
|
+
export const parseJsonExample = (exampleText) => {
|
|
11
|
+
const trimmed = (exampleText ?? "").trim();
|
|
12
|
+
if (!trimmed) {
|
|
13
|
+
return { value: null, error: "Response example is required." };
|
|
14
|
+
}
|
|
15
|
+
let parsed;
|
|
16
|
+
try {
|
|
17
|
+
parsed = JSON.parse(extractJsonPayload(trimmed));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return { value: null, error: "Response example is not valid JSON." };
|
|
21
|
+
}
|
|
22
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
23
|
+
return {
|
|
24
|
+
value: null,
|
|
25
|
+
error: "Response example must be a JSON object (e.g. {\"sentiment\": \"positive\"}).",
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return { value: parsed, error: null };
|
|
29
|
+
};
|
|
30
|
+
const deriveValueSchema = (value) => {
|
|
31
|
+
if (value === null || value === undefined) {
|
|
32
|
+
return {}; // no constraint — the example gives no type signal
|
|
33
|
+
}
|
|
34
|
+
if (typeof value === "string")
|
|
35
|
+
return { type: "string" };
|
|
36
|
+
if (typeof value === "boolean")
|
|
37
|
+
return { type: "boolean" };
|
|
38
|
+
// Never "integer": an example value of 1 must not reject a reply of 0.9.
|
|
39
|
+
if (typeof value === "number")
|
|
40
|
+
return { type: "number" };
|
|
41
|
+
if (Array.isArray(value)) {
|
|
42
|
+
return value.length > 0
|
|
43
|
+
? { type: "array", items: deriveValueSchema(value[0]) }
|
|
44
|
+
: { type: "array" };
|
|
45
|
+
}
|
|
46
|
+
const properties = {};
|
|
47
|
+
for (const [key, nested] of Object.entries(value)) {
|
|
48
|
+
properties[key] = deriveValueSchema(nested);
|
|
49
|
+
}
|
|
50
|
+
return { type: "object", properties, additionalProperties: true };
|
|
51
|
+
};
|
|
52
|
+
export const deriveSchemaFromExample = (example) => {
|
|
53
|
+
const properties = {};
|
|
54
|
+
for (const [key, value] of Object.entries(example)) {
|
|
55
|
+
properties[key] = deriveValueSchema(value);
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
type: "object",
|
|
59
|
+
properties,
|
|
60
|
+
required: Object.keys(example),
|
|
61
|
+
additionalProperties: true,
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
// The word "JSON" in the system message also satisfies OpenAI's
|
|
65
|
+
// `response_format: json_object` requirement (it rejects prompts that never
|
|
66
|
+
// mention JSON).
|
|
67
|
+
export const buildAiMessages = ({ resolvedPrompt, exampleText, }) => [
|
|
68
|
+
{
|
|
69
|
+
role: "system",
|
|
70
|
+
content: [
|
|
71
|
+
"You are a step inside an automated API-testing scenario.",
|
|
72
|
+
"Reply with ONLY a single JSON object — no markdown, no code fences, no prose.",
|
|
73
|
+
"The reply must use the same top-level keys and value types as this example (values may differ):",
|
|
74
|
+
exampleText.trim(),
|
|
75
|
+
].join("\n"),
|
|
76
|
+
},
|
|
77
|
+
{ role: "user", content: resolvedPrompt },
|
|
78
|
+
];
|
|
79
|
+
//# sourceMappingURL=aiExample.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiExample.js","sourceRoot":"","sources":["../../../../src/scenario-runner/adapters/helpers/aiExample.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,oCAAoC;AACpC,yEAAyE;AACzE,8EAA8E;AAC9E,0EAA0E;AAC1E,yEAAyE;AACzE,qEAAqE;AACrE,2EAA2E;AAE3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAQ/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,WAAmB,EAAmB,EAAE;IACvE,MAAM,OAAO,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC;IACjE,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC;IACvE,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,OAAO;YACL,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,8EAA8E;SACtF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAiC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAA2B,EAAE;IACpE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC,CAAC,mDAAmD;IAChE,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACzD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC3D,yEAAyE;IACzE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACzD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC;YACrB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YACvD,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACxB,CAAC;IACD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QAC7E,UAAU,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,OAAgC,EACP,EAAE;IAC3B,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,UAAU,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU;QACV,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B,oBAAoB,EAAE,IAAI;KAC3B,CAAC;AACJ,CAAC,CAAC;AAEF,gEAAgE;AAChE,4EAA4E;AAC5E,iBAAiB;AACjB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,cAAc,EACd,WAAW,GAIZ,EAA2B,EAAE,CAAC;IAC7B;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,0DAA0D;YAC1D,+EAA+E;YAC/E,iGAAiG;YACjG,WAAW,CAAC,IAAI,EAAE;SACnB,CAAC,IAAI,CAAC,IAAI,CAAC;KACb;IACD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE;CAC1C,CAAC"}
|