@deepagents/text2sql 7.1.0 → 7.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +63 -76
  2. package/dist/bin/sql.js +42 -584
  3. package/dist/eval/src/evals/models.d.ts +12 -0
  4. package/dist/eval/src/evals/models.d.ts.map +1 -0
  5. package/dist/eval/src/evals/sql-create-context/sql-create-context.eval.d.ts +2 -0
  6. package/dist/eval/src/evals/sql-create-context/sql-create-context.eval.d.ts.map +1 -0
  7. package/dist/index.d.ts +0 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +130 -211
  10. package/dist/index.js.map +4 -4
  11. package/dist/lib/adapter-index.d.ts +0 -2
  12. package/dist/lib/adapter-index.d.ts.map +1 -1
  13. package/dist/lib/adapters/posthog/index.js.map +2 -2
  14. package/dist/lib/adapters/posthog/posthog.d.ts.map +1 -1
  15. package/dist/lib/adapters/posthog/schema.posthog.grounding.d.ts.map +1 -1
  16. package/dist/lib/adapters/spreadsheet/index.js +4 -4
  17. package/dist/lib/adapters/spreadsheet/index.js.map +2 -2
  18. package/dist/lib/adapters/sqlite/index.js +0 -3
  19. package/dist/lib/adapters/sqlite/index.js.map +2 -2
  20. package/dist/lib/adapters/sqlite/sqlite.d.ts.map +1 -1
  21. package/dist/lib/adapters/sqlserver/index.js +43 -59
  22. package/dist/lib/adapters/sqlserver/index.js.map +2 -2
  23. package/dist/lib/adapters/sqlserver/table.sqlserver.grounding.d.ts +1 -1
  24. package/dist/lib/adapters/sqlserver/table.sqlserver.grounding.d.ts.map +1 -1
  25. package/dist/lib/agents/question.agent.d.ts.map +1 -1
  26. package/dist/lib/agents/suggestions.agents.d.ts.map +1 -1
  27. package/dist/lib/fs/sqlite/sqlite-fs.d.ts.map +1 -1
  28. package/dist/lib/index-cache.d.ts +2 -3
  29. package/dist/lib/index-cache.d.ts.map +1 -1
  30. package/dist/lib/sql-command.d.ts +1 -4
  31. package/dist/lib/sql-command.d.ts.map +1 -1
  32. package/dist/lib/sql.d.ts +0 -5
  33. package/dist/lib/sql.d.ts.map +1 -1
  34. package/dist/lib/synthesis/extractors/base-contextual-extractor.d.ts.map +1 -1
  35. package/dist/lib/synthesis/extractors/segmented-context-extractor.d.ts.map +1 -1
  36. package/dist/lib/synthesis/extractors/sql-extractor.d.ts.map +1 -1
  37. package/dist/lib/synthesis/index.js.map +2 -2
  38. package/dist/lib/synthesis/synthesizers/breadth-evolver.d.ts.map +1 -1
  39. package/dist/lib/synthesis/synthesizers/depth-evolver.d.ts.map +1 -1
  40. package/dist/lib/synthesis/synthesizers/persona-generator.d.ts.map +1 -1
  41. package/dist/scripts/scripts/bigquery-test.d.ts +2 -0
  42. package/dist/scripts/scripts/bigquery-test.d.ts.map +1 -0
  43. package/package.json +4 -6
  44. package/dist/lib/index-lock.d.ts +0 -60
  45. package/dist/lib/index-lock.d.ts.map +0 -1
  46. package/dist/lib/prompt.d.ts +0 -2
  47. package/dist/lib/prompt.d.ts.map +0 -1
@@ -1,7 +1,6 @@
1
1
  import { type ContextFragment } from '@deepagents/context';
2
2
  import { type Adapter, type IntrospectionPhase } from './adapters/adapter.ts';
3
3
  import { type IndexCache } from './index-cache.ts';
4
- import { type IndexLock } from './index-lock.ts';
5
4
  export declare const TEXT2SQL_INDEX_PROGRESS_CHUNK = "data-text2sql-index-progress";
6
5
  export type Text2SqlIndexProgressEventType = 'index:start' | 'index:end' | 'adapter:start' | 'adapter:end' | 'adapter:cache-hit' | 'adapter:cache-miss' | 'phase:start' | 'phase:progress' | 'phase:end' | 'adapter:error' | 'index:error';
7
6
  export interface Text2SqlIndexProgressEvent {
@@ -19,7 +18,6 @@ export type Text2SqlIndexProgressHandler = (event: Text2SqlIndexProgressEvent) =
19
18
  export interface AdapterIndexerOptions {
20
19
  adapters: Record<string, Adapter>;
21
20
  cache?: IndexCache;
22
- lock: IndexLock;
23
21
  }
24
22
  export interface AdapterIndexerIndexOptions {
25
23
  adapterNames?: readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"adapter-index.d.ts","sourceRoot":"","sources":["../../src/lib/adapter-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,qBAAqB,CAAC;AAMrE,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,kBAAkB,EAExB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,eAAO,MAAM,6BAA6B,iCAAiC,CAAC;AAE5E,MAAM,MAAM,8BAA8B,GACtC,aAAa,GACb,WAAW,GACX,eAAe,GACf,aAAa,GACb,mBAAmB,GACnB,oBAAoB,GACpB,aAAa,GACb,gBAAgB,GAChB,WAAW,GACX,eAAe,GACf,aAAa,CAAC;AAElB,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,8BAA8B,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,4BAA4B,GAAG,CACzC,KAAK,EAAE,0BAA0B,KAC9B,IAAI,CAAC;AAEV,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,4BAA4B,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,CAAC,EAAE,4BAA4B,CAAC;CAC3C;AAiCD,qBAAa,cAAc;;gBAKb,OAAO,EAAE,qBAAqB;IAYpC,KAAK,CACT,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,eAAe,EAAE,CAAC;IA+CvB,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,eAAe,EAAE,CAAC;CAqH9B"}
1
+ {"version":3,"file":"adapter-index.d.ts","sourceRoot":"","sources":["../../src/lib/adapter-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,qBAAqB,CAAC;AAMrE,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,kBAAkB,EAExB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,eAAO,MAAM,6BAA6B,iCAAiC,CAAC;AAE5E,MAAM,MAAM,8BAA8B,GACtC,aAAa,GACb,WAAW,GACX,eAAe,GACf,aAAa,GACb,mBAAmB,GACnB,oBAAoB,GACpB,aAAa,GACb,gBAAgB,GAChB,WAAW,GACX,eAAe,GACf,aAAa,CAAC;AAElB,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,8BAA8B,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,4BAA4B,GAAG,CACzC,KAAK,EAAE,0BAA0B,KAC9B,IAAI,CAAC;AAEV,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,4BAA4B,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,CAAC,EAAE,4BAA4B,CAAC;CAC3C;AAiCD,qBAAa,cAAc;;gBAIb,OAAO,EAAE,qBAAqB;IAWpC,KAAK,CACT,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,eAAe,EAAE,CAAC;IA+CvB,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,eAAe,EAAE,CAAC;CAkG9B"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/adapters/adapter.ts", "../../../../src/lib/agents/exceptions.ts", "../../../../src/lib/fragments/schema.ts", "../../../../src/lib/adapters/groundings/context.ts", "../../../../src/lib/adapters/posthog/definitions.posthog.grounding.ts", "../../../../src/lib/adapters/groundings/abstract.grounding.ts", "../../../../src/lib/adapters/posthog/info.posthog.grounding.ts", "../../../../src/lib/adapters/posthog/posthog.ts", "../../../../src/lib/adapters/posthog/posthog.sql-policy.ts", "../../../../src/lib/sql-scope-error.ts", "../../../../src/lib/adapters/posthog/schema.posthog.grounding.ts", "../../../../src/lib/adapters/posthog/transport.ts", "../../../../src/lib/adapters/posthog/index.ts"],
4
- "sourcesContent": ["import { type SqlLanguage, format as formatSql } from 'sql-formatter';\nimport { z } from 'zod';\n\nimport type { ContextFragment, FragmentObject } from '@deepagents/context';\n\nimport { SQLReadOnlyError, SQLScopeError } from '../agents/exceptions.ts';\nimport {\n column,\n constraint,\n dialectInfo,\n index,\n relationship,\n table,\n view,\n} from '../fragments/schema.ts';\nimport type { AbstractGrounding } from './groundings/abstract.grounding.ts';\nimport {\n type GroundingContext,\n createGroundingContext,\n} from './groundings/context.ts';\nimport type { View } from './groundings/view.grounding.ts';\nimport {\n type SqlPolicyAnalyzer,\n type SqlPolicyViolation,\n} from './sql-policy.ts';\n\nexport {\n type SqlPolicyAnalyzer,\n type SqlPolicyContext,\n type SqlPolicyViolation,\n} from './sql-policy.ts';\n\n/**\n * Filter type for view/table names.\n * - string[]: explicit list of view names\n * - RegExp: pattern to match view names\n * - function: predicate to filter view names\n */\nexport type Filter = string[] | RegExp | ((viewName: string) => boolean);\n\nexport interface Table {\n name: string;\n schema?: string;\n rawName?: string;\n columns: {\n name: string;\n type: string;\n kind?: 'LowCardinality' | 'Enum';\n values?: string[];\n isIndexed?: boolean;\n stats?: ColumnStats;\n }[];\n rowCount?: number;\n sizeHint?: 'tiny' | 'small' | 'medium' | 'large' | 'huge';\n indexes?: TableIndex[];\n constraints?: TableConstraint[];\n}\n\nexport interface TableIndex {\n name: string;\n columns: string[];\n unique?: boolean;\n type?: string;\n}\n\nexport interface TableConstraint {\n name: string;\n type:\n 'CHECK' | 'UNIQUE' | 'NOT_NULL' | 'DEFAULT' | 'PRIMARY_KEY' | 'FOREIGN_KEY';\n columns?: string[];\n definition?: string;\n defaultValue?: string;\n referencedTable?: string;\n referencedColumns?: string[];\n}\n\nexport interface ColumnStats {\n min?: string;\n max?: string;\n nullFraction?: number;\n nDistinct?: number;\n correlation?: number;\n}\n\nexport type Relationship = {\n table: string;\n from: string[];\n referenced_table: string;\n to: string[];\n};\n\nexport type TablesFilter = string[] | RegExp;\n\nexport interface Introspection {\n tables: Table[];\n relationships: Relationship[];\n}\n\nexport interface AdapterInfo {\n dialect: string;\n version?: string;\n database?: string;\n details?: FragmentObject;\n}\n\nexport type AdapterInfoProvider =\n AdapterInfo | (() => Promise<AdapterInfo> | AdapterInfo);\n\nexport type IntrospectionPhase =\n | 'info'\n | 'tables'\n | 'views'\n | 'row_counts'\n | 'constraints'\n | 'indexes'\n | 'column_stats'\n | 'column_values'\n | 'low_cardinality'\n | 'relationships'\n | 'definitions';\n\nexport type IntrospectionProgressType =\n 'phase:start' | 'phase:progress' | 'phase:end';\n\nexport interface IntrospectionProgress {\n type: IntrospectionProgressType;\n phase: IntrospectionPhase;\n message: string;\n table?: string;\n current?: number;\n total?: number;\n timestampMs?: number;\n}\n\nexport type OnProgress = (progress: IntrospectionProgress) => void;\n\nexport type GroundingFn = (adapter: Adapter) => AbstractGrounding;\n\n/**\n * Builds a grounding factory for a grounding that needs a concrete adapter's\n * API (BigQuery datasets, DuckDB namespaces, ...). Given any other adapter,\n * the factory throws.\n */\nexport function groundingFor<A extends Adapter>(\n adapterType: abstract new (...args: never[]) => A,\n create: (adapter: A) => AbstractGrounding,\n): GroundingFn {\n return (adapter) => {\n if (!(adapter instanceof adapterType)) {\n throw new Error(\n `A ${adapterType.name} grounding needs a ${adapterType.name} adapter, not ${adapter.constructor.name}.`,\n );\n }\n return create(adapter);\n };\n}\n\nexport type ExecuteFunction = (sql: string) => Promise<any> | any;\nexport type ValidateFunction = (\n sql: string,\n) => Promise<string | void> | string | void;\n\nexport abstract class Adapter {\n readonly #policyAnalyzer: SqlPolicyAnalyzer;\n\n /**\n * Injects the strategy that guards validate() and execute().\n */\n protected constructor(policyAnalyzer: SqlPolicyAnalyzer) {\n this.#policyAnalyzer = policyAnalyzer;\n }\n\n abstract grounding: GroundingFn[];\n\n abstract readonly formatterLanguage: SqlLanguage;\n\n /**\n * Default schema name for this database.\n * PostgreSQL: 'public', SQL Server: 'dbo', SQLite: undefined\n */\n abstract readonly defaultSchema: string | undefined;\n\n /**\n * System schemas to exclude from introspection by default.\n */\n abstract readonly systemSchemas: string[];\n\n /**\n * Introspect the database schema and return context fragments.\n *\n * Executes all configured groundings to populate the context, then\n * generates fragments from the complete context data.\n *\n * @param ctx - Optional grounding context for sharing state between groundings\n * @returns Array of context fragments representing the database schema\n */\n async introspect(ctx = createGroundingContext()): Promise<ContextFragment[]> {\n // Phase 1: All groundings populate ctx\n for (const fn of this.grounding) {\n const grounding = fn(this);\n if (grounding.phase) {\n ctx.onProgress({\n type: 'phase:start',\n phase: grounding.phase,\n message: `Starting ${grounding.name} introspection...`,\n });\n }\n try {\n await grounding.execute(ctx);\n } finally {\n if (grounding.phase) {\n ctx.onProgress({\n type: 'phase:end',\n phase: grounding.phase,\n message: `Finished ${grounding.name} introspection.`,\n });\n }\n }\n }\n\n // Phase 2: Generate fragments from complete ctx\n return this.#toSchemaFragments(ctx);\n }\n\n /**\n * Resolve the allowed entity names (tables + views) from grounding config.\n * Asks each grounding to contribute its entities; annotators contribute\n * nothing, so their metadata scans are skipped.\n * Results are NOT cached \u2014 call once and store the result.\n */\n async resolveAllowedEntities(): Promise<string[]> {\n const ctx = createGroundingContext();\n for (const fn of this.grounding) {\n await fn(this).contributeEntities(ctx);\n }\n return [...ctx.tables.map((t) => t.name), ...ctx.views.map((v) => v.name)];\n }\n\n /**\n * Convert complete grounding context to schema fragments.\n * Called after all groundings have populated ctx with data.\n */\n #toSchemaFragments(ctx: GroundingContext): ContextFragment[] {\n const fragments: ContextFragment[] = [];\n\n // Dialect info\n if (ctx.info) {\n fragments.push(\n dialectInfo({\n dialect: ctx.info.dialect,\n version: ctx.info.version,\n database: ctx.info.database,\n details: ctx.info.details,\n }),\n );\n }\n\n // Tables (with all annotations now included)\n for (const t of ctx.tables) {\n fragments.push(this.#tableToFragment(t));\n }\n\n // Views\n for (const v of ctx.views) {\n fragments.push(this.#viewToFragment(v));\n }\n\n // Relationships \u2014 filter out FK columns that were removed by column restriction\n const tableMap = new Map(ctx.tables.map((t) => [t.name, t]));\n const tableColumnSets = new Map(\n ctx.tables.map((t) => [t.name, new Set(t.columns.map((c) => c.name))]),\n );\n for (const rel of ctx.relationships) {\n const sourceColumns = tableColumnSets.get(rel.table);\n const targetColumns = tableColumnSets.get(rel.referenced_table);\n if (\n sourceColumns &&\n rel.from.some((column) => !sourceColumns.has(column))\n ) {\n continue;\n }\n if (\n targetColumns &&\n rel.to.some((column) => !targetColumns.has(column))\n ) {\n continue;\n }\n\n const sourceTable = tableMap.get(rel.table);\n const targetTable = tableMap.get(rel.referenced_table);\n fragments.push(\n this.#relationshipToFragment(rel, sourceTable, targetTable),\n );\n }\n\n fragments.push(...(ctx.fragments ?? []));\n\n return fragments;\n }\n\n /**\n * Convert a Table to a table fragment with nested column, index, and constraint fragments.\n */\n #tableToFragment(t: Table): ContextFragment {\n // Build constraint lookup maps for column-level annotations\n const pkConstraint = t.constraints?.find((c) => c.type === 'PRIMARY_KEY');\n const pkColumns = new Set(pkConstraint?.columns ?? []);\n\n const notNullColumns = new Set(\n t.constraints\n ?.filter((c) => c.type === 'NOT_NULL')\n .flatMap((c) => c.columns ?? []) ?? [],\n );\n\n const defaultByColumn = new Map<string, string>();\n for (const c of t.constraints?.filter((c) => c.type === 'DEFAULT') ?? []) {\n for (const col of c.columns ?? []) {\n if (c.defaultValue != null) {\n defaultByColumn.set(col, c.defaultValue);\n }\n }\n }\n\n // Single-column UNIQUE constraints\n const uniqueColumns = new Set(\n t.constraints\n ?.filter((c) => c.type === 'UNIQUE' && c.columns?.length === 1)\n .flatMap((c) => c.columns ?? []) ?? [],\n );\n\n // Foreign key lookup: column -> referenced table.column\n const fkByColumn = new Map<string, string>();\n for (const c of t.constraints?.filter((c) => c.type === 'FOREIGN_KEY') ??\n []) {\n const cols = c.columns ?? [];\n const refCols = c.referencedColumns ?? [];\n for (let i = 0; i < cols.length; i++) {\n const refCol = refCols[i] ?? refCols[0] ?? cols[i];\n fkByColumn.set(cols[i], `${c.referencedTable}.${refCol}`);\n }\n }\n\n // Build column fragments\n const columnFragments = t.columns.map((col) =>\n column({\n name: col.name,\n type: col.type,\n pk: pkColumns.has(col.name) || undefined,\n fk: fkByColumn.get(col.name),\n unique: uniqueColumns.has(col.name) || undefined,\n notNull: notNullColumns.has(col.name) || undefined,\n default: defaultByColumn.get(col.name),\n indexed: col.isIndexed || undefined,\n values: col.values,\n stats: col.stats,\n }),\n );\n\n // Set of present column names for cascade-cleaning indexes/constraints\n const presentColumns = new Set(t.columns.map((c) => c.name));\n\n // Build index fragments\n const indexFragments = (t.indexes ?? [])\n .filter((idx) =>\n idx.columns.every((column) => presentColumns.has(column)),\n )\n .map((idx) =>\n index({\n name: idx.name,\n columns: idx.columns,\n unique: idx.unique,\n type: idx.type,\n }),\n );\n\n // Build constraint fragments for multi-column UNIQUE and CHECK constraints\n const constraintFragments = (t.constraints ?? [])\n .filter(\n (c) =>\n c.type === 'CHECK' ||\n (c.type === 'UNIQUE' && (c.columns?.length ?? 0) > 1),\n )\n .filter(\n (c) =>\n !c.columns?.length ||\n c.columns.every((column) => presentColumns.has(column)),\n )\n .map((c) =>\n constraint({\n name: c.name,\n type: c.type,\n columns: c.columns,\n definition: c.definition,\n }),\n );\n\n return table({\n name: t.name,\n schema: t.schema,\n rowCount: t.rowCount,\n sizeHint: t.sizeHint,\n columns: columnFragments,\n indexes: indexFragments.length > 0 ? indexFragments : undefined,\n constraints:\n constraintFragments.length > 0 ? constraintFragments : undefined,\n });\n }\n\n /**\n * Convert a View to a view fragment with nested column fragments.\n */\n #viewToFragment(v: View): ContextFragment {\n const columnFragments = v.columns.map((col) =>\n column({\n name: col.name,\n type: col.type,\n values: col.values,\n stats: col.stats,\n }),\n );\n\n return view({\n name: v.name,\n schema: v.schema,\n columns: columnFragments,\n definition: v.definition,\n });\n }\n\n /**\n * Convert a Relationship to a relationship fragment.\n * Infers cardinality from row counts if available.\n */\n #relationshipToFragment(\n rel: Relationship,\n sourceTable?: Table,\n targetTable?: Table,\n ): ContextFragment {\n const sourceCount = sourceTable?.rowCount;\n const targetCount = targetTable?.rowCount;\n\n let cardinality:\n 'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many' | undefined;\n\n if (sourceCount != null && targetCount != null && targetCount > 0) {\n const ratio = sourceCount / targetCount;\n if (ratio > 5) {\n cardinality = 'many-to-one';\n } else if (ratio < 1.2 && ratio > 0.8) {\n cardinality = 'one-to-one';\n } else if (ratio < 0.2) {\n cardinality = 'one-to-many';\n }\n }\n\n return relationship({\n from: { table: rel.table, columns: rel.from },\n to: { table: rel.referenced_table, columns: rel.to },\n cardinality,\n });\n }\n format(sql: string): string {\n const decoded = this.#decodeShellEscapes(sql);\n try {\n return formatSql(decoded, { language: this.formatterLanguage });\n } catch {\n return decoded;\n }\n }\n\n #decodeShellEscapes(sql: string): string {\n return sql\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\t/g, '\\t')\n .replace(/\\\\([().*$])/g, '$1')\n .replace(/\\\\(?=$)/gm, '');\n }\n\n #cachedAllowedEntities: string[] | null = null;\n\n async #resolveScope(): Promise<string[]> {\n if (this.#cachedAllowedEntities) return this.#cachedAllowedEntities;\n this.#cachedAllowedEntities = await this.resolveAllowedEntities();\n return this.#cachedAllowedEntities;\n }\n\n async #analyzePolicy(sql: string): Promise<SqlPolicyViolation | null> {\n return this.#policyAnalyzer.analyze(sql, {\n resolveAllowedEntities: () => this.#resolveScope(),\n });\n }\n\n async validate(sql: string): Promise<string | void> {\n const decoded = this.#decodeShellEscapes(sql);\n const violation = await this.#analyzePolicy(decoded);\n if (violation?.kind === 'read-only') return violation.message;\n if (violation?.kind === 'scope') return JSON.stringify(violation.payload);\n return this.validateImpl(decoded);\n }\n\n async execute(sql: string): Promise<any[]> {\n return this.executeImpl(await this.enforceExecutionPolicy(sql));\n }\n\n protected async enforceExecutionPolicy(sql: string): Promise<string> {\n const decoded = this.#decodeShellEscapes(sql);\n const violation = await this.#analyzePolicy(decoded);\n if (violation?.kind === 'read-only') {\n throw new SQLReadOnlyError(violation.message);\n }\n if (violation?.kind === 'scope') {\n throw new SQLScopeError(violation.payload);\n }\n return decoded;\n }\n\n abstract executeImpl(sql: string): Promise<any[]> | any[];\n abstract validateImpl(sql: string): Promise<string | void> | string | void;\n\n /**\n * Run an introspection query and check every row against `row`, the shape\n * the driver returns for that query. A row of any other shape throws.\n */\n async runQuery<RowSchema extends z.ZodType>(\n sql: string,\n row: RowSchema,\n ): Promise<z.output<RowSchema>[]> {\n const rows = z.array(row).safeParse(await this.queryRows(sql));\n if (!rows.success) {\n throw new Error(\n `${this.constructor.name} introspection query returned rows of an unexpected shape:\\n${z.prettifyError(rows.error)}\\nSQL: ${sql.trim()}`,\n { cause: rows.error },\n );\n }\n return rows.data;\n }\n\n /**\n * Run an introspection query through the driver and return its rows as the\n * driver produced them.\n */\n protected abstract queryRows(sql: string): Promise<unknown[]> | unknown[];\n\n /**\n * The rows in a driver's execute() result: the result itself when it is an\n * array, otherwise the first array found at one of `paths` (dot-separated,\n * so `recordsets.0` reads `result.recordsets[0]`).\n */\n protected rowsFrom(result: unknown, paths: readonly string[]): unknown[] {\n if (Array.isArray(result)) return result;\n for (const path of paths) {\n const rows = path\n .split('.')\n .reduce<unknown>(\n (value, key) =>\n typeof value === 'object' && value !== null\n ? Reflect.get(value, key)\n : undefined,\n result,\n );\n if (Array.isArray(rows)) return rows;\n }\n throw new Error(\n `${this.constructor.name} execute() must return an array of rows or an object holding one at ${paths.map((path) => `result.${path}`).join(', ')}.`,\n );\n }\n\n /**\n * Quote an identifier (table/column name) for safe use in SQL.\n * Each database uses different quoting styles.\n */\n abstract quoteIdentifier(name: string): string;\n\n /**\n * Escape a string value for safe use in SQL.\n * Each database escapes different characters.\n */\n abstract escape(value: string): string;\n\n /**\n * Build a SELECT query to sample rows from a table.\n * Each database uses different syntax for limiting rows (LIMIT vs TOP).\n */\n abstract buildSampleRowsQuery(\n tableName: string,\n columns: string[] | undefined,\n limit: number,\n ): string;\n\n /**\n * Convert unknown database value to number.\n * Handles number, bigint, and string types.\n */\n toNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'bigint') {\n return Number(value);\n }\n if (typeof value === 'string' && value.trim() !== '') {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n }\n\n /**\n * Parse a potentially qualified table name into schema and table parts.\n */\n parseTableName(name: string): { schema: string; table: string } {\n if (name.includes('.')) {\n const [schema, ...rest] = name.split('.');\n return { schema, table: rest.join('.') };\n }\n return { schema: this.defaultSchema ?? '', table: name };\n }\n\n /**\n * Escape a string value for use in SQL string literals (single quotes).\n * Used in WHERE clauses like: WHERE name = '${escapeString(value)}'\n */\n escapeString(value: string): string {\n return value.replace(/'/g, \"''\");\n }\n\n /**\n * Build a SQL filter clause to include/exclude schemas.\n * @param columnName - The schema column name (e.g., 'TABLE_SCHEMA')\n * @param allowedSchemas - If provided, filter to these schemas only\n */\n buildSchemaFilter(columnName: string, allowedSchemas?: string[]): string {\n if (allowedSchemas && allowedSchemas.length > 0) {\n const values = allowedSchemas\n .map((s) => `'${this.escapeString(s)}'`)\n .join(', ');\n return `AND ${columnName} IN (${values})`;\n }\n if (this.systemSchemas.length > 0) {\n const values = this.systemSchemas\n .map((s) => `'${this.escapeString(s)}'`)\n .join(', ');\n return `AND ${columnName} NOT IN (${values})`;\n }\n return '';\n }\n}\n\nexport function filterTablesByName<T extends { name: string }>(\n tables: T[],\n filter: TablesFilter | undefined,\n): T[] {\n if (!filter) return tables;\n return tables.filter((table) => matchesFilter(table.name, filter));\n}\n\nexport function filterRelationshipsByTables(\n relationships: Relationship[],\n tableNames: Set<string> | undefined,\n): Relationship[] {\n if (tableNames === undefined) {\n return relationships;\n }\n if (tableNames.size === 0) {\n return [];\n }\n return relationships.filter(\n (it) => tableNames.has(it.table) || tableNames.has(it.referenced_table),\n );\n}\n\nexport function applyTablesFilter(\n tables: Table[],\n relationships: Relationship[],\n filter: TablesFilter | undefined,\n): { tables: Table[]; relationships: Relationship[] } {\n if (!filter) {\n return { tables, relationships };\n }\n\n const allowedNames = new Set(\n getTablesWithRelated(tables, relationships, filter),\n );\n\n return {\n tables: tables.filter((table) => allowedNames.has(table.name)),\n relationships: filterRelationshipsByTables(relationships, allowedNames),\n };\n}\n\nexport function matchesFilter(\n tableName: string,\n filter: TablesFilter,\n): boolean {\n if (Array.isArray(filter)) {\n return filter.includes(tableName);\n }\n return filter.test(tableName);\n}\n\nexport function getTablesWithRelated(\n allTables: Table[],\n relationships: Relationship[],\n filter: TablesFilter,\n): string[] {\n const matchedTables = filterTablesByName(allTables, filter).map(\n (it) => it.name,\n );\n\n if (matchedTables.length === 0) {\n return [];\n }\n\n const adjacency = new Map<string, Set<string>>();\n\n for (const rel of relationships) {\n if (!adjacency.has(rel.table)) {\n adjacency.set(rel.table, new Set());\n }\n if (!adjacency.has(rel.referenced_table)) {\n adjacency.set(rel.referenced_table, new Set());\n }\n adjacency.get(rel.table)!.add(rel.referenced_table);\n adjacency.get(rel.referenced_table)!.add(rel.table);\n }\n\n const result = new Set<string>(matchedTables);\n const queue = [...matchedTables];\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n const neighbors = adjacency.get(current);\n\n if (!neighbors) {\n continue;\n }\n\n for (const neighbor of neighbors) {\n if (!result.has(neighbor)) {\n result.add(neighbor);\n queue.push(neighbor);\n }\n }\n }\n\n return Array.from(result);\n}\n", "const sqlValidationMarker = Symbol('SQLValidationError');\nconst unanswerableSqlMarker = Symbol('UnanswerableSQLError');\nconst sqlScopeMarker = Symbol('SQLScopeError');\nconst sqlReadOnlyMarker = Symbol('SQLReadOnlyError');\n\nexport type SQLScopeErrorType = 'OUT_OF_SCOPE' | 'SQL_SCOPE_PARSE_ERROR';\n\nexport interface SQLScopeErrorPayload {\n error: string;\n error_type: SQLScopeErrorType;\n suggestion: string;\n sql_attempted: string;\n referenced_entities?: string[];\n allowed_entities?: string[];\n parser_dialect?: string;\n parser_error?: string;\n}\n\n/**\n * Error thrown when SQL validation fails.\n */\nexport class SQLValidationError extends Error {\n [sqlValidationMarker]: true;\n\n constructor(message: string) {\n super(message);\n this.name = 'SQLValidationError';\n this[sqlValidationMarker] = true;\n }\n\n static isInstance(error: unknown): error is SQLValidationError {\n return (\n error instanceof SQLValidationError && error[sqlValidationMarker] === true\n );\n }\n}\n\n/**\n * Error thrown when the question cannot be answered with the given schema.\n */\nexport class UnanswerableSQLError extends Error {\n [unanswerableSqlMarker]: true;\n\n constructor(message: string) {\n super(message);\n this.name = 'UnanswerableSQLError';\n this[unanswerableSqlMarker] = true;\n }\n\n static isInstance(error: unknown): error is UnanswerableSQLError {\n return (\n error instanceof UnanswerableSQLError &&\n error[unanswerableSqlMarker] === true\n );\n }\n}\n\n/**\n * Error thrown when a query falls outside the grounded SQL scope.\n */\nexport class SQLScopeError extends Error {\n [sqlScopeMarker]: true;\n readonly payload: SQLScopeErrorPayload;\n readonly errorType: SQLScopeErrorType;\n\n constructor(payload: SQLScopeErrorPayload) {\n super(JSON.stringify(payload));\n this.name = 'SQLScopeError';\n this.payload = payload;\n this.errorType = payload.error_type;\n this[sqlScopeMarker] = true;\n }\n\n static isInstance(error: unknown): error is SQLScopeError {\n return error instanceof SQLScopeError && error[sqlScopeMarker] === true;\n }\n}\n\n/**\n * Error thrown when a query is not read-only (does not start with SELECT or WITH).\n */\nexport class SQLReadOnlyError extends Error {\n [sqlReadOnlyMarker]: true;\n\n constructor(message: string) {\n super(message);\n this.name = 'SQLReadOnlyError';\n this[sqlReadOnlyMarker] = true;\n }\n\n static isInstance(error: unknown): error is SQLReadOnlyError {\n return (\n error instanceof SQLReadOnlyError && error[sqlReadOnlyMarker] === true\n );\n }\n}\n", "import type { ContextFragment, FragmentObject } from '@deepagents/context';\n\n/**\n * Schema fragment builders.\n *\n * These fragments represent database schema metadata that can be injected\n * into AI prompts. Use with renderers (XML, Markdown, TOML, TOON) to format.\n *\n * @example\n * ```ts\n * import { dialectInfo, table, column, relationship } from '@deepagents/text2sql';\n *\n * const schemaFragments = [\n * dialectInfo({ dialect: 'PostgreSQL', version: '14.5' }),\n * table({\n * name: 'users',\n * columns: [\n * column({ name: 'id', type: 'integer', pk: true }),\n * column({ name: 'email', type: 'varchar', unique: true }),\n * ],\n * }),\n * ];\n * ```\n */\n\n/**\n * Database dialect and version information.\n *\n * @param input.dialect - Database type (PostgreSQL, SQLite, SQL Server, etc.)\n * @param input.version - Database version string\n * @param input.database - Database name\n *\n * @example\n * dialectInfo({ dialect: 'PostgreSQL', version: '14.5', database: 'myapp' })\n */\nexport function dialectInfo(input: {\n dialect: string;\n version?: string;\n database?: string;\n details?: FragmentObject;\n}): ContextFragment {\n return {\n name: 'dialectInfo',\n data: {\n dialect: input.dialect,\n ...(input.version && { version: input.version }),\n ...(input.database && { database: input.database }),\n ...(input.details && { details: input.details }),\n },\n };\n}\n\n/**\n * Database table with columns and optional metadata.\n *\n * @param input.name - Table name\n * @param input.schema - Schema name (e.g., 'public' for PostgreSQL)\n * @param input.rowCount - Approximate row count\n * @param input.sizeHint - Size category for query optimization hints\n * @param input.columns - Array of column() fragments\n * @param input.indexes - Array of index() fragments\n * @param input.constraints - Array of constraint() fragments\n *\n * @example\n * table({\n * name: 'users',\n * rowCount: 1500,\n * sizeHint: 'medium',\n * columns: [\n * column({ name: 'id', type: 'integer', pk: true }),\n * column({ name: 'email', type: 'varchar', unique: true, indexed: true }),\n * ],\n * indexes: [\n * index({ name: 'idx_email', columns: ['email'], unique: true }),\n * ],\n * })\n */\nexport function table(input: {\n name: string;\n schema?: string;\n rowCount?: number;\n sizeHint?: 'tiny' | 'small' | 'medium' | 'large' | 'huge';\n columns: ContextFragment[];\n indexes?: ContextFragment[];\n constraints?: ContextFragment[];\n}): ContextFragment {\n return {\n name: 'table',\n data: {\n name: input.name,\n ...(input.schema && { schema: input.schema }),\n ...(input.rowCount != null && { rowCount: input.rowCount }),\n ...(input.sizeHint && { sizeHint: input.sizeHint }),\n columns: input.columns,\n ...(input.indexes?.length && { indexes: input.indexes }),\n ...(input.constraints?.length && { constraints: input.constraints }),\n },\n };\n}\n\n/**\n * Table column with type and annotations.\n *\n * @param input.name - Column name\n * @param input.type - Column data type (e.g., 'integer', 'varchar(255)')\n * @param input.pk - Is primary key\n * @param input.fk - Foreign key reference in \"table.column\" format\n * @param input.unique - Has unique constraint\n * @param input.notNull - Has NOT NULL constraint\n * @param input.default - Default value expression\n * @param input.indexed - Has index on this column\n * @param input.values - Enum or low cardinality values\n * @param input.stats - Column statistics (min, max, null fraction)\n *\n * @example\n * column({\n * name: 'status',\n * type: 'varchar',\n * notNull: true,\n * indexed: true,\n * values: ['active', 'inactive', 'suspended'],\n * })\n */\nexport function column(input: {\n name: string;\n type: string;\n pk?: boolean;\n fk?: string;\n unique?: boolean;\n notNull?: boolean;\n default?: string;\n indexed?: boolean;\n values?: string[];\n stats?: {\n min?: string;\n max?: string;\n nullFraction?: number;\n nDistinct?: number;\n correlation?: number;\n };\n}): ContextFragment {\n return {\n name: 'column',\n data: {\n name: input.name,\n type: input.type,\n ...(input.pk && { pk: true }),\n ...(input.fk && { fk: input.fk }),\n ...(input.unique && { unique: true }),\n ...(input.notNull && { notNull: true }),\n ...(input.default && { default: input.default }),\n ...(input.indexed && { indexed: true }),\n ...(input.values?.length && { values: input.values }),\n ...(input.stats && { stats: input.stats }),\n },\n };\n}\n\n/**\n * Table index.\n *\n * @param input.name - Index name\n * @param input.columns - Columns included in the index\n * @param input.unique - Is unique index\n * @param input.type - Index type (BTREE, HASH, GIN, etc.)\n *\n * @example\n * index({ name: 'idx_user_email', columns: ['email'], unique: true, type: 'BTREE' })\n */\nexport function index(input: {\n name: string;\n columns: string[];\n unique?: boolean;\n type?: string;\n}): ContextFragment {\n return {\n name: 'index',\n data: {\n name: input.name,\n columns: input.columns,\n ...(input.unique && { unique: true }),\n ...(input.type && { type: input.type }),\n },\n };\n}\n\n/**\n * Table constraint (CHECK, UNIQUE, PRIMARY_KEY, FOREIGN_KEY, etc).\n *\n * @param input.name - Constraint name\n * @param input.type - Constraint type\n * @param input.columns - Columns involved in the constraint\n * @param input.definition - CHECK constraint SQL definition\n * @param input.defaultValue - DEFAULT constraint value\n * @param input.referencedTable - For FK: referenced table name\n * @param input.referencedColumns - For FK: referenced column names\n *\n * @example\n * constraint({\n * name: 'chk_amount_positive',\n * type: 'CHECK',\n * definition: 'amount > 0',\n * })\n *\n * @example\n * constraint({\n * name: 'fk_order_user',\n * type: 'FOREIGN_KEY',\n * columns: ['user_id'],\n * referencedTable: 'users',\n * referencedColumns: ['id'],\n * })\n */\nexport function constraint(input: {\n name: string;\n type:\n | 'CHECK'\n | 'UNIQUE'\n | 'NOT_NULL'\n | 'DEFAULT'\n | 'PRIMARY_KEY'\n | 'FOREIGN_KEY';\n columns?: string[];\n definition?: string;\n defaultValue?: string;\n referencedTable?: string;\n referencedColumns?: string[];\n}): ContextFragment {\n return {\n name: 'constraint',\n data: {\n name: input.name,\n type: input.type,\n ...(input.columns?.length && { columns: input.columns }),\n ...(input.definition && { definition: input.definition }),\n ...(input.defaultValue && { defaultValue: input.defaultValue }),\n ...(input.referencedTable && { referencedTable: input.referencedTable }),\n ...(input.referencedColumns?.length && {\n referencedColumns: input.referencedColumns,\n }),\n },\n };\n}\n\n/**\n * Database view.\n *\n * @param input.name - View name\n * @param input.schema - Schema name\n * @param input.columns - Array of column() fragments\n * @param input.definition - View SQL definition\n *\n * @example\n * view({\n * name: 'active_users',\n * columns: [\n * column({ name: 'id', type: 'integer' }),\n * column({ name: 'email', type: 'varchar' }),\n * ],\n * definition: \"SELECT id, email FROM users WHERE status = 'active'\",\n * })\n */\nexport function view(input: {\n name: string;\n schema?: string;\n columns: ContextFragment[];\n definition?: string;\n}): ContextFragment {\n return {\n name: 'view',\n data: {\n name: input.name,\n ...(input.schema && { schema: input.schema }),\n columns: input.columns,\n ...(input.definition && { definition: input.definition }),\n },\n };\n}\n\n/**\n * Relationship between tables (foreign key connection).\n *\n * @param input.from - Source table and columns\n * @param input.to - Referenced table and columns\n * @param input.cardinality - Relationship cardinality\n *\n * @example\n * relationship({\n * from: { table: 'orders', columns: ['user_id'] },\n * to: { table: 'users', columns: ['id'] },\n * cardinality: 'many-to-one',\n * })\n */\nexport function relationship(input: {\n from: { table: string; columns: string[] };\n to: { table: string; columns: string[] };\n cardinality?: 'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many';\n}): ContextFragment {\n return {\n name: 'relationship',\n data: {\n from: input.from,\n to: input.to,\n ...(input.cardinality && { cardinality: input.cardinality }),\n },\n };\n}\n", "import type { ContextFragment } from '@deepagents/context';\n\nimport type {\n AdapterInfo,\n ColumnStats,\n OnProgress,\n Relationship,\n Table,\n} from '../adapter.ts';\nimport type { View } from './view.grounding.ts';\n\n/**\n * Column type for grounding operations.\n * Common interface between Table.columns and View.columns.\n */\nexport interface Column {\n name: string;\n type: string;\n kind?: 'LowCardinality' | 'Enum';\n values?: string[];\n stats?: ColumnStats;\n}\n\n/**\n * Entity with columns (Table or View).\n */\nexport interface ColumnContainer {\n name: string;\n columns: Column[];\n}\n\n/**\n * Shared context object passed to all groundings.\n * Groundings read from and write to this context.\n */\nexport interface GroundingContext {\n /** Tables discovered by TableGrounding */\n tables: Table[];\n\n /** Views discovered by ViewGrounding */\n views: View[];\n\n /** Relationships discovered by TableGrounding */\n relationships: Relationship[];\n\n /** Database info collected by InfoGrounding */\n info?: AdapterInfo;\n\n /** Adapter-specific fragments contributed during grounding. */\n fragments?: ContextFragment[];\n\n /** Shared cache for cross-grounding deduplication. Keyed by `type:key`. */\n cache: Map<string, unknown>;\n\n /** Progress sink for long-running introspection work. */\n onProgress: OnProgress;\n}\n\nconst noopProgress: OnProgress = () => {};\n\nfunction timestampProgress(onProgress?: OnProgress): OnProgress {\n if (!onProgress) return noopProgress;\n return (progress) => {\n onProgress({\n ...progress,\n timestampMs: progress.timestampMs ?? Date.now(),\n });\n };\n}\n\n/**\n * Create a new empty grounding context.\n */\nexport function createGroundingContext(\n options: { onProgress?: OnProgress } = {},\n): GroundingContext {\n return {\n tables: [],\n views: [],\n relationships: [],\n info: undefined,\n fragments: [],\n cache: new Map(),\n onProgress: timestampProgress(options.onProgress),\n };\n}\n", "import { z } from 'zod';\n\nimport type { ContextFragment, FragmentData } from '@deepagents/context';\n\nimport type { Filter } from '../adapter.ts';\nimport { AbstractGrounding } from '../groundings/abstract.grounding.ts';\nimport type { GroundingContext } from '../groundings/context.ts';\nimport type { PostHog } from './posthog.ts';\nimport type {\n PostHogEventDefinition,\n PostHogPropertyDefinition,\n PostHogPropertyDefinitionType,\n} from './types.ts';\n\ntype StandardPropertyType = Exclude<PostHogPropertyDefinitionType, 'group'>;\n\n// Definitions as PostHog's event_definitions and property_definitions\n// endpoints list them. Only the members this grounding reads are checked.\n\nconst postHogEventDefinition = z.object({\n name: z.string().min(1),\n description: z.string().nullish(),\n tags: z.array(z.string()).nullish(),\n verified: z.boolean().nullish(),\n});\n\nconst postHogPropertyDefinition = z.object({\n name: z.string().min(1),\n description: z.string().nullish(),\n property_type: z.string().nullish(),\n is_numerical: z.boolean().nullish(),\n verified: z.boolean().nullish(),\n});\n\nexport interface PostHogDefinitionsGroundingConfig {\n events?: Filter;\n properties?: Filter;\n propertyTypes?: StandardPropertyType[];\n groupTypeIndexes?: number[];\n}\n\nexport class PostHogDefinitionsGrounding extends AbstractGrounding {\n readonly #adapter: PostHog;\n readonly #config: PostHogDefinitionsGroundingConfig;\n\n constructor(\n adapter: PostHog,\n config: PostHogDefinitionsGroundingConfig = {},\n ) {\n super('definitions', 'definitions');\n this.#adapter = adapter;\n this.#config = config;\n }\n\n override async execute(ctx: GroundingContext): Promise<void> {\n const fragments = (ctx.fragments ??= []);\n const configuredPropertyTypes: StandardPropertyType[] = this.#config\n .propertyTypes ?? ['event', 'person', 'session'];\n const propertyTypes = [\n ...new Set<StandardPropertyType>(configuredPropertyTypes),\n ];\n validatePropertyTypes(propertyTypes);\n const groupTypeIndexes = [...new Set(this.#config.groupTypeIndexes ?? [])];\n if (\n groupTypeIndexes.some((index) => !Number.isInteger(index) || index < 0)\n ) {\n throw new Error(\n 'PostHog groupTypeIndexes must contain non-negative integers.',\n );\n }\n\n const propertyRequests = [\n ...propertyTypes.map(async (type) => ({\n type,\n definitions: await this.#adapter.transport.listPropertyDefinitions({\n type,\n }),\n })),\n ...groupTypeIndexes.map(async (groupTypeIndex) => ({\n type: `group:${groupTypeIndex}`,\n definitions: await this.#adapter.transport.listPropertyDefinitions({\n type: 'group',\n groupTypeIndex,\n }),\n })),\n ];\n const [events, properties] = await Promise.all([\n this.#adapter.transport.listEventDefinitions(),\n Promise.all(propertyRequests),\n ]);\n\n const eventData = readEvents(events, this.#config.events);\n if (eventData.length > 0) {\n fragments.push({ name: 'posthogEvents', data: eventData });\n }\n\n const propertyData: Record<string, FragmentData> = {};\n for (const group of properties) {\n const definitions = readProperties(\n group.definitions,\n this.#config.properties,\n );\n if (definitions.length > 0) propertyData[group.type] = definitions;\n }\n if (Object.keys(propertyData).length > 0) {\n fragments.push({\n name: 'posthogProperties',\n data: propertyData,\n } satisfies ContextFragment);\n }\n }\n}\n\nfunction readEvents(values: unknown[], filter?: Filter): FragmentData[] {\n return values\n .map(validateEvent)\n .filter((event) => matchesFilter(event.name, filter))\n .toSorted((left, right) => left.name.localeCompare(right.name))\n .map((event) =>\n compact({\n name: event.name,\n description: event.description ?? undefined,\n tags: event.tags?.length ? event.tags : undefined,\n verified: event.verified ?? undefined,\n }),\n );\n}\n\nfunction readProperties(values: unknown[], filter?: Filter): FragmentData[] {\n return values\n .map(validateProperty)\n .filter((property) => matchesFilter(property.name, filter))\n .toSorted((left, right) => left.name.localeCompare(right.name))\n .map((property) =>\n compact({\n name: property.name,\n description: property.description ?? undefined,\n propertyType: property.property_type ?? undefined,\n numerical: property.is_numerical ?? undefined,\n verified: property.verified ?? undefined,\n }),\n );\n}\n\nfunction validateEvent(value: unknown): PostHogEventDefinition {\n const event = postHogEventDefinition.safeParse(value);\n if (!event.success) {\n throw new Error('PostHog returned a malformed event definition.');\n }\n return event.data;\n}\n\nfunction validateProperty(value: unknown): PostHogPropertyDefinition {\n const property = postHogPropertyDefinition.safeParse(value);\n if (!property.success) {\n throw new Error('PostHog returned a malformed property definition.');\n }\n return property.data;\n}\n\nfunction validatePropertyTypes(values: StandardPropertyType[]): void {\n const allowed = new Set<StandardPropertyType>(['event', 'person', 'session']);\n if (values.some((value) => !allowed.has(value))) {\n throw new Error('PostHog propertyTypes contains an unsupported type.');\n }\n}\n\nfunction matchesFilter(name: string, filter?: Filter): boolean {\n if (!filter) return true;\n if (Array.isArray(filter)) return filter.includes(name);\n if (filter instanceof RegExp) {\n filter.lastIndex = 0;\n return filter.test(name);\n }\n return filter(name);\n}\n\nfunction compact(\n value: Record<string, FragmentData | undefined>,\n): Record<string, FragmentData> {\n return Object.fromEntries(\n Object.entries(value).filter(\n (entry): entry is [string, FragmentData] => entry[1] !== undefined,\n ),\n );\n}\n", "import type { Filter, IntrospectionPhase } from '../adapter.ts';\nimport type { GroundingContext } from './context.ts';\n\nexport type { AdapterInfo, AdapterInfoProvider, Filter } from '../adapter.ts';\n\n/**\n * Per-entity column filter.\n * Maps entity name (table or view) to a Filter that selects which columns to keep.\n * Entities not listed in the record keep all their columns.\n */\nexport type ColumnsFilter = Record<string, Filter>;\n\n/**\n * Filter a columns array using a Filter.\n * Keeps columns whose name matches the filter.\n */\nexport function filterColumns<T extends { name: string }>(\n columns: T[],\n filter: Filter,\n): T[] {\n if (Array.isArray(filter)) {\n return columns.filter((col) => filter.includes(col.name));\n }\n if (filter instanceof RegExp) {\n return columns.filter((col) => filter.test(col.name));\n }\n return columns.filter((col) => filter(col.name));\n}\n\n/**\n * Apply per-entity column filtering.\n * Returns the entity unchanged if no filter matches its name.\n */\nexport function applyColumnFilter<\n T extends { name: string; columns: { name: string }[] },\n>(entity: T, columnsConfig?: ColumnsFilter): T {\n if (!columnsConfig) return entity;\n const filter = columnsConfig[entity.name];\n if (!filter) return entity;\n return { ...entity, columns: filterColumns(entity.columns, filter) };\n}\n\n/**\n * Abstract base class for database schema groundings.\n *\n * Groundings collect schema metadata into the shared GroundingContext.\n * Fragment generation is centralized in Adapter.introspect().\n */\nexport abstract class AbstractGrounding {\n /**\n * Grounding identifier for debugging/logging.\n */\n name: string;\n phase?: IntrospectionPhase;\n\n constructor(name: string, phase?: IntrospectionPhase) {\n this.name = name;\n this.phase = phase;\n }\n\n /**\n * Execute grounding to populate the shared context.\n * Groundings mutate ctx to add their collected data (tables, views, indexes, etc).\n * Fragment generation happens centrally in Adapter after all groundings complete.\n *\n * @param ctx - Shared context for accumulating schema data\n */\n abstract execute(ctx: GroundingContext): Promise<void>;\n\n /**\n * Populate ctx with the tables/views this grounding makes available for scope\n * resolution. Annotators decorate entities other groundings produced and add\n * no membership, so the default is a no-op; entity-producing groundings\n * override it. This lets scope resolution skip the annotators' metadata scans.\n *\n * @param _ctx - Shared context for accumulating entity membership\n */\n async contributeEntities(_ctx: GroundingContext): Promise<void> {}\n}\n", "import { AbstractGrounding } from '../groundings/abstract.grounding.ts';\nimport type { GroundingContext } from '../groundings/context.ts';\n\nexport class PostHogInfoGrounding extends AbstractGrounding {\n constructor() {\n super('info', 'info');\n }\n\n override async execute(ctx: GroundingContext): Promise<void> {\n ctx.info = {\n dialect: 'HogQL',\n details: {\n identifierQuoting:\n 'Use backticks for identifiers that require quoting.',\n propertyAccess:\n 'Use PostHog HogQL property access and the grounded event/person/session property definitions. Do not guess property names.',\n performance:\n 'Prefer bounded time ranges and LIMIT for non-aggregate event queries. OFFSET is not supported by the Query API.',\n execution:\n 'Queries run through PostHog as read-only HogQLQuery nodes, not through a PostgreSQL connection.',\n },\n };\n }\n}\n", "import { z } from 'zod';\n\nimport { Adapter, type GroundingFn } from '../adapter.ts';\nimport { PostHogSqlPolicyAnalyzer } from './posthog.sql-policy.ts';\nimport type {\n PostHogQueryRequest,\n PostHogQueryResponse,\n PostHogQueryValues,\n PostHogTransport,\n} from './types.ts';\n\nexport interface PostHogAdapterOptions {\n transport: PostHogTransport;\n grounding?: GroundingFn[];\n}\n\n/** A HogQLQuery response: one array per row, cells in column order. */\nconst hogQLQueryResponse = z.object({\n results: z.array(z.array(z.unknown())),\n columns: z.array(z.string().min(1)).optional(),\n});\n\nexport class PostHog extends Adapter {\n readonly transport: PostHogTransport;\n override readonly grounding: GroundingFn[];\n override readonly defaultSchema = undefined;\n override readonly systemSchemas = ['system'];\n override readonly formatterLanguage = 'clickhouse';\n\n constructor(options: PostHogAdapterOptions) {\n if (!options?.transport || typeof options.transport.query !== 'function') {\n throw new Error('PostHog adapter requires a transport.');\n }\n if (\n typeof options.transport.listEventDefinitions !== 'function' ||\n typeof options.transport.listPropertyDefinitions !== 'function'\n ) {\n throw new Error(\n 'PostHog transport must provide event and property definition methods.',\n );\n }\n\n super(new PostHogSqlPolicyAnalyzer(options.transport));\n this.transport = options.transport;\n this.grounding = options.grounding ?? [];\n }\n\n override async execute(\n sql: string,\n values?: PostHogQueryValues,\n ): Promise<Record<string, unknown>[]> {\n return this.#execute(\n await this.enforceExecutionPolicy(sql),\n 'deepagents_text2sql_execute',\n values,\n );\n }\n\n override async executeImpl(sql: string): Promise<Record<string, unknown>[]> {\n return this.#execute(sql, 'deepagents_text2sql_execute');\n }\n\n override validateImpl(): undefined {\n return undefined;\n }\n\n protected override queryRows(sql: string): Promise<unknown[]> {\n return this.#execute(sql, 'deepagents_text2sql_grounding');\n }\n\n override quoteIdentifier(name: string): string {\n return `\\`${name.replace(/`/g, '``')}\\``;\n }\n\n override escape(value: string): string {\n return value.replace(/`/g, '``');\n }\n\n override buildSampleRowsQuery(\n tableName: string,\n columns: string[] | undefined,\n limit: number,\n ): string {\n const { schema, table } = this.parseTableName(tableName);\n const relation = schema\n ? `${this.quoteIdentifier(schema)}.${this.quoteIdentifier(table)}`\n : this.quoteIdentifier(table);\n const projection = columns?.length\n ? columns.map((column) => this.quoteIdentifier(column)).join(', ')\n : '*';\n return `SELECT ${projection} FROM ${relation} LIMIT ${limit}`;\n }\n\n async query(request: PostHogQueryRequest): Promise<unknown> {\n return this.transport.query(request);\n }\n\n async #execute(\n sql: string,\n name: string,\n values?: PostHogQueryValues,\n ): Promise<Record<string, unknown>[]> {\n const response = await this.transport.query({\n query: {\n kind: 'HogQLQuery',\n query: sql,\n ...(values === undefined ? {} : { values }),\n },\n name,\n });\n return rowsFromResponse(response);\n }\n}\n\nfunction rowsFromResponse(value: unknown): Record<string, unknown>[] {\n const response = hogQLQueryResponse.safeParse(value);\n if (!response.success) {\n throw new Error(\n `PostHog HogQLQuery response is malformed:\\n${z.prettifyError(response.error)}`,\n );\n }\n const { columns, results } = response.data;\n if (columns && new Set(columns).size !== columns.length) {\n throw new Error(\n 'PostHog HogQLQuery response contains duplicate column names; alias every selected expression uniquely.',\n );\n }\n if (results.length === 0) return [];\n if (!columns) {\n throw new Error(\n 'PostHog HogQLQuery response requires columns for non-empty results.',\n );\n }\n\n return results.map((row, index) => {\n if (row.length !== columns.length) {\n throw new Error(\n `PostHog HogQLQuery result row ${index} does not match the column count.`,\n );\n }\n return Object.fromEntries(\n columns.map((column, columnIndex) => [column, row[columnIndex]]),\n );\n });\n}\n", "import { z } from 'zod';\n\nimport type { SQLScopeErrorPayload } from '../../agents/exceptions.ts';\nimport { buildScopeParseErrorPayload } from '../../sql-scope-error.ts';\nimport type {\n SqlPolicyAnalyzer,\n SqlPolicyContext,\n SqlPolicyViolation,\n} from '../sql-policy.ts';\nimport type {\n PostHogMetadataResponse,\n PostHogNotice,\n PostHogTransport,\n} from './types.ts';\n\nconst postHogNotice = z.object({\n start: z.number().nullish(),\n end: z.number().nullish(),\n message: z.string(),\n fix: z.string().nullish(),\n});\n\nexport class PostHogSqlPolicyAnalyzer implements SqlPolicyAnalyzer {\n readonly #transport: PostHogTransport;\n\n constructor(transport: PostHogTransport) {\n this.#transport = transport;\n }\n\n async analyze(\n sql: string,\n context: SqlPolicyContext,\n ): Promise<SqlPolicyViolation | null> {\n const response = await this.#transport.query({\n query: { kind: 'HogQLMetadata', language: 'hogQL', query: sql },\n name: 'deepagents_text2sql_validate',\n });\n let metadata: PostHogMetadataResponse;\n try {\n metadata = validateMetadataResponse(response);\n } catch (error) {\n return {\n kind: 'scope',\n payload: buildScopeParseErrorPayload(sql, 'hogql', error),\n };\n }\n\n const allowedEntities = await context.resolveAllowedEntities();\n const allowed = new Set(allowedEntities.map(caseFold));\n const rejected = metadata.table_names.filter(\n (entity) => !allowed.has(caseFold(entity)),\n );\n\n return rejected.length > 0\n ? {\n kind: 'scope',\n payload: buildOutOfScopePayload(sql, rejected, [...allowedEntities]),\n }\n : null;\n }\n}\n\nfunction validateMetadataResponse(value: unknown): PostHogMetadataResponse {\n if (!isRecord(value)) {\n throw new Error('PostHog HogQLMetadata response must be a JSON object.');\n }\n if (typeof value.isValid !== 'boolean') {\n throw new Error('PostHog HogQLMetadata response has no isValid boolean.');\n }\n\n const errors = validateNotices(value.errors, 'errors');\n const warnings = validateNotices(value.warnings, 'warnings');\n const notices = validateNotices(value.notices, 'notices');\n const tableNames = validateTableNames(value.table_names);\n\n if (!value.isValid || errors.length > 0) {\n const reason = errors.map((notice) => notice.message).join('; ');\n throw new Error(\n reason\n ? `PostHog rejected the HogQL query: ${reason}`\n : 'PostHog rejected the HogQL query as invalid.',\n );\n }\n\n return {\n isValid: true,\n errors,\n warnings,\n notices,\n table_names: tableNames,\n };\n}\n\nfunction validateNotices(value: unknown, name: string): PostHogNotice[] {\n if (!Array.isArray(value)) {\n throw new Error(`PostHog HogQLMetadata response has no ${name} array.`);\n }\n const notices = z.array(postHogNotice).safeParse(value);\n if (!notices.success) {\n throw new Error(\n `PostHog HogQLMetadata response has an invalid ${name} notice.`,\n );\n }\n return notices.data;\n}\n\nfunction validateTableNames(value: unknown): string[] {\n if (\n !Array.isArray(value) ||\n value.some((name) => typeof name !== 'string' || name.length === 0)\n ) {\n throw new Error('PostHog HogQLMetadata response has invalid table_names.');\n }\n return [...new Set(value)];\n}\n\nfunction buildOutOfScopePayload(\n sql: string,\n referencedEntities: string[],\n allowedEntities: string[],\n): SQLScopeErrorPayload {\n return {\n error: `Query references entities outside grounded scope: ${referencedEntities.join(', ')}`,\n error_type: 'OUT_OF_SCOPE',\n suggestion:\n 'Restrict the query to grounded tables/views or expand grounding to include the referenced entities.',\n sql_attempted: sql,\n referenced_entities: referencedEntities,\n allowed_entities: allowedEntities,\n };\n}\n\nfunction caseFold(value: string): string {\n return value.toLowerCase();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n", "import type { SQLScopeErrorPayload } from './agents/exceptions.ts';\n\nexport function buildScopeParseErrorPayload(\n sql: string,\n parserDialect: string,\n error: unknown,\n): SQLScopeErrorPayload {\n const parserError =\n error instanceof Error ? error.message : String(error ?? 'Unknown error');\n\n return {\n error: `SQL scope analysis failed before validation/execution: ${parserError}`,\n error_type: 'SQL_SCOPE_PARSE_ERROR',\n suggestion:\n 'Rewrite the query into simpler SQL that can be analyzed safely, or extend parser coverage for this dialect feature.',\n sql_attempted: sql,\n parser_dialect: parserDialect,\n parser_error: parserError,\n };\n}\n", "import { z } from 'zod';\n\nimport type { Filter, Relationship, Table } from '../adapter.ts';\nimport {\n AbstractGrounding,\n type ColumnsFilter,\n applyColumnFilter,\n} from '../groundings/abstract.grounding.ts';\nimport type { GroundingContext } from '../groundings/context.ts';\nimport type { View } from '../groundings/view.grounding.ts';\nimport type { PostHog } from './posthog.ts';\nimport type {\n PostHogDatabaseField,\n PostHogDatabaseFieldType,\n PostHogDatabaseTable,\n PostHogDatabaseTableType,\n PostHogSchemaJoin,\n PostHogSchemaResponse,\n} from './types.ts';\n\n// The DatabaseSchemaQuery response, modeled on PostHog's DatabaseSchemaQueryResponse.\n// Only the members this grounding reads are checked; the rest is dropped.\n\nconst scalarFieldType = z.enum([\n 'integer',\n 'float',\n 'decimal',\n 'string',\n 'datetime',\n 'date',\n 'boolean',\n 'array',\n 'json',\n]);\n\nconst SCALAR_FIELD_TYPES = new Set<PostHogDatabaseFieldType>(\n scalarFieldType.options,\n);\n\nconst viewTableType = z.enum([\n 'view',\n 'materialized_view',\n 'managed_view',\n 'endpoint',\n]);\n\nconst VIEW_TYPES = new Set<PostHogDatabaseTableType>(viewTableType.options);\n\nconst postHogDatabaseField = z.object({\n name: z.string(),\n hogql_value: z.string(),\n type: z.enum([\n ...scalarFieldType.options,\n 'lazy_table',\n 'virtual_table',\n 'field_traverser',\n 'expression',\n 'view',\n 'materialized_view',\n 'unknown',\n ]),\n schema_valid: z.boolean(),\n});\n\nconst tableMembers = {\n id: z.string(),\n name: z.string(),\n fields: z.record(z.string(), postHogDatabaseField),\n row_count: z.number().nonnegative().nullish(),\n};\n\nconst postHogDatabaseTable = z.discriminatedUnion('type', [\n z.object({\n ...tableMembers,\n type: z.enum(['posthog', 'system', 'data_warehouse', 'batch_export']),\n }),\n z.object({\n ...tableMembers,\n type: viewTableType,\n query: z.object({ query: z.string() }),\n }),\n]);\n\nconst postHogSchemaJoin = z.object({\n source_table_name: z.string().nullish(),\n source_table_key: z.string().nullish(),\n joining_table_name: z.string().nullish(),\n joining_table_key: z.string().nullish(),\n field_name: z.string().nullish(),\n});\n\nconst postHogSchemaResponse = z.object({\n tables: z.record(z.string(), postHogDatabaseTable),\n joins: z.array(postHogSchemaJoin),\n});\n\nexport interface PostHogSchemaGroundingConfig {\n filter?: Filter;\n columns?: ColumnsFilter;\n includeSystem?: boolean;\n}\n\nexport class PostHogSchemaGrounding extends AbstractGrounding {\n readonly #adapter: PostHog;\n readonly #config: PostHogSchemaGroundingConfig;\n\n constructor(adapter: PostHog, config: PostHogSchemaGroundingConfig = {}) {\n super('schema', 'tables');\n this.#adapter = adapter;\n this.#config = config;\n }\n\n override async execute(ctx: GroundingContext): Promise<void> {\n const response = validateSchemaResponse(\n await this.#adapter.query({\n query: { kind: 'DatabaseSchemaQuery' },\n name: 'deepagents_text2sql_schema',\n }),\n );\n const entities = Object.entries(response.tables).filter(\n ([name, table]) =>\n (this.#config.includeSystem || table.type !== 'system') &&\n matchesFilter(name, this.#config.filter),\n );\n\n const tables: Table[] = [];\n const views: View[] = [];\n for (const [index, [name, table]] of entities.entries()) {\n ctx.onProgress({\n type: 'phase:progress',\n phase: 'tables',\n table: name,\n message: `Loading PostHog schema entity ${name}...`,\n current: index + 1,\n total: entities.length,\n });\n const columns = readColumns(name, table);\n if (VIEW_TYPES.has(table.type)) {\n views.push(\n applyColumnFilter(\n {\n name,\n columns,\n ...(table.query?.query ? { definition: table.query.query } : {}),\n },\n this.#config.columns,\n ),\n );\n } else {\n tables.push(\n applyColumnFilter(\n {\n name,\n columns,\n ...(typeof table.row_count === 'number'\n ? { rowCount: table.row_count }\n : {}),\n },\n this.#config.columns,\n ),\n );\n }\n }\n\n ctx.tables.push(...tables);\n ctx.views.push(...views);\n ctx.relationships.push(...readRelationships(response.joins, tables, views));\n }\n\n override async contributeEntities(ctx: GroundingContext): Promise<void> {\n await this.execute(ctx);\n }\n}\n\nfunction validateSchemaResponse(value: unknown): PostHogSchemaResponse {\n const response = postHogSchemaResponse.safeParse(value);\n if (!response.success) {\n throw new Error(\n `PostHog DatabaseSchemaQuery response is malformed:\\n${z.prettifyError(response.error)}`,\n );\n }\n return response.data;\n}\n\nfunction readColumns(\n tableName: string,\n table: PostHogDatabaseTable,\n): Array<{ name: string; type: string }> {\n const columns: Array<{ name: string; type: string }> = [];\n const names = new Set<string>();\n for (const field of Object.values(table.fields)) {\n if (!field.schema_valid || !SCALAR_FIELD_TYPES.has(field.type)) continue;\n const name = field.hogql_value.trim();\n if (!name) {\n throw new Error(`PostHog schema table ${tableName} has an empty field.`);\n }\n if (names.has(name)) {\n throw new Error(\n `PostHog schema table ${tableName} has duplicate HogQL field ${name}.`,\n );\n }\n names.add(name);\n columns.push({ name, type: field.type });\n }\n return columns;\n}\n\nfunction readRelationships(\n joins: PostHogSchemaJoin[],\n tables: Table[],\n views: View[],\n): Relationship[] {\n const entityColumns = new Map(\n [...tables, ...views].map((entity) => [\n entity.name,\n new Set(entity.columns.map((column) => column.name)),\n ]),\n );\n return joins.flatMap((join) => {\n const sourceTable = readNonEmptyString(join.source_table_name);\n const sourceKey = readNonEmptyString(join.source_table_key);\n const joiningTable = readNonEmptyString(join.joining_table_name);\n const joiningKey = readNonEmptyString(join.joining_table_key);\n if (\n !sourceTable ||\n !sourceKey ||\n !joiningTable ||\n !joiningKey ||\n !entityColumns.get(sourceTable)?.has(sourceKey) ||\n !entityColumns.get(joiningTable)?.has(joiningKey)\n ) {\n return [];\n }\n return [\n {\n table: sourceTable,\n from: [sourceKey],\n referenced_table: joiningTable,\n to: [joiningKey],\n },\n ];\n });\n}\n\nfunction matchesFilter(name: string, filter?: Filter): boolean {\n if (!filter) return true;\n if (Array.isArray(filter)) return filter.includes(name);\n if (filter instanceof RegExp) {\n filter.lastIndex = 0;\n return filter.test(name);\n }\n return filter(name);\n}\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n", "import type {\n CreatePostHogTransportOptions,\n PostHogPropertyDefinitionType,\n PostHogQueryRequest,\n PostHogTransport,\n} from './types.ts';\n\nconst DEFAULT_TIMEOUT_MS = 45_000;\nconst PAGE_SIZE = 100;\n\nexport class PostHogApiError extends Error {\n readonly status: number;\n readonly code?: string;\n readonly detail?: string;\n readonly retryAfterMs?: number;\n\n constructor(options: {\n status: number;\n message: string;\n code?: string;\n detail?: string;\n retryAfterMs?: number;\n }) {\n super(options.message);\n this.name = 'PostHogApiError';\n this.status = options.status;\n this.code = options.code;\n this.detail = options.detail;\n this.retryAfterMs = options.retryAfterMs;\n }\n}\n\nexport function createPostHogTransport(\n options: CreatePostHogTransportOptions,\n): PostHogTransport {\n const origin = parseOrigin(options.host);\n const projectId = String(options.projectId ?? '').trim();\n if (!projectId) throw new Error('PostHog transport requires a projectId.');\n if (typeof options.getAccessToken !== 'function') {\n throw new Error('PostHog transport requires getAccessToken().');\n }\n\n const fetchImpl = options.fetch ?? globalThis.fetch;\n if (typeof fetchImpl !== 'function') {\n throw new Error('PostHog transport requires a fetch implementation.');\n }\n\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n if (!Number.isInteger(timeoutMs) || timeoutMs <= 0) {\n throw new Error('PostHog transport timeoutMs must be a positive integer.');\n }\n\n const projectPath = `/api/projects/${encodeURIComponent(projectId)}`;\n\n const requestJson = async (\n path: string,\n init: Omit<RequestInit, 'headers' | 'redirect' | 'signal'> = {},\n ): Promise<unknown> => {\n const token = String(await options.getAccessToken()).trim();\n if (!token) throw new Error('PostHog getAccessToken() returned no token.');\n\n const signal = AbortSignal.timeout(timeoutMs);\n let response: Response;\n try {\n response = await fetchImpl(new URL(path, origin), {\n ...init,\n headers: {\n Accept: 'application/json',\n Authorization: `Bearer ${token}`,\n ...(init.body === undefined\n ? {}\n : { 'Content-Type': 'application/json' }),\n },\n redirect: 'error',\n signal,\n });\n } catch {\n if (signal.aborted) {\n throw new Error(`PostHog request timed out after ${timeoutMs}ms.`);\n }\n throw new Error('PostHog request failed before receiving a response.');\n }\n\n let body: string;\n try {\n body = await response.text();\n } catch {\n if (signal.aborted) {\n throw new Error(`PostHog request timed out after ${timeoutMs}ms.`);\n }\n throw new Error('PostHog response body could not be read.');\n }\n const parsed = parseJson(body);\n if (!response.ok) {\n throw apiError(response, parsed, token);\n }\n if (parsed === undefined) {\n throw new Error('PostHog returned an empty or non-JSON response.');\n }\n return parsed;\n };\n\n const listDefinitions = async (\n resource: 'event_definitions' | 'property_definitions',\n parameters: URLSearchParams,\n ): Promise<unknown[]> => {\n const definitions: unknown[] = [];\n let offset = 0;\n\n for (;;) {\n const pageParameters = new URLSearchParams(parameters);\n pageParameters.set('limit', String(PAGE_SIZE));\n pageParameters.set('offset', String(offset));\n const page = asRecord(\n await requestJson(\n `${projectPath}/${resource}/?${pageParameters.toString()}`,\n ),\n `PostHog ${resource} response`,\n );\n if (!Array.isArray(page.results)) {\n throw new Error(`PostHog ${resource} response has no results array.`);\n }\n if (page.next !== null && typeof page.next !== 'string') {\n throw new Error(\n `PostHog ${resource} response has an invalid next page.`,\n );\n }\n\n definitions.push(...page.results);\n if (page.next === null) return definitions;\n if (page.results.length === 0) {\n throw new Error(\n `PostHog ${resource} returned an empty non-final page.`,\n );\n }\n offset += page.results.length;\n }\n };\n\n return {\n async query(request: PostHogQueryRequest): Promise<unknown> {\n return requestJson(`${projectPath}/query/`, {\n method: 'POST',\n body: JSON.stringify(request),\n });\n },\n\n listEventDefinitions(): Promise<unknown[]> {\n return listDefinitions(\n 'event_definitions',\n new URLSearchParams({\n exclude_hidden: 'true',\n exclude_stale: 'true',\n }),\n );\n },\n\n listPropertyDefinitions({\n type,\n groupTypeIndex,\n }: {\n type: PostHogPropertyDefinitionType;\n groupTypeIndex?: number;\n }): Promise<unknown[]> {\n if (\n type === 'group' &&\n (groupTypeIndex === undefined ||\n !Number.isInteger(groupTypeIndex) ||\n groupTypeIndex < 0)\n ) {\n throw new Error(\n 'PostHog group property definitions require a non-negative integer groupTypeIndex.',\n );\n }\n const parameters = new URLSearchParams({\n type,\n exclude_hidden: 'true',\n exclude_restricted: 'true',\n });\n if (type === 'group') {\n parameters.set('group_type_index', String(groupTypeIndex));\n }\n return listDefinitions('property_definitions', parameters);\n },\n };\n}\n\nfunction parseOrigin(host: string): URL {\n let url: URL;\n try {\n url = new URL(host);\n } catch {\n throw new Error('PostHog host must be an absolute URL.');\n }\n\n const isLoopback = ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname);\n if (url.protocol !== 'https:' && !(url.protocol === 'http:' && isLoopback)) {\n throw new Error(\n 'PostHog host must use HTTPS except for loopback development hosts.',\n );\n }\n if (url.username || url.password || url.search || url.hash) {\n throw new Error(\n 'PostHog host must be an origin without credentials or query data.',\n );\n }\n if (url.pathname !== '/' && url.pathname !== '') {\n throw new Error('PostHog host must not include a path.');\n }\n url.pathname = '/';\n return url;\n}\n\nfunction parseJson(body: string): unknown | undefined {\n if (!body.trim()) return undefined;\n try {\n return JSON.parse(body);\n } catch {\n return undefined;\n }\n}\n\nfunction apiError(\n response: Response,\n body: unknown,\n accessToken: string,\n): PostHogApiError {\n const record = isRecord(body) ? body : undefined;\n const detail = redact(\n readString(record?.detail) ?? readString(record?.error),\n accessToken,\n );\n const code = redact(readString(record?.code), accessToken);\n const retryAfterMs = parseRetryAfter(response.headers.get('retry-after'));\n return new PostHogApiError({\n status: response.status,\n message: detail\n ? `PostHog API returned ${response.status}: ${detail}`\n : `PostHog API returned HTTP ${response.status}.`,\n code,\n detail,\n retryAfterMs,\n });\n}\n\nfunction parseRetryAfter(value: string | null): number | undefined {\n if (value === null) return undefined;\n const seconds = Number(value);\n if (Number.isFinite(seconds)) {\n return seconds >= 0 ? seconds * 1_000 : undefined;\n }\n const date = Date.parse(value);\n return Number.isFinite(date) ? Math.max(0, date - Date.now()) : undefined;\n}\n\nfunction asRecord(value: unknown, label: string): Record<string, unknown> {\n if (!isRecord(value)) throw new Error(`${label} must be a JSON object.`);\n return value;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction redact(value: string | undefined, secret: string): string | undefined {\n return value?.replaceAll(secret, '[REDACTED]');\n}\n", "import { groundingFor } from '../adapter.ts';\nimport {\n PostHogDefinitionsGrounding,\n type PostHogDefinitionsGroundingConfig,\n} from './definitions.posthog.grounding.ts';\nimport { PostHogInfoGrounding } from './info.posthog.grounding.ts';\nimport { PostHog } from './posthog.ts';\nimport {\n PostHogSchemaGrounding,\n type PostHogSchemaGroundingConfig,\n} from './schema.posthog.grounding.ts';\n\nexport * from './definitions.posthog.grounding.ts';\nexport * from './posthog.sql-policy.ts';\nexport * from './posthog.ts';\nexport * from './schema.posthog.grounding.ts';\nexport * from './transport.ts';\nexport * from './types.ts';\n\nexport function info() {\n return () => new PostHogInfoGrounding();\n}\n\nexport function schema(config: PostHogSchemaGroundingConfig = {}) {\n return groundingFor(\n PostHog,\n (adapter) => new PostHogSchemaGrounding(adapter, config),\n );\n}\n\nexport function definitions(config: PostHogDefinitionsGroundingConfig = {}) {\n return groundingFor(\n PostHog,\n (adapter) => new PostHogDefinitionsGrounding(adapter, config),\n );\n}\n\nexport default {\n PostHog,\n definitions,\n info,\n schema,\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { type SqlLanguage, format as formatSql } from 'sql-formatter';\nimport { z } from 'zod';\n\nimport type { ContextFragment, FragmentObject } from '@deepagents/context';\n\nimport { SQLReadOnlyError, SQLScopeError } from '../agents/exceptions.ts';\nimport {\n column,\n constraint,\n dialectInfo,\n index,\n relationship,\n table,\n view,\n} from '../fragments/schema.ts';\nimport type { AbstractGrounding } from './groundings/abstract.grounding.ts';\nimport {\n type GroundingContext,\n createGroundingContext,\n} from './groundings/context.ts';\nimport type { View } from './groundings/view.grounding.ts';\nimport {\n type SqlPolicyAnalyzer,\n type SqlPolicyViolation,\n} from './sql-policy.ts';\n\nexport {\n type SqlPolicyAnalyzer,\n type SqlPolicyContext,\n type SqlPolicyViolation,\n} from './sql-policy.ts';\n\n/**\n * Filter type for view/table names.\n * - string[]: explicit list of view names\n * - RegExp: pattern to match view names\n * - function: predicate to filter view names\n */\nexport type Filter = string[] | RegExp | ((viewName: string) => boolean);\n\nexport interface Table {\n name: string;\n schema?: string;\n rawName?: string;\n columns: {\n name: string;\n type: string;\n kind?: 'LowCardinality' | 'Enum';\n values?: string[];\n isIndexed?: boolean;\n stats?: ColumnStats;\n }[];\n rowCount?: number;\n sizeHint?: 'tiny' | 'small' | 'medium' | 'large' | 'huge';\n indexes?: TableIndex[];\n constraints?: TableConstraint[];\n}\n\nexport interface TableIndex {\n name: string;\n columns: string[];\n unique?: boolean;\n type?: string;\n}\n\nexport interface TableConstraint {\n name: string;\n type:\n 'CHECK' | 'UNIQUE' | 'NOT_NULL' | 'DEFAULT' | 'PRIMARY_KEY' | 'FOREIGN_KEY';\n columns?: string[];\n definition?: string;\n defaultValue?: string;\n referencedTable?: string;\n referencedColumns?: string[];\n}\n\nexport interface ColumnStats {\n min?: string;\n max?: string;\n nullFraction?: number;\n nDistinct?: number;\n correlation?: number;\n}\n\nexport type Relationship = {\n table: string;\n from: string[];\n referenced_table: string;\n to: string[];\n};\n\nexport type TablesFilter = string[] | RegExp;\n\nexport interface Introspection {\n tables: Table[];\n relationships: Relationship[];\n}\n\nexport interface AdapterInfo {\n dialect: string;\n version?: string;\n database?: string;\n details?: FragmentObject;\n}\n\nexport type AdapterInfoProvider =\n AdapterInfo | (() => Promise<AdapterInfo> | AdapterInfo);\n\nexport type IntrospectionPhase =\n | 'info'\n | 'tables'\n | 'views'\n | 'row_counts'\n | 'constraints'\n | 'indexes'\n | 'column_stats'\n | 'column_values'\n | 'low_cardinality'\n | 'relationships'\n | 'definitions';\n\nexport type IntrospectionProgressType =\n 'phase:start' | 'phase:progress' | 'phase:end';\n\nexport interface IntrospectionProgress {\n type: IntrospectionProgressType;\n phase: IntrospectionPhase;\n message: string;\n table?: string;\n current?: number;\n total?: number;\n timestampMs?: number;\n}\n\nexport type OnProgress = (progress: IntrospectionProgress) => void;\n\nexport type GroundingFn = (adapter: Adapter) => AbstractGrounding;\n\n/**\n * Builds a grounding factory for a grounding that needs a concrete adapter's\n * API (BigQuery datasets, DuckDB namespaces, ...). Given any other adapter,\n * the factory throws.\n */\nexport function groundingFor<A extends Adapter>(\n adapterType: abstract new (...args: never[]) => A,\n create: (adapter: A) => AbstractGrounding,\n): GroundingFn {\n return (adapter) => {\n if (!(adapter instanceof adapterType)) {\n throw new Error(\n `A ${adapterType.name} grounding needs a ${adapterType.name} adapter, not ${adapter.constructor.name}.`,\n );\n }\n return create(adapter);\n };\n}\n\nexport type ExecuteFunction = (sql: string) => Promise<any> | any;\nexport type ValidateFunction = (\n sql: string,\n) => Promise<string | void> | string | void;\n\nexport abstract class Adapter {\n readonly #policyAnalyzer: SqlPolicyAnalyzer;\n\n /**\n * Injects the strategy that guards validate() and execute().\n */\n protected constructor(policyAnalyzer: SqlPolicyAnalyzer) {\n this.#policyAnalyzer = policyAnalyzer;\n }\n\n abstract grounding: GroundingFn[];\n\n abstract readonly formatterLanguage: SqlLanguage;\n\n /**\n * Default schema name for this database.\n * PostgreSQL: 'public', SQL Server: 'dbo', SQLite: undefined\n */\n abstract readonly defaultSchema: string | undefined;\n\n /**\n * System schemas to exclude from introspection by default.\n */\n abstract readonly systemSchemas: string[];\n\n /**\n * Introspect the database schema and return context fragments.\n *\n * Executes all configured groundings to populate the context, then\n * generates fragments from the complete context data.\n *\n * @param ctx - Optional grounding context for sharing state between groundings\n * @returns Array of context fragments representing the database schema\n */\n async introspect(ctx = createGroundingContext()): Promise<ContextFragment[]> {\n // Phase 1: All groundings populate ctx\n for (const fn of this.grounding) {\n const grounding = fn(this);\n if (grounding.phase) {\n ctx.onProgress({\n type: 'phase:start',\n phase: grounding.phase,\n message: `Starting ${grounding.name} introspection...`,\n });\n }\n try {\n await grounding.execute(ctx);\n } finally {\n if (grounding.phase) {\n ctx.onProgress({\n type: 'phase:end',\n phase: grounding.phase,\n message: `Finished ${grounding.name} introspection.`,\n });\n }\n }\n }\n\n // Phase 2: Generate fragments from complete ctx\n return this.#toSchemaFragments(ctx);\n }\n\n /**\n * Resolve the allowed entity names (tables + views) from grounding config.\n * Asks each grounding to contribute its entities; annotators contribute\n * nothing, so their metadata scans are skipped.\n * Results are NOT cached \u2014 call once and store the result.\n */\n async resolveAllowedEntities(): Promise<string[]> {\n const ctx = createGroundingContext();\n for (const fn of this.grounding) {\n await fn(this).contributeEntities(ctx);\n }\n return [...ctx.tables.map((t) => t.name), ...ctx.views.map((v) => v.name)];\n }\n\n /**\n * Convert complete grounding context to schema fragments.\n * Called after all groundings have populated ctx with data.\n */\n #toSchemaFragments(ctx: GroundingContext): ContextFragment[] {\n const fragments: ContextFragment[] = [];\n\n // Dialect info\n if (ctx.info) {\n fragments.push(\n dialectInfo({\n dialect: ctx.info.dialect,\n version: ctx.info.version,\n database: ctx.info.database,\n details: ctx.info.details,\n }),\n );\n }\n\n // Tables (with all annotations now included)\n for (const t of ctx.tables) {\n fragments.push(this.#tableToFragment(t));\n }\n\n // Views\n for (const v of ctx.views) {\n fragments.push(this.#viewToFragment(v));\n }\n\n // Relationships \u2014 filter out FK columns that were removed by column restriction\n const tableMap = new Map(ctx.tables.map((t) => [t.name, t]));\n const tableColumnSets = new Map(\n ctx.tables.map((t) => [t.name, new Set(t.columns.map((c) => c.name))]),\n );\n for (const rel of ctx.relationships) {\n const sourceColumns = tableColumnSets.get(rel.table);\n const targetColumns = tableColumnSets.get(rel.referenced_table);\n if (\n sourceColumns &&\n rel.from.some((column) => !sourceColumns.has(column))\n ) {\n continue;\n }\n if (\n targetColumns &&\n rel.to.some((column) => !targetColumns.has(column))\n ) {\n continue;\n }\n\n const sourceTable = tableMap.get(rel.table);\n const targetTable = tableMap.get(rel.referenced_table);\n fragments.push(\n this.#relationshipToFragment(rel, sourceTable, targetTable),\n );\n }\n\n fragments.push(...(ctx.fragments ?? []));\n\n return fragments;\n }\n\n /**\n * Convert a Table to a table fragment with nested column, index, and constraint fragments.\n */\n #tableToFragment(t: Table): ContextFragment {\n // Build constraint lookup maps for column-level annotations\n const pkConstraint = t.constraints?.find((c) => c.type === 'PRIMARY_KEY');\n const pkColumns = new Set(pkConstraint?.columns ?? []);\n\n const notNullColumns = new Set(\n t.constraints\n ?.filter((c) => c.type === 'NOT_NULL')\n .flatMap((c) => c.columns ?? []) ?? [],\n );\n\n const defaultByColumn = new Map<string, string>();\n for (const c of t.constraints?.filter((c) => c.type === 'DEFAULT') ?? []) {\n for (const col of c.columns ?? []) {\n if (c.defaultValue != null) {\n defaultByColumn.set(col, c.defaultValue);\n }\n }\n }\n\n // Single-column UNIQUE constraints\n const uniqueColumns = new Set(\n t.constraints\n ?.filter((c) => c.type === 'UNIQUE' && c.columns?.length === 1)\n .flatMap((c) => c.columns ?? []) ?? [],\n );\n\n // Foreign key lookup: column -> referenced table.column\n const fkByColumn = new Map<string, string>();\n for (const c of t.constraints?.filter((c) => c.type === 'FOREIGN_KEY') ??\n []) {\n const cols = c.columns ?? [];\n const refCols = c.referencedColumns ?? [];\n for (let i = 0; i < cols.length; i++) {\n const refCol = refCols[i] ?? refCols[0] ?? cols[i];\n fkByColumn.set(cols[i], `${c.referencedTable}.${refCol}`);\n }\n }\n\n // Build column fragments\n const columnFragments = t.columns.map((col) =>\n column({\n name: col.name,\n type: col.type,\n pk: pkColumns.has(col.name) || undefined,\n fk: fkByColumn.get(col.name),\n unique: uniqueColumns.has(col.name) || undefined,\n notNull: notNullColumns.has(col.name) || undefined,\n default: defaultByColumn.get(col.name),\n indexed: col.isIndexed || undefined,\n values: col.values,\n stats: col.stats,\n }),\n );\n\n // Set of present column names for cascade-cleaning indexes/constraints\n const presentColumns = new Set(t.columns.map((c) => c.name));\n\n // Build index fragments\n const indexFragments = (t.indexes ?? [])\n .filter((idx) =>\n idx.columns.every((column) => presentColumns.has(column)),\n )\n .map((idx) =>\n index({\n name: idx.name,\n columns: idx.columns,\n unique: idx.unique,\n type: idx.type,\n }),\n );\n\n // Build constraint fragments for multi-column UNIQUE and CHECK constraints\n const constraintFragments = (t.constraints ?? [])\n .filter(\n (c) =>\n c.type === 'CHECK' ||\n (c.type === 'UNIQUE' && (c.columns?.length ?? 0) > 1),\n )\n .filter(\n (c) =>\n !c.columns?.length ||\n c.columns.every((column) => presentColumns.has(column)),\n )\n .map((c) =>\n constraint({\n name: c.name,\n type: c.type,\n columns: c.columns,\n definition: c.definition,\n }),\n );\n\n return table({\n name: t.name,\n schema: t.schema,\n rowCount: t.rowCount,\n sizeHint: t.sizeHint,\n columns: columnFragments,\n indexes: indexFragments.length > 0 ? indexFragments : undefined,\n constraints:\n constraintFragments.length > 0 ? constraintFragments : undefined,\n });\n }\n\n /**\n * Convert a View to a view fragment with nested column fragments.\n */\n #viewToFragment(v: View): ContextFragment {\n const columnFragments = v.columns.map((col) =>\n column({\n name: col.name,\n type: col.type,\n values: col.values,\n stats: col.stats,\n }),\n );\n\n return view({\n name: v.name,\n schema: v.schema,\n columns: columnFragments,\n definition: v.definition,\n });\n }\n\n /**\n * Convert a Relationship to a relationship fragment.\n * Infers cardinality from row counts if available.\n */\n #relationshipToFragment(\n rel: Relationship,\n sourceTable?: Table,\n targetTable?: Table,\n ): ContextFragment {\n const sourceCount = sourceTable?.rowCount;\n const targetCount = targetTable?.rowCount;\n\n let cardinality:\n 'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many' | undefined;\n\n if (sourceCount != null && targetCount != null && targetCount > 0) {\n const ratio = sourceCount / targetCount;\n if (ratio > 5) {\n cardinality = 'many-to-one';\n } else if (ratio < 1.2 && ratio > 0.8) {\n cardinality = 'one-to-one';\n } else if (ratio < 0.2) {\n cardinality = 'one-to-many';\n }\n }\n\n return relationship({\n from: { table: rel.table, columns: rel.from },\n to: { table: rel.referenced_table, columns: rel.to },\n cardinality,\n });\n }\n format(sql: string): string {\n const decoded = this.#decodeShellEscapes(sql);\n try {\n return formatSql(decoded, { language: this.formatterLanguage });\n } catch {\n return decoded;\n }\n }\n\n #decodeShellEscapes(sql: string): string {\n return sql\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\t/g, '\\t')\n .replace(/\\\\([().*$])/g, '$1')\n .replace(/\\\\(?=$)/gm, '');\n }\n\n #cachedAllowedEntities: string[] | null = null;\n\n async #resolveScope(): Promise<string[]> {\n if (this.#cachedAllowedEntities) return this.#cachedAllowedEntities;\n this.#cachedAllowedEntities = await this.resolveAllowedEntities();\n return this.#cachedAllowedEntities;\n }\n\n async #analyzePolicy(sql: string): Promise<SqlPolicyViolation | null> {\n return this.#policyAnalyzer.analyze(sql, {\n resolveAllowedEntities: () => this.#resolveScope(),\n });\n }\n\n async validate(sql: string): Promise<string | void> {\n const decoded = this.#decodeShellEscapes(sql);\n const violation = await this.#analyzePolicy(decoded);\n if (violation?.kind === 'read-only') return violation.message;\n if (violation?.kind === 'scope') return JSON.stringify(violation.payload);\n return this.validateImpl(decoded);\n }\n\n async execute(sql: string): Promise<any[]> {\n return this.executeImpl(await this.enforceExecutionPolicy(sql));\n }\n\n protected async enforceExecutionPolicy(sql: string): Promise<string> {\n const decoded = this.#decodeShellEscapes(sql);\n const violation = await this.#analyzePolicy(decoded);\n if (violation?.kind === 'read-only') {\n throw new SQLReadOnlyError(violation.message);\n }\n if (violation?.kind === 'scope') {\n throw new SQLScopeError(violation.payload);\n }\n return decoded;\n }\n\n abstract executeImpl(sql: string): Promise<any[]> | any[];\n abstract validateImpl(sql: string): Promise<string | void> | string | void;\n\n /**\n * Run an introspection query and check every row against `row`, the shape\n * the driver returns for that query. A row of any other shape throws.\n */\n async runQuery<RowSchema extends z.ZodType>(\n sql: string,\n row: RowSchema,\n ): Promise<z.output<RowSchema>[]> {\n const rows = z.array(row).safeParse(await this.queryRows(sql));\n if (!rows.success) {\n throw new Error(\n `${this.constructor.name} introspection query returned rows of an unexpected shape:\\n${z.prettifyError(rows.error)}\\nSQL: ${sql.trim()}`,\n { cause: rows.error },\n );\n }\n return rows.data;\n }\n\n /**\n * Run an introspection query through the driver and return its rows as the\n * driver produced them.\n */\n protected abstract queryRows(sql: string): Promise<unknown[]> | unknown[];\n\n /**\n * The rows in a driver's execute() result: the result itself when it is an\n * array, otherwise the first array found at one of `paths` (dot-separated,\n * so `recordsets.0` reads `result.recordsets[0]`).\n */\n protected rowsFrom(result: unknown, paths: readonly string[]): unknown[] {\n if (Array.isArray(result)) return result;\n for (const path of paths) {\n const rows = path\n .split('.')\n .reduce<unknown>(\n (value, key) =>\n typeof value === 'object' && value !== null\n ? Reflect.get(value, key)\n : undefined,\n result,\n );\n if (Array.isArray(rows)) return rows;\n }\n throw new Error(\n `${this.constructor.name} execute() must return an array of rows or an object holding one at ${paths.map((path) => `result.${path}`).join(', ')}.`,\n );\n }\n\n /**\n * Quote an identifier (table/column name) for safe use in SQL.\n * Each database uses different quoting styles.\n */\n abstract quoteIdentifier(name: string): string;\n\n /**\n * Escape a string value for safe use in SQL.\n * Each database escapes different characters.\n */\n abstract escape(value: string): string;\n\n /**\n * Build a SELECT query to sample rows from a table.\n * Each database uses different syntax for limiting rows (LIMIT vs TOP).\n */\n abstract buildSampleRowsQuery(\n tableName: string,\n columns: string[] | undefined,\n limit: number,\n ): string;\n\n /**\n * Convert unknown database value to number.\n * Handles number, bigint, and string types.\n */\n toNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'bigint') {\n return Number(value);\n }\n if (typeof value === 'string' && value.trim() !== '') {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n }\n\n /**\n * Parse a potentially qualified table name into schema and table parts.\n */\n parseTableName(name: string): { schema: string; table: string } {\n if (name.includes('.')) {\n const [schema, ...rest] = name.split('.');\n return { schema, table: rest.join('.') };\n }\n return { schema: this.defaultSchema ?? '', table: name };\n }\n\n /**\n * Escape a string value for use in SQL string literals (single quotes).\n * Used in WHERE clauses like: WHERE name = '${escapeString(value)}'\n */\n escapeString(value: string): string {\n return value.replace(/'/g, \"''\");\n }\n\n /**\n * Build a SQL filter clause to include/exclude schemas.\n * @param columnName - The schema column name (e.g., 'TABLE_SCHEMA')\n * @param allowedSchemas - If provided, filter to these schemas only\n */\n buildSchemaFilter(columnName: string, allowedSchemas?: string[]): string {\n if (allowedSchemas && allowedSchemas.length > 0) {\n const values = allowedSchemas\n .map((s) => `'${this.escapeString(s)}'`)\n .join(', ');\n return `AND ${columnName} IN (${values})`;\n }\n if (this.systemSchemas.length > 0) {\n const values = this.systemSchemas\n .map((s) => `'${this.escapeString(s)}'`)\n .join(', ');\n return `AND ${columnName} NOT IN (${values})`;\n }\n return '';\n }\n}\n\nexport function filterTablesByName<T extends { name: string }>(\n tables: T[],\n filter: TablesFilter | undefined,\n): T[] {\n if (!filter) return tables;\n return tables.filter((table) => matchesFilter(table.name, filter));\n}\n\nexport function filterRelationshipsByTables(\n relationships: Relationship[],\n tableNames: Set<string> | undefined,\n): Relationship[] {\n if (tableNames === undefined) {\n return relationships;\n }\n if (tableNames.size === 0) {\n return [];\n }\n return relationships.filter(\n (it) => tableNames.has(it.table) || tableNames.has(it.referenced_table),\n );\n}\n\nexport function applyTablesFilter(\n tables: Table[],\n relationships: Relationship[],\n filter: TablesFilter | undefined,\n): { tables: Table[]; relationships: Relationship[] } {\n if (!filter) {\n return { tables, relationships };\n }\n\n const allowedNames = new Set(\n getTablesWithRelated(tables, relationships, filter),\n );\n\n return {\n tables: tables.filter((table) => allowedNames.has(table.name)),\n relationships: filterRelationshipsByTables(relationships, allowedNames),\n };\n}\n\nexport function matchesFilter(\n tableName: string,\n filter: TablesFilter,\n): boolean {\n if (Array.isArray(filter)) {\n return filter.includes(tableName);\n }\n return filter.test(tableName);\n}\n\nexport function getTablesWithRelated(\n allTables: Table[],\n relationships: Relationship[],\n filter: TablesFilter,\n): string[] {\n const matchedTables = filterTablesByName(allTables, filter).map(\n (it) => it.name,\n );\n\n if (matchedTables.length === 0) {\n return [];\n }\n\n const adjacency = new Map<string, Set<string>>();\n\n for (const rel of relationships) {\n if (!adjacency.has(rel.table)) {\n adjacency.set(rel.table, new Set());\n }\n if (!adjacency.has(rel.referenced_table)) {\n adjacency.set(rel.referenced_table, new Set());\n }\n adjacency.get(rel.table)!.add(rel.referenced_table);\n adjacency.get(rel.referenced_table)!.add(rel.table);\n }\n\n const result = new Set<string>(matchedTables);\n const queue = [...matchedTables];\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n const neighbors = adjacency.get(current);\n\n if (!neighbors) {\n continue;\n }\n\n for (const neighbor of neighbors) {\n if (!result.has(neighbor)) {\n result.add(neighbor);\n queue.push(neighbor);\n }\n }\n }\n\n return Array.from(result);\n}\n", "const sqlValidationMarker = Symbol('SQLValidationError');\nconst unanswerableSqlMarker = Symbol('UnanswerableSQLError');\nconst sqlScopeMarker = Symbol('SQLScopeError');\nconst sqlReadOnlyMarker = Symbol('SQLReadOnlyError');\n\nexport type SQLScopeErrorType = 'OUT_OF_SCOPE' | 'SQL_SCOPE_PARSE_ERROR';\n\nexport interface SQLScopeErrorPayload {\n error: string;\n error_type: SQLScopeErrorType;\n suggestion: string;\n sql_attempted: string;\n referenced_entities?: string[];\n allowed_entities?: string[];\n parser_dialect?: string;\n parser_error?: string;\n}\n\n/**\n * Error thrown when SQL validation fails.\n */\nexport class SQLValidationError extends Error {\n [sqlValidationMarker]: true;\n\n constructor(message: string) {\n super(message);\n this.name = 'SQLValidationError';\n this[sqlValidationMarker] = true;\n }\n\n static isInstance(error: unknown): error is SQLValidationError {\n return (\n error instanceof SQLValidationError && error[sqlValidationMarker] === true\n );\n }\n}\n\n/**\n * Error thrown when the question cannot be answered with the given schema.\n */\nexport class UnanswerableSQLError extends Error {\n [unanswerableSqlMarker]: true;\n\n constructor(message: string) {\n super(message);\n this.name = 'UnanswerableSQLError';\n this[unanswerableSqlMarker] = true;\n }\n\n static isInstance(error: unknown): error is UnanswerableSQLError {\n return (\n error instanceof UnanswerableSQLError &&\n error[unanswerableSqlMarker] === true\n );\n }\n}\n\n/**\n * Error thrown when a query falls outside the grounded SQL scope.\n */\nexport class SQLScopeError extends Error {\n [sqlScopeMarker]: true;\n readonly payload: SQLScopeErrorPayload;\n readonly errorType: SQLScopeErrorType;\n\n constructor(payload: SQLScopeErrorPayload) {\n super(JSON.stringify(payload));\n this.name = 'SQLScopeError';\n this.payload = payload;\n this.errorType = payload.error_type;\n this[sqlScopeMarker] = true;\n }\n\n static isInstance(error: unknown): error is SQLScopeError {\n return error instanceof SQLScopeError && error[sqlScopeMarker] === true;\n }\n}\n\n/**\n * Error thrown when a query is not read-only (does not start with SELECT or WITH).\n */\nexport class SQLReadOnlyError extends Error {\n [sqlReadOnlyMarker]: true;\n\n constructor(message: string) {\n super(message);\n this.name = 'SQLReadOnlyError';\n this[sqlReadOnlyMarker] = true;\n }\n\n static isInstance(error: unknown): error is SQLReadOnlyError {\n return (\n error instanceof SQLReadOnlyError && error[sqlReadOnlyMarker] === true\n );\n }\n}\n", "import type { ContextFragment, FragmentObject } from '@deepagents/context';\n\n/**\n * Schema fragment builders.\n *\n * These fragments represent database schema metadata that can be injected\n * into AI prompts. Use with renderers (XML, Markdown, TOML, TOON) to format.\n *\n * @example\n * ```ts\n * import { dialectInfo, table, column, relationship } from '@deepagents/text2sql';\n *\n * const schemaFragments = [\n * dialectInfo({ dialect: 'PostgreSQL', version: '14.5' }),\n * table({\n * name: 'users',\n * columns: [\n * column({ name: 'id', type: 'integer', pk: true }),\n * column({ name: 'email', type: 'varchar', unique: true }),\n * ],\n * }),\n * ];\n * ```\n */\n\n/**\n * Database dialect and version information.\n *\n * @param input.dialect - Database type (PostgreSQL, SQLite, SQL Server, etc.)\n * @param input.version - Database version string\n * @param input.database - Database name\n *\n * @example\n * dialectInfo({ dialect: 'PostgreSQL', version: '14.5', database: 'myapp' })\n */\nexport function dialectInfo(input: {\n dialect: string;\n version?: string;\n database?: string;\n details?: FragmentObject;\n}): ContextFragment {\n return {\n name: 'dialectInfo',\n data: {\n dialect: input.dialect,\n ...(input.version && { version: input.version }),\n ...(input.database && { database: input.database }),\n ...(input.details && { details: input.details }),\n },\n };\n}\n\n/**\n * Database table with columns and optional metadata.\n *\n * @param input.name - Table name\n * @param input.schema - Schema name (e.g., 'public' for PostgreSQL)\n * @param input.rowCount - Approximate row count\n * @param input.sizeHint - Size category for query optimization hints\n * @param input.columns - Array of column() fragments\n * @param input.indexes - Array of index() fragments\n * @param input.constraints - Array of constraint() fragments\n *\n * @example\n * table({\n * name: 'users',\n * rowCount: 1500,\n * sizeHint: 'medium',\n * columns: [\n * column({ name: 'id', type: 'integer', pk: true }),\n * column({ name: 'email', type: 'varchar', unique: true, indexed: true }),\n * ],\n * indexes: [\n * index({ name: 'idx_email', columns: ['email'], unique: true }),\n * ],\n * })\n */\nexport function table(input: {\n name: string;\n schema?: string;\n rowCount?: number;\n sizeHint?: 'tiny' | 'small' | 'medium' | 'large' | 'huge';\n columns: ContextFragment[];\n indexes?: ContextFragment[];\n constraints?: ContextFragment[];\n}): ContextFragment {\n return {\n name: 'table',\n data: {\n name: input.name,\n ...(input.schema && { schema: input.schema }),\n ...(input.rowCount != null && { rowCount: input.rowCount }),\n ...(input.sizeHint && { sizeHint: input.sizeHint }),\n columns: input.columns,\n ...(input.indexes?.length && { indexes: input.indexes }),\n ...(input.constraints?.length && { constraints: input.constraints }),\n },\n };\n}\n\n/**\n * Table column with type and annotations.\n *\n * @param input.name - Column name\n * @param input.type - Column data type (e.g., 'integer', 'varchar(255)')\n * @param input.pk - Is primary key\n * @param input.fk - Foreign key reference in \"table.column\" format\n * @param input.unique - Has unique constraint\n * @param input.notNull - Has NOT NULL constraint\n * @param input.default - Default value expression\n * @param input.indexed - Has index on this column\n * @param input.values - Enum or low cardinality values\n * @param input.stats - Column statistics (min, max, null fraction)\n *\n * @example\n * column({\n * name: 'status',\n * type: 'varchar',\n * notNull: true,\n * indexed: true,\n * values: ['active', 'inactive', 'suspended'],\n * })\n */\nexport function column(input: {\n name: string;\n type: string;\n pk?: boolean;\n fk?: string;\n unique?: boolean;\n notNull?: boolean;\n default?: string;\n indexed?: boolean;\n values?: string[];\n stats?: {\n min?: string;\n max?: string;\n nullFraction?: number;\n nDistinct?: number;\n correlation?: number;\n };\n}): ContextFragment {\n return {\n name: 'column',\n data: {\n name: input.name,\n type: input.type,\n ...(input.pk && { pk: true }),\n ...(input.fk && { fk: input.fk }),\n ...(input.unique && { unique: true }),\n ...(input.notNull && { notNull: true }),\n ...(input.default && { default: input.default }),\n ...(input.indexed && { indexed: true }),\n ...(input.values?.length && { values: input.values }),\n ...(input.stats && { stats: input.stats }),\n },\n };\n}\n\n/**\n * Table index.\n *\n * @param input.name - Index name\n * @param input.columns - Columns included in the index\n * @param input.unique - Is unique index\n * @param input.type - Index type (BTREE, HASH, GIN, etc.)\n *\n * @example\n * index({ name: 'idx_user_email', columns: ['email'], unique: true, type: 'BTREE' })\n */\nexport function index(input: {\n name: string;\n columns: string[];\n unique?: boolean;\n type?: string;\n}): ContextFragment {\n return {\n name: 'index',\n data: {\n name: input.name,\n columns: input.columns,\n ...(input.unique && { unique: true }),\n ...(input.type && { type: input.type }),\n },\n };\n}\n\n/**\n * Table constraint (CHECK, UNIQUE, PRIMARY_KEY, FOREIGN_KEY, etc).\n *\n * @param input.name - Constraint name\n * @param input.type - Constraint type\n * @param input.columns - Columns involved in the constraint\n * @param input.definition - CHECK constraint SQL definition\n * @param input.defaultValue - DEFAULT constraint value\n * @param input.referencedTable - For FK: referenced table name\n * @param input.referencedColumns - For FK: referenced column names\n *\n * @example\n * constraint({\n * name: 'chk_amount_positive',\n * type: 'CHECK',\n * definition: 'amount > 0',\n * })\n *\n * @example\n * constraint({\n * name: 'fk_order_user',\n * type: 'FOREIGN_KEY',\n * columns: ['user_id'],\n * referencedTable: 'users',\n * referencedColumns: ['id'],\n * })\n */\nexport function constraint(input: {\n name: string;\n type:\n | 'CHECK'\n | 'UNIQUE'\n | 'NOT_NULL'\n | 'DEFAULT'\n | 'PRIMARY_KEY'\n | 'FOREIGN_KEY';\n columns?: string[];\n definition?: string;\n defaultValue?: string;\n referencedTable?: string;\n referencedColumns?: string[];\n}): ContextFragment {\n return {\n name: 'constraint',\n data: {\n name: input.name,\n type: input.type,\n ...(input.columns?.length && { columns: input.columns }),\n ...(input.definition && { definition: input.definition }),\n ...(input.defaultValue && { defaultValue: input.defaultValue }),\n ...(input.referencedTable && { referencedTable: input.referencedTable }),\n ...(input.referencedColumns?.length && {\n referencedColumns: input.referencedColumns,\n }),\n },\n };\n}\n\n/**\n * Database view.\n *\n * @param input.name - View name\n * @param input.schema - Schema name\n * @param input.columns - Array of column() fragments\n * @param input.definition - View SQL definition\n *\n * @example\n * view({\n * name: 'active_users',\n * columns: [\n * column({ name: 'id', type: 'integer' }),\n * column({ name: 'email', type: 'varchar' }),\n * ],\n * definition: \"SELECT id, email FROM users WHERE status = 'active'\",\n * })\n */\nexport function view(input: {\n name: string;\n schema?: string;\n columns: ContextFragment[];\n definition?: string;\n}): ContextFragment {\n return {\n name: 'view',\n data: {\n name: input.name,\n ...(input.schema && { schema: input.schema }),\n columns: input.columns,\n ...(input.definition && { definition: input.definition }),\n },\n };\n}\n\n/**\n * Relationship between tables (foreign key connection).\n *\n * @param input.from - Source table and columns\n * @param input.to - Referenced table and columns\n * @param input.cardinality - Relationship cardinality\n *\n * @example\n * relationship({\n * from: { table: 'orders', columns: ['user_id'] },\n * to: { table: 'users', columns: ['id'] },\n * cardinality: 'many-to-one',\n * })\n */\nexport function relationship(input: {\n from: { table: string; columns: string[] };\n to: { table: string; columns: string[] };\n cardinality?: 'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many';\n}): ContextFragment {\n return {\n name: 'relationship',\n data: {\n from: input.from,\n to: input.to,\n ...(input.cardinality && { cardinality: input.cardinality }),\n },\n };\n}\n", "import type { ContextFragment } from '@deepagents/context';\n\nimport type {\n AdapterInfo,\n ColumnStats,\n OnProgress,\n Relationship,\n Table,\n} from '../adapter.ts';\nimport type { View } from './view.grounding.ts';\n\n/**\n * Column type for grounding operations.\n * Common interface between Table.columns and View.columns.\n */\nexport interface Column {\n name: string;\n type: string;\n kind?: 'LowCardinality' | 'Enum';\n values?: string[];\n stats?: ColumnStats;\n}\n\n/**\n * Entity with columns (Table or View).\n */\nexport interface ColumnContainer {\n name: string;\n columns: Column[];\n}\n\n/**\n * Shared context object passed to all groundings.\n * Groundings read from and write to this context.\n */\nexport interface GroundingContext {\n /** Tables discovered by TableGrounding */\n tables: Table[];\n\n /** Views discovered by ViewGrounding */\n views: View[];\n\n /** Relationships discovered by TableGrounding */\n relationships: Relationship[];\n\n /** Database info collected by InfoGrounding */\n info?: AdapterInfo;\n\n /** Adapter-specific fragments contributed during grounding. */\n fragments?: ContextFragment[];\n\n /** Shared cache for cross-grounding deduplication. Keyed by `type:key`. */\n cache: Map<string, unknown>;\n\n /** Progress sink for long-running introspection work. */\n onProgress: OnProgress;\n}\n\nconst noopProgress: OnProgress = () => {};\n\nfunction timestampProgress(onProgress?: OnProgress): OnProgress {\n if (!onProgress) return noopProgress;\n return (progress) => {\n onProgress({\n ...progress,\n timestampMs: progress.timestampMs ?? Date.now(),\n });\n };\n}\n\n/**\n * Create a new empty grounding context.\n */\nexport function createGroundingContext(\n options: { onProgress?: OnProgress } = {},\n): GroundingContext {\n return {\n tables: [],\n views: [],\n relationships: [],\n info: undefined,\n fragments: [],\n cache: new Map(),\n onProgress: timestampProgress(options.onProgress),\n };\n}\n", "import { z } from 'zod';\n\nimport type { ContextFragment, FragmentData } from '@deepagents/context';\n\nimport type { Filter } from '../adapter.ts';\nimport { AbstractGrounding } from '../groundings/abstract.grounding.ts';\nimport type { GroundingContext } from '../groundings/context.ts';\nimport type { PostHog } from './posthog.ts';\nimport type {\n PostHogEventDefinition,\n PostHogPropertyDefinition,\n PostHogPropertyDefinitionType,\n} from './types.ts';\n\ntype StandardPropertyType = Exclude<PostHogPropertyDefinitionType, 'group'>;\n\n// Definitions as PostHog's event_definitions and property_definitions\n// endpoints list them. Only the members this grounding reads are checked.\n\nconst postHogEventDefinition = z.object({\n name: z.string().min(1),\n description: z.string().nullish(),\n tags: z.array(z.string()).nullish(),\n verified: z.boolean().nullish(),\n});\n\nconst postHogPropertyDefinition = z.object({\n name: z.string().min(1),\n description: z.string().nullish(),\n property_type: z.string().nullish(),\n is_numerical: z.boolean().nullish(),\n verified: z.boolean().nullish(),\n});\n\nexport interface PostHogDefinitionsGroundingConfig {\n events?: Filter;\n properties?: Filter;\n propertyTypes?: StandardPropertyType[];\n groupTypeIndexes?: number[];\n}\n\nexport class PostHogDefinitionsGrounding extends AbstractGrounding {\n readonly #adapter: PostHog;\n readonly #config: PostHogDefinitionsGroundingConfig;\n\n constructor(\n adapter: PostHog,\n config: PostHogDefinitionsGroundingConfig = {},\n ) {\n super('definitions', 'definitions');\n this.#adapter = adapter;\n this.#config = config;\n }\n\n override async execute(ctx: GroundingContext): Promise<void> {\n const fragments = (ctx.fragments ??= []);\n const configuredPropertyTypes: StandardPropertyType[] = this.#config\n .propertyTypes ?? ['event', 'person', 'session'];\n const propertyTypes = [\n ...new Set<StandardPropertyType>(configuredPropertyTypes),\n ];\n validatePropertyTypes(propertyTypes);\n const groupTypeIndexes = [...new Set(this.#config.groupTypeIndexes ?? [])];\n if (\n groupTypeIndexes.some((index) => !Number.isInteger(index) || index < 0)\n ) {\n throw new Error(\n 'PostHog groupTypeIndexes must contain non-negative integers.',\n );\n }\n\n const propertyRequests = [\n ...propertyTypes.map(async (type) => ({\n type,\n definitions: await this.#adapter.transport.listPropertyDefinitions({\n type,\n }),\n })),\n ...groupTypeIndexes.map(async (groupTypeIndex) => ({\n type: `group:${groupTypeIndex}`,\n definitions: await this.#adapter.transport.listPropertyDefinitions({\n type: 'group',\n groupTypeIndex,\n }),\n })),\n ];\n const [events, properties] = await Promise.all([\n this.#adapter.transport.listEventDefinitions(),\n Promise.all(propertyRequests),\n ]);\n\n const eventData = readEvents(events, this.#config.events);\n if (eventData.length > 0) {\n fragments.push({ name: 'posthogEvents', data: eventData });\n }\n\n const propertyData: Record<string, FragmentData> = {};\n for (const group of properties) {\n const definitions = readProperties(\n group.definitions,\n this.#config.properties,\n );\n if (definitions.length > 0) propertyData[group.type] = definitions;\n }\n if (Object.keys(propertyData).length > 0) {\n fragments.push({\n name: 'posthogProperties',\n data: propertyData,\n } satisfies ContextFragment);\n }\n }\n}\n\nfunction readEvents(values: unknown[], filter?: Filter): FragmentData[] {\n return values\n .map(validateEvent)\n .filter((event) => matchesFilter(event.name, filter))\n .toSorted((left, right) => left.name.localeCompare(right.name))\n .map((event) =>\n compact({\n name: event.name,\n description: event.description ?? undefined,\n tags: event.tags?.length ? event.tags : undefined,\n verified: event.verified ?? undefined,\n }),\n );\n}\n\nfunction readProperties(values: unknown[], filter?: Filter): FragmentData[] {\n return values\n .map(validateProperty)\n .filter((property) => matchesFilter(property.name, filter))\n .toSorted((left, right) => left.name.localeCompare(right.name))\n .map((property) =>\n compact({\n name: property.name,\n description: property.description ?? undefined,\n propertyType: property.property_type ?? undefined,\n numerical: property.is_numerical ?? undefined,\n verified: property.verified ?? undefined,\n }),\n );\n}\n\nfunction validateEvent(value: unknown): PostHogEventDefinition {\n const event = postHogEventDefinition.safeParse(value);\n if (!event.success) {\n throw new Error('PostHog returned a malformed event definition.');\n }\n return event.data;\n}\n\nfunction validateProperty(value: unknown): PostHogPropertyDefinition {\n const property = postHogPropertyDefinition.safeParse(value);\n if (!property.success) {\n throw new Error('PostHog returned a malformed property definition.');\n }\n return property.data;\n}\n\nfunction validatePropertyTypes(values: StandardPropertyType[]): void {\n const allowed = new Set<StandardPropertyType>(['event', 'person', 'session']);\n if (values.some((value) => !allowed.has(value))) {\n throw new Error('PostHog propertyTypes contains an unsupported type.');\n }\n}\n\nfunction matchesFilter(name: string, filter?: Filter): boolean {\n if (!filter) return true;\n if (Array.isArray(filter)) return filter.includes(name);\n if (filter instanceof RegExp) {\n filter.lastIndex = 0;\n return filter.test(name);\n }\n return filter(name);\n}\n\nfunction compact(\n value: Record<string, FragmentData | undefined>,\n): Record<string, FragmentData> {\n return Object.fromEntries(\n Object.entries(value).filter(\n (entry): entry is [string, FragmentData] => entry[1] !== undefined,\n ),\n );\n}\n", "import type { Filter, IntrospectionPhase } from '../adapter.ts';\nimport type { GroundingContext } from './context.ts';\n\nexport type { AdapterInfo, AdapterInfoProvider, Filter } from '../adapter.ts';\n\n/**\n * Per-entity column filter.\n * Maps entity name (table or view) to a Filter that selects which columns to keep.\n * Entities not listed in the record keep all their columns.\n */\nexport type ColumnsFilter = Record<string, Filter>;\n\n/**\n * Filter a columns array using a Filter.\n * Keeps columns whose name matches the filter.\n */\nexport function filterColumns<T extends { name: string }>(\n columns: T[],\n filter: Filter,\n): T[] {\n if (Array.isArray(filter)) {\n return columns.filter((col) => filter.includes(col.name));\n }\n if (filter instanceof RegExp) {\n return columns.filter((col) => filter.test(col.name));\n }\n return columns.filter((col) => filter(col.name));\n}\n\n/**\n * Apply per-entity column filtering.\n * Returns the entity unchanged if no filter matches its name.\n */\nexport function applyColumnFilter<\n T extends { name: string; columns: { name: string }[] },\n>(entity: T, columnsConfig?: ColumnsFilter): T {\n if (!columnsConfig) return entity;\n const filter = columnsConfig[entity.name];\n if (!filter) return entity;\n return { ...entity, columns: filterColumns(entity.columns, filter) };\n}\n\n/**\n * Abstract base class for database schema groundings.\n *\n * Groundings collect schema metadata into the shared GroundingContext.\n * Fragment generation is centralized in Adapter.introspect().\n */\nexport abstract class AbstractGrounding {\n /**\n * Grounding identifier for debugging/logging.\n */\n name: string;\n phase?: IntrospectionPhase;\n\n constructor(name: string, phase?: IntrospectionPhase) {\n this.name = name;\n this.phase = phase;\n }\n\n /**\n * Execute grounding to populate the shared context.\n * Groundings mutate ctx to add their collected data (tables, views, indexes, etc).\n * Fragment generation happens centrally in Adapter after all groundings complete.\n *\n * @param ctx - Shared context for accumulating schema data\n */\n abstract execute(ctx: GroundingContext): Promise<void>;\n\n /**\n * Populate ctx with the tables/views this grounding makes available for scope\n * resolution. Annotators decorate entities other groundings produced and add\n * no membership, so the default is a no-op; entity-producing groundings\n * override it. This lets scope resolution skip the annotators' metadata scans.\n *\n * @param _ctx - Shared context for accumulating entity membership\n */\n async contributeEntities(_ctx: GroundingContext): Promise<void> {}\n}\n", "import { AbstractGrounding } from '../groundings/abstract.grounding.ts';\nimport type { GroundingContext } from '../groundings/context.ts';\n\nexport class PostHogInfoGrounding extends AbstractGrounding {\n constructor() {\n super('info', 'info');\n }\n\n override async execute(ctx: GroundingContext): Promise<void> {\n ctx.info = {\n dialect: 'HogQL',\n details: {\n identifierQuoting:\n 'Use backticks for identifiers that require quoting.',\n propertyAccess:\n 'Use PostHog HogQL property access and the grounded event/person/session property definitions. Do not guess property names.',\n performance:\n 'Prefer bounded time ranges and LIMIT for non-aggregate event queries. OFFSET is not supported by the Query API.',\n execution:\n 'Queries run through PostHog as read-only HogQLQuery nodes, not through a PostgreSQL connection.',\n },\n };\n }\n}\n", "import { z } from 'zod';\n\nimport { Adapter, type GroundingFn } from '../adapter.ts';\nimport { PostHogSqlPolicyAnalyzer } from './posthog.sql-policy.ts';\nimport type {\n PostHogQueryRequest,\n PostHogQueryValues,\n PostHogTransport,\n} from './types.ts';\n\nexport interface PostHogAdapterOptions {\n transport: PostHogTransport;\n grounding?: GroundingFn[];\n}\n\n/** A HogQLQuery response: one array per row, cells in column order. */\nconst hogQLQueryResponse = z.object({\n results: z.array(z.array(z.unknown())),\n columns: z.array(z.string().min(1)).optional(),\n});\n\nexport class PostHog extends Adapter {\n readonly transport: PostHogTransport;\n override readonly grounding: GroundingFn[];\n override readonly defaultSchema = undefined;\n override readonly systemSchemas = ['system'];\n override readonly formatterLanguage = 'clickhouse';\n\n constructor(options: PostHogAdapterOptions) {\n if (!options?.transport || typeof options.transport.query !== 'function') {\n throw new Error('PostHog adapter requires a transport.');\n }\n if (\n typeof options.transport.listEventDefinitions !== 'function' ||\n typeof options.transport.listPropertyDefinitions !== 'function'\n ) {\n throw new Error(\n 'PostHog transport must provide event and property definition methods.',\n );\n }\n\n super(new PostHogSqlPolicyAnalyzer(options.transport));\n this.transport = options.transport;\n this.grounding = options.grounding ?? [];\n }\n\n override async execute(\n sql: string,\n values?: PostHogQueryValues,\n ): Promise<Record<string, unknown>[]> {\n return this.#execute(\n await this.enforceExecutionPolicy(sql),\n 'deepagents_text2sql_execute',\n values,\n );\n }\n\n override async executeImpl(sql: string): Promise<Record<string, unknown>[]> {\n return this.#execute(sql, 'deepagents_text2sql_execute');\n }\n\n override validateImpl(): undefined {\n return undefined;\n }\n\n protected override queryRows(sql: string): Promise<unknown[]> {\n return this.#execute(sql, 'deepagents_text2sql_grounding');\n }\n\n override quoteIdentifier(name: string): string {\n return `\\`${name.replace(/`/g, '``')}\\``;\n }\n\n override escape(value: string): string {\n return value.replace(/`/g, '``');\n }\n\n override buildSampleRowsQuery(\n tableName: string,\n columns: string[] | undefined,\n limit: number,\n ): string {\n const { schema, table } = this.parseTableName(tableName);\n const relation = schema\n ? `${this.quoteIdentifier(schema)}.${this.quoteIdentifier(table)}`\n : this.quoteIdentifier(table);\n const projection = columns?.length\n ? columns.map((column) => this.quoteIdentifier(column)).join(', ')\n : '*';\n return `SELECT ${projection} FROM ${relation} LIMIT ${limit}`;\n }\n\n async query(request: PostHogQueryRequest): Promise<unknown> {\n return this.transport.query(request);\n }\n\n async #execute(\n sql: string,\n name: string,\n values?: PostHogQueryValues,\n ): Promise<Record<string, unknown>[]> {\n const response = await this.transport.query({\n query: {\n kind: 'HogQLQuery',\n query: sql,\n ...(values === undefined ? {} : { values }),\n },\n name,\n });\n return rowsFromResponse(response);\n }\n}\n\nfunction rowsFromResponse(value: unknown): Record<string, unknown>[] {\n const response = hogQLQueryResponse.safeParse(value);\n if (!response.success) {\n throw new Error(\n `PostHog HogQLQuery response is malformed:\\n${z.prettifyError(response.error)}`,\n );\n }\n const { columns, results } = response.data;\n if (columns && new Set(columns).size !== columns.length) {\n throw new Error(\n 'PostHog HogQLQuery response contains duplicate column names; alias every selected expression uniquely.',\n );\n }\n if (results.length === 0) return [];\n if (!columns) {\n throw new Error(\n 'PostHog HogQLQuery response requires columns for non-empty results.',\n );\n }\n\n return results.map((row, index) => {\n if (row.length !== columns.length) {\n throw new Error(\n `PostHog HogQLQuery result row ${index} does not match the column count.`,\n );\n }\n return Object.fromEntries(\n columns.map((column, columnIndex) => [column, row[columnIndex]]),\n );\n });\n}\n", "import { z } from 'zod';\n\nimport type { SQLScopeErrorPayload } from '../../agents/exceptions.ts';\nimport { buildScopeParseErrorPayload } from '../../sql-scope-error.ts';\nimport type {\n SqlPolicyAnalyzer,\n SqlPolicyContext,\n SqlPolicyViolation,\n} from '../sql-policy.ts';\nimport type {\n PostHogMetadataResponse,\n PostHogNotice,\n PostHogTransport,\n} from './types.ts';\n\nconst postHogNotice = z.object({\n start: z.number().nullish(),\n end: z.number().nullish(),\n message: z.string(),\n fix: z.string().nullish(),\n});\n\nexport class PostHogSqlPolicyAnalyzer implements SqlPolicyAnalyzer {\n readonly #transport: PostHogTransport;\n\n constructor(transport: PostHogTransport) {\n this.#transport = transport;\n }\n\n async analyze(\n sql: string,\n context: SqlPolicyContext,\n ): Promise<SqlPolicyViolation | null> {\n const response = await this.#transport.query({\n query: { kind: 'HogQLMetadata', language: 'hogQL', query: sql },\n name: 'deepagents_text2sql_validate',\n });\n let metadata: PostHogMetadataResponse;\n try {\n metadata = validateMetadataResponse(response);\n } catch (error) {\n return {\n kind: 'scope',\n payload: buildScopeParseErrorPayload(sql, 'hogql', error),\n };\n }\n\n const allowedEntities = await context.resolveAllowedEntities();\n const allowed = new Set(allowedEntities.map(caseFold));\n const rejected = metadata.table_names.filter(\n (entity) => !allowed.has(caseFold(entity)),\n );\n\n return rejected.length > 0\n ? {\n kind: 'scope',\n payload: buildOutOfScopePayload(sql, rejected, [...allowedEntities]),\n }\n : null;\n }\n}\n\nfunction validateMetadataResponse(value: unknown): PostHogMetadataResponse {\n if (!isRecord(value)) {\n throw new Error('PostHog HogQLMetadata response must be a JSON object.');\n }\n if (typeof value.isValid !== 'boolean') {\n throw new Error('PostHog HogQLMetadata response has no isValid boolean.');\n }\n\n const errors = validateNotices(value.errors, 'errors');\n const warnings = validateNotices(value.warnings, 'warnings');\n const notices = validateNotices(value.notices, 'notices');\n const tableNames = validateTableNames(value.table_names);\n\n if (!value.isValid || errors.length > 0) {\n const reason = errors.map((notice) => notice.message).join('; ');\n throw new Error(\n reason\n ? `PostHog rejected the HogQL query: ${reason}`\n : 'PostHog rejected the HogQL query as invalid.',\n );\n }\n\n return {\n isValid: true,\n errors,\n warnings,\n notices,\n table_names: tableNames,\n };\n}\n\nfunction validateNotices(value: unknown, name: string): PostHogNotice[] {\n if (!Array.isArray(value)) {\n throw new Error(`PostHog HogQLMetadata response has no ${name} array.`);\n }\n const notices = z.array(postHogNotice).safeParse(value);\n if (!notices.success) {\n throw new Error(\n `PostHog HogQLMetadata response has an invalid ${name} notice.`,\n );\n }\n return notices.data;\n}\n\nfunction validateTableNames(value: unknown): string[] {\n if (\n !Array.isArray(value) ||\n value.some((name) => typeof name !== 'string' || name.length === 0)\n ) {\n throw new Error('PostHog HogQLMetadata response has invalid table_names.');\n }\n return [...new Set(value)];\n}\n\nfunction buildOutOfScopePayload(\n sql: string,\n referencedEntities: string[],\n allowedEntities: string[],\n): SQLScopeErrorPayload {\n return {\n error: `Query references entities outside grounded scope: ${referencedEntities.join(', ')}`,\n error_type: 'OUT_OF_SCOPE',\n suggestion:\n 'Restrict the query to grounded tables/views or expand grounding to include the referenced entities.',\n sql_attempted: sql,\n referenced_entities: referencedEntities,\n allowed_entities: allowedEntities,\n };\n}\n\nfunction caseFold(value: string): string {\n return value.toLowerCase();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n", "import type { SQLScopeErrorPayload } from './agents/exceptions.ts';\n\nexport function buildScopeParseErrorPayload(\n sql: string,\n parserDialect: string,\n error: unknown,\n): SQLScopeErrorPayload {\n const parserError =\n error instanceof Error ? error.message : String(error ?? 'Unknown error');\n\n return {\n error: `SQL scope analysis failed before validation/execution: ${parserError}`,\n error_type: 'SQL_SCOPE_PARSE_ERROR',\n suggestion:\n 'Rewrite the query into simpler SQL that can be analyzed safely, or extend parser coverage for this dialect feature.',\n sql_attempted: sql,\n parser_dialect: parserDialect,\n parser_error: parserError,\n };\n}\n", "import { z } from 'zod';\n\nimport type { Filter, Relationship, Table } from '../adapter.ts';\nimport {\n AbstractGrounding,\n type ColumnsFilter,\n applyColumnFilter,\n} from '../groundings/abstract.grounding.ts';\nimport type { GroundingContext } from '../groundings/context.ts';\nimport type { View } from '../groundings/view.grounding.ts';\nimport type { PostHog } from './posthog.ts';\nimport type {\n PostHogDatabaseFieldType,\n PostHogDatabaseTable,\n PostHogDatabaseTableType,\n PostHogSchemaJoin,\n PostHogSchemaResponse,\n} from './types.ts';\n\n// The DatabaseSchemaQuery response, modeled on PostHog's DatabaseSchemaQueryResponse.\n// Only the members this grounding reads are checked; the rest is dropped.\n\nconst scalarFieldType = z.enum([\n 'integer',\n 'float',\n 'decimal',\n 'string',\n 'datetime',\n 'date',\n 'boolean',\n 'array',\n 'json',\n]);\n\nconst SCALAR_FIELD_TYPES = new Set<PostHogDatabaseFieldType>(\n scalarFieldType.options,\n);\n\nconst viewTableType = z.enum([\n 'view',\n 'materialized_view',\n 'managed_view',\n 'endpoint',\n]);\n\nconst VIEW_TYPES = new Set<PostHogDatabaseTableType>(viewTableType.options);\n\nconst postHogDatabaseField = z.object({\n name: z.string(),\n hogql_value: z.string(),\n type: z.enum([\n ...scalarFieldType.options,\n 'lazy_table',\n 'virtual_table',\n 'field_traverser',\n 'expression',\n 'view',\n 'materialized_view',\n 'unknown',\n ]),\n schema_valid: z.boolean(),\n});\n\nconst tableMembers = {\n id: z.string(),\n name: z.string(),\n fields: z.record(z.string(), postHogDatabaseField),\n row_count: z.number().nonnegative().nullish(),\n};\n\nconst postHogDatabaseTable = z.discriminatedUnion('type', [\n z.object({\n ...tableMembers,\n type: z.enum(['posthog', 'system', 'data_warehouse', 'batch_export']),\n }),\n z.object({\n ...tableMembers,\n type: viewTableType,\n query: z.object({ query: z.string() }),\n }),\n]);\n\nconst postHogSchemaJoin = z.object({\n source_table_name: z.string().nullish(),\n source_table_key: z.string().nullish(),\n joining_table_name: z.string().nullish(),\n joining_table_key: z.string().nullish(),\n field_name: z.string().nullish(),\n});\n\nconst postHogSchemaResponse = z.object({\n tables: z.record(z.string(), postHogDatabaseTable),\n joins: z.array(postHogSchemaJoin),\n});\n\nexport interface PostHogSchemaGroundingConfig {\n filter?: Filter;\n columns?: ColumnsFilter;\n includeSystem?: boolean;\n}\n\nexport class PostHogSchemaGrounding extends AbstractGrounding {\n readonly #adapter: PostHog;\n readonly #config: PostHogSchemaGroundingConfig;\n\n constructor(adapter: PostHog, config: PostHogSchemaGroundingConfig = {}) {\n super('schema', 'tables');\n this.#adapter = adapter;\n this.#config = config;\n }\n\n override async execute(ctx: GroundingContext): Promise<void> {\n const response = validateSchemaResponse(\n await this.#adapter.query({\n query: { kind: 'DatabaseSchemaQuery' },\n name: 'deepagents_text2sql_schema',\n }),\n );\n const entities = Object.entries(response.tables).filter(\n ([name, table]) =>\n (this.#config.includeSystem || table.type !== 'system') &&\n matchesFilter(name, this.#config.filter),\n );\n\n const tables: Table[] = [];\n const views: View[] = [];\n for (const [index, [name, table]] of entities.entries()) {\n ctx.onProgress({\n type: 'phase:progress',\n phase: 'tables',\n table: name,\n message: `Loading PostHog schema entity ${name}...`,\n current: index + 1,\n total: entities.length,\n });\n const columns = readColumns(name, table);\n if (VIEW_TYPES.has(table.type)) {\n views.push(\n applyColumnFilter(\n {\n name,\n columns,\n ...(table.query?.query ? { definition: table.query.query } : {}),\n },\n this.#config.columns,\n ),\n );\n } else {\n tables.push(\n applyColumnFilter(\n {\n name,\n columns,\n ...(typeof table.row_count === 'number'\n ? { rowCount: table.row_count }\n : {}),\n },\n this.#config.columns,\n ),\n );\n }\n }\n\n ctx.tables.push(...tables);\n ctx.views.push(...views);\n ctx.relationships.push(...readRelationships(response.joins, tables, views));\n }\n\n override async contributeEntities(ctx: GroundingContext): Promise<void> {\n await this.execute(ctx);\n }\n}\n\nfunction validateSchemaResponse(value: unknown): PostHogSchemaResponse {\n const response = postHogSchemaResponse.safeParse(value);\n if (!response.success) {\n throw new Error(\n `PostHog DatabaseSchemaQuery response is malformed:\\n${z.prettifyError(response.error)}`,\n );\n }\n return response.data;\n}\n\nfunction readColumns(\n tableName: string,\n table: PostHogDatabaseTable,\n): Array<{ name: string; type: string }> {\n const columns: Array<{ name: string; type: string }> = [];\n const names = new Set<string>();\n for (const field of Object.values(table.fields)) {\n if (!field.schema_valid || !SCALAR_FIELD_TYPES.has(field.type)) continue;\n const name = field.hogql_value.trim();\n if (!name) {\n throw new Error(`PostHog schema table ${tableName} has an empty field.`);\n }\n if (names.has(name)) {\n throw new Error(\n `PostHog schema table ${tableName} has duplicate HogQL field ${name}.`,\n );\n }\n names.add(name);\n columns.push({ name, type: field.type });\n }\n return columns;\n}\n\nfunction readRelationships(\n joins: PostHogSchemaJoin[],\n tables: Table[],\n views: View[],\n): Relationship[] {\n const entityColumns = new Map(\n [...tables, ...views].map((entity) => [\n entity.name,\n new Set(entity.columns.map((column) => column.name)),\n ]),\n );\n return joins.flatMap((join) => {\n const sourceTable = readNonEmptyString(join.source_table_name);\n const sourceKey = readNonEmptyString(join.source_table_key);\n const joiningTable = readNonEmptyString(join.joining_table_name);\n const joiningKey = readNonEmptyString(join.joining_table_key);\n if (\n !sourceTable ||\n !sourceKey ||\n !joiningTable ||\n !joiningKey ||\n !entityColumns.get(sourceTable)?.has(sourceKey) ||\n !entityColumns.get(joiningTable)?.has(joiningKey)\n ) {\n return [];\n }\n return [\n {\n table: sourceTable,\n from: [sourceKey],\n referenced_table: joiningTable,\n to: [joiningKey],\n },\n ];\n });\n}\n\nfunction matchesFilter(name: string, filter?: Filter): boolean {\n if (!filter) return true;\n if (Array.isArray(filter)) return filter.includes(name);\n if (filter instanceof RegExp) {\n filter.lastIndex = 0;\n return filter.test(name);\n }\n return filter(name);\n}\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n", "import type {\n CreatePostHogTransportOptions,\n PostHogPropertyDefinitionType,\n PostHogQueryRequest,\n PostHogTransport,\n} from './types.ts';\n\nconst DEFAULT_TIMEOUT_MS = 45_000;\nconst PAGE_SIZE = 100;\n\nexport class PostHogApiError extends Error {\n readonly status: number;\n readonly code?: string;\n readonly detail?: string;\n readonly retryAfterMs?: number;\n\n constructor(options: {\n status: number;\n message: string;\n code?: string;\n detail?: string;\n retryAfterMs?: number;\n }) {\n super(options.message);\n this.name = 'PostHogApiError';\n this.status = options.status;\n this.code = options.code;\n this.detail = options.detail;\n this.retryAfterMs = options.retryAfterMs;\n }\n}\n\nexport function createPostHogTransport(\n options: CreatePostHogTransportOptions,\n): PostHogTransport {\n const origin = parseOrigin(options.host);\n const projectId = String(options.projectId ?? '').trim();\n if (!projectId) throw new Error('PostHog transport requires a projectId.');\n if (typeof options.getAccessToken !== 'function') {\n throw new Error('PostHog transport requires getAccessToken().');\n }\n\n const fetchImpl = options.fetch ?? globalThis.fetch;\n if (typeof fetchImpl !== 'function') {\n throw new Error('PostHog transport requires a fetch implementation.');\n }\n\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n if (!Number.isInteger(timeoutMs) || timeoutMs <= 0) {\n throw new Error('PostHog transport timeoutMs must be a positive integer.');\n }\n\n const projectPath = `/api/projects/${encodeURIComponent(projectId)}`;\n\n const requestJson = async (\n path: string,\n init: Omit<RequestInit, 'headers' | 'redirect' | 'signal'> = {},\n ): Promise<unknown> => {\n const token = String(await options.getAccessToken()).trim();\n if (!token) throw new Error('PostHog getAccessToken() returned no token.');\n\n const signal = AbortSignal.timeout(timeoutMs);\n let response: Response;\n try {\n response = await fetchImpl(new URL(path, origin), {\n ...init,\n headers: {\n Accept: 'application/json',\n Authorization: `Bearer ${token}`,\n ...(init.body === undefined\n ? {}\n : { 'Content-Type': 'application/json' }),\n },\n redirect: 'error',\n signal,\n });\n } catch {\n if (signal.aborted) {\n throw new Error(`PostHog request timed out after ${timeoutMs}ms.`);\n }\n throw new Error('PostHog request failed before receiving a response.');\n }\n\n let body: string;\n try {\n body = await response.text();\n } catch {\n if (signal.aborted) {\n throw new Error(`PostHog request timed out after ${timeoutMs}ms.`);\n }\n throw new Error('PostHog response body could not be read.');\n }\n const parsed = parseJson(body);\n if (!response.ok) {\n throw apiError(response, parsed, token);\n }\n if (parsed === undefined) {\n throw new Error('PostHog returned an empty or non-JSON response.');\n }\n return parsed;\n };\n\n const listDefinitions = async (\n resource: 'event_definitions' | 'property_definitions',\n parameters: URLSearchParams,\n ): Promise<unknown[]> => {\n const definitions: unknown[] = [];\n let offset = 0;\n\n for (;;) {\n const pageParameters = new URLSearchParams(parameters);\n pageParameters.set('limit', String(PAGE_SIZE));\n pageParameters.set('offset', String(offset));\n const page = asRecord(\n await requestJson(\n `${projectPath}/${resource}/?${pageParameters.toString()}`,\n ),\n `PostHog ${resource} response`,\n );\n if (!Array.isArray(page.results)) {\n throw new Error(`PostHog ${resource} response has no results array.`);\n }\n if (page.next !== null && typeof page.next !== 'string') {\n throw new Error(\n `PostHog ${resource} response has an invalid next page.`,\n );\n }\n\n definitions.push(...page.results);\n if (page.next === null) return definitions;\n if (page.results.length === 0) {\n throw new Error(\n `PostHog ${resource} returned an empty non-final page.`,\n );\n }\n offset += page.results.length;\n }\n };\n\n return {\n async query(request: PostHogQueryRequest): Promise<unknown> {\n return requestJson(`${projectPath}/query/`, {\n method: 'POST',\n body: JSON.stringify(request),\n });\n },\n\n listEventDefinitions(): Promise<unknown[]> {\n return listDefinitions(\n 'event_definitions',\n new URLSearchParams({\n exclude_hidden: 'true',\n exclude_stale: 'true',\n }),\n );\n },\n\n listPropertyDefinitions({\n type,\n groupTypeIndex,\n }: {\n type: PostHogPropertyDefinitionType;\n groupTypeIndex?: number;\n }): Promise<unknown[]> {\n if (\n type === 'group' &&\n (groupTypeIndex === undefined ||\n !Number.isInteger(groupTypeIndex) ||\n groupTypeIndex < 0)\n ) {\n throw new Error(\n 'PostHog group property definitions require a non-negative integer groupTypeIndex.',\n );\n }\n const parameters = new URLSearchParams({\n type,\n exclude_hidden: 'true',\n exclude_restricted: 'true',\n });\n if (type === 'group') {\n parameters.set('group_type_index', String(groupTypeIndex));\n }\n return listDefinitions('property_definitions', parameters);\n },\n };\n}\n\nfunction parseOrigin(host: string): URL {\n let url: URL;\n try {\n url = new URL(host);\n } catch {\n throw new Error('PostHog host must be an absolute URL.');\n }\n\n const isLoopback = ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname);\n if (url.protocol !== 'https:' && !(url.protocol === 'http:' && isLoopback)) {\n throw new Error(\n 'PostHog host must use HTTPS except for loopback development hosts.',\n );\n }\n if (url.username || url.password || url.search || url.hash) {\n throw new Error(\n 'PostHog host must be an origin without credentials or query data.',\n );\n }\n if (url.pathname !== '/' && url.pathname !== '') {\n throw new Error('PostHog host must not include a path.');\n }\n url.pathname = '/';\n return url;\n}\n\nfunction parseJson(body: string): unknown | undefined {\n if (!body.trim()) return undefined;\n try {\n return JSON.parse(body);\n } catch {\n return undefined;\n }\n}\n\nfunction apiError(\n response: Response,\n body: unknown,\n accessToken: string,\n): PostHogApiError {\n const record = isRecord(body) ? body : undefined;\n const detail = redact(\n readString(record?.detail) ?? readString(record?.error),\n accessToken,\n );\n const code = redact(readString(record?.code), accessToken);\n const retryAfterMs = parseRetryAfter(response.headers.get('retry-after'));\n return new PostHogApiError({\n status: response.status,\n message: detail\n ? `PostHog API returned ${response.status}: ${detail}`\n : `PostHog API returned HTTP ${response.status}.`,\n code,\n detail,\n retryAfterMs,\n });\n}\n\nfunction parseRetryAfter(value: string | null): number | undefined {\n if (value === null) return undefined;\n const seconds = Number(value);\n if (Number.isFinite(seconds)) {\n return seconds >= 0 ? seconds * 1_000 : undefined;\n }\n const date = Date.parse(value);\n return Number.isFinite(date) ? Math.max(0, date - Date.now()) : undefined;\n}\n\nfunction asRecord(value: unknown, label: string): Record<string, unknown> {\n if (!isRecord(value)) throw new Error(`${label} must be a JSON object.`);\n return value;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction redact(value: string | undefined, secret: string): string | undefined {\n return value?.replaceAll(secret, '[REDACTED]');\n}\n", "import { groundingFor } from '../adapter.ts';\nimport {\n PostHogDefinitionsGrounding,\n type PostHogDefinitionsGroundingConfig,\n} from './definitions.posthog.grounding.ts';\nimport { PostHogInfoGrounding } from './info.posthog.grounding.ts';\nimport { PostHog } from './posthog.ts';\nimport {\n PostHogSchemaGrounding,\n type PostHogSchemaGroundingConfig,\n} from './schema.posthog.grounding.ts';\n\nexport * from './definitions.posthog.grounding.ts';\nexport * from './posthog.sql-policy.ts';\nexport * from './posthog.ts';\nexport * from './schema.posthog.grounding.ts';\nexport * from './transport.ts';\nexport * from './types.ts';\n\nexport function info() {\n return () => new PostHogInfoGrounding();\n}\n\nexport function schema(config: PostHogSchemaGroundingConfig = {}) {\n return groundingFor(\n PostHog,\n (adapter) => new PostHogSchemaGrounding(adapter, config),\n );\n}\n\nexport function definitions(config: PostHogDefinitionsGroundingConfig = {}) {\n return groundingFor(\n PostHog,\n (adapter) => new PostHogDefinitionsGrounding(adapter, config),\n );\n}\n\nexport default {\n PostHog,\n definitions,\n info,\n schema,\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["column", "c", "schema", "z", "z", "index", "definitions", "z", "z", "z", "z", "schema", "table", "column", "index", "z", "z", "table", "matchesFilter", "index", "column", "definitions", "isRecord"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"posthog.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/posthog/posthog.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,KAAK,EACV,mBAAmB,EAEnB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;CAC3B;AAQD,qBAAa,OAAQ,SAAQ,OAAO;;IAClC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,SAAkB,SAAS,EAAE,WAAW,EAAE,CAAC;IAC3C,SAAkB,aAAa,YAAa;IAC5C,SAAkB,aAAa,WAAc;IAC7C,SAAkB,iBAAiB,gBAAgB;gBAEvC,OAAO,EAAE,qBAAqB;IAkB3B,OAAO,CACpB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAQtB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAIlE,YAAY,IAAI,SAAS;cAIf,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAIpD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI7B,oBAAoB,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAC7B,KAAK,EAAE,MAAM,GACZ,MAAM;IAWH,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;CAmB5D"}
1
+ {"version":3,"file":"posthog.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/posthog/posthog.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;CAC3B;AAQD,qBAAa,OAAQ,SAAQ,OAAO;;IAClC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,SAAkB,SAAS,EAAE,WAAW,EAAE,CAAC;IAC3C,SAAkB,aAAa,YAAa;IAC5C,SAAkB,aAAa,WAAc;IAC7C,SAAkB,iBAAiB,gBAAgB;gBAEvC,OAAO,EAAE,qBAAqB;IAkB3B,OAAO,CACpB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAQtB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAIlE,YAAY,IAAI,SAAS;cAIf,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAIpD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI7B,oBAAoB,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAC7B,KAAK,EAAE,MAAM,GACZ,MAAM;IAWH,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;CAmB5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.posthog.grounding.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/posthog/schema.posthog.grounding.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAuB,MAAM,eAAe,CAAC;AACjE,OAAO,EACL,iBAAiB,EACjB,KAAK,aAAa,EAEnB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAsF5C,MAAM,WAAW,4BAA4B;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,sBAAuB,SAAQ,iBAAiB;;gBAI/C,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,4BAAiC;IAMxD,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyD7C,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxE"}
1
+ {"version":3,"file":"schema.posthog.grounding.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/posthog/schema.posthog.grounding.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAuB,MAAM,eAAe,CAAC;AACjE,OAAO,EACL,iBAAiB,EACjB,KAAK,aAAa,EAEnB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAqF5C,MAAM,WAAW,4BAA4B;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,sBAAuB,SAAQ,iBAAiB;;gBAI/C,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,4BAAiC;IAMxD,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyD7C,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxE"}
@@ -1590,9 +1590,6 @@ var Sqlite = class extends Adapter {
1590
1590
  return JSON.stringify(formatError(sql, error));
1591
1591
  }
1592
1592
  }
1593
- #quoteIdentifier(name) {
1594
- return `'${name.replace(/'/g, "''")}'`;
1595
- }
1596
1593
  async queryRows(sql) {
1597
1594
  return this.rowsFrom(await this.#options.execute(sql), ["rows"]);
1598
1595
  }
@@ -1889,7 +1886,10 @@ function loadData(db, sheet) {
1889
1886
  }
1890
1887
  db.exec("COMMIT");
1891
1888
  } catch (error) {
1892
- db.exec("ROLLBACK");
1889
+ try {
1890
+ db.exec("ROLLBACK");
1891
+ } catch {
1892
+ }
1893
1893
  throw error;
1894
1894
  }
1895
1895
  }