narai-primitives 2.0.0-rc.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.
- package/LICENSE +21 -0
- package/README.md +64 -0
- package/dist/config/bootstrap.d.ts +28 -0
- package/dist/config/bootstrap.d.ts.map +1 -0
- package/dist/config/bootstrap.js +80 -0
- package/dist/config/bootstrap.js.map +1 -0
- package/dist/config/index.d.ts +13 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +12 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/load.d.ts +37 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +99 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/resolve.d.ts +23 -0
- package/dist/config/resolve.d.ts.map +1 -0
- package/dist/config/resolve.js +198 -0
- package/dist/config/resolve.js.map +1 -0
- package/dist/config/secrets.d.ts +20 -0
- package/dist/config/secrets.d.ts.map +1 -0
- package/dist/config/secrets.js +43 -0
- package/dist/config/secrets.js.map +1 -0
- package/dist/config/types.d.ts +104 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +11 -0
- package/dist/config/types.js.map +1 -0
- package/dist/connectors/aws/cli.d.ts +3 -0
- package/dist/connectors/aws/cli.d.ts.map +1 -0
- package/dist/connectors/aws/cli.js +27 -0
- package/dist/connectors/aws/cli.js.map +1 -0
- package/dist/connectors/aws/index.d.ts +27 -0
- package/dist/connectors/aws/index.d.ts.map +1 -0
- package/dist/connectors/aws/index.js +281 -0
- package/dist/connectors/aws/index.js.map +1 -0
- package/dist/connectors/aws/lib/aws_client.d.ts +140 -0
- package/dist/connectors/aws/lib/aws_client.d.ts.map +1 -0
- package/dist/connectors/aws/lib/aws_client.js +196 -0
- package/dist/connectors/aws/lib/aws_client.js.map +1 -0
- package/dist/connectors/aws/lib/aws_error.d.ts +10 -0
- package/dist/connectors/aws/lib/aws_error.d.ts.map +1 -0
- package/dist/connectors/aws/lib/aws_error.js +15 -0
- package/dist/connectors/aws/lib/aws_error.js.map +1 -0
- package/dist/connectors/confluence/cli.d.ts +3 -0
- package/dist/connectors/confluence/cli.d.ts.map +1 -0
- package/dist/connectors/confluence/cli.js +24 -0
- package/dist/connectors/confluence/cli.js.map +1 -0
- package/dist/connectors/confluence/index.d.ts +15 -0
- package/dist/connectors/confluence/index.d.ts.map +1 -0
- package/dist/connectors/confluence/index.js +295 -0
- package/dist/connectors/confluence/index.js.map +1 -0
- package/dist/connectors/confluence/lib/confluence_client.d.ts +135 -0
- package/dist/connectors/confluence/lib/confluence_client.d.ts.map +1 -0
- package/dist/connectors/confluence/lib/confluence_client.js +329 -0
- package/dist/connectors/confluence/lib/confluence_client.js.map +1 -0
- package/dist/connectors/confluence/lib/confluence_error.d.ts +13 -0
- package/dist/connectors/confluence/lib/confluence_error.d.ts.map +1 -0
- package/dist/connectors/confluence/lib/confluence_error.js +19 -0
- package/dist/connectors/confluence/lib/confluence_error.js.map +1 -0
- package/dist/connectors/db/cli.d.ts +5 -0
- package/dist/connectors/db/cli.d.ts.map +1 -0
- package/dist/connectors/db/cli.js +34 -0
- package/dist/connectors/db/cli.js.map +1 -0
- package/dist/connectors/db/config.d.ts +18 -0
- package/dist/connectors/db/config.d.ts.map +1 -0
- package/dist/connectors/db/config.js +142 -0
- package/dist/connectors/db/config.js.map +1 -0
- package/dist/connectors/db/connector.d.ts +31 -0
- package/dist/connectors/db/connector.d.ts.map +1 -0
- package/dist/connectors/db/connector.js +175 -0
- package/dist/connectors/db/connector.js.map +1 -0
- package/dist/connectors/db/dispatcher.d.ts +36 -0
- package/dist/connectors/db/dispatcher.d.ts.map +1 -0
- package/dist/connectors/db/dispatcher.js +597 -0
- package/dist/connectors/db/dispatcher.js.map +1 -0
- package/dist/connectors/db/index.d.ts +22 -0
- package/dist/connectors/db/index.d.ts.map +1 -0
- package/dist/connectors/db/index.js +26 -0
- package/dist/connectors/db/index.js.map +1 -0
- package/dist/connectors/db/lib/audit.d.ts +32 -0
- package/dist/connectors/db/lib/audit.d.ts.map +1 -0
- package/dist/connectors/db/lib/audit.js +130 -0
- package/dist/connectors/db/lib/audit.js.map +1 -0
- package/dist/connectors/db/lib/connection.d.ts +61 -0
- package/dist/connectors/db/lib/connection.d.ts.map +1 -0
- package/dist/connectors/db/lib/connection.js +326 -0
- package/dist/connectors/db/lib/connection.js.map +1 -0
- package/dist/connectors/db/lib/credentials.d.ts +60 -0
- package/dist/connectors/db/lib/credentials.d.ts.map +1 -0
- package/dist/connectors/db/lib/credentials.js +117 -0
- package/dist/connectors/db/lib/credentials.js.map +1 -0
- package/dist/connectors/db/lib/drivers/base.d.ts +83 -0
- package/dist/connectors/db/lib/drivers/base.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/base.js +46 -0
- package/dist/connectors/db/lib/drivers/base.js.map +1 -0
- package/dist/connectors/db/lib/drivers/dynamodb.d.ts +108 -0
- package/dist/connectors/db/lib/drivers/dynamodb.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/dynamodb.js +468 -0
- package/dist/connectors/db/lib/drivers/dynamodb.js.map +1 -0
- package/dist/connectors/db/lib/drivers/mongodb.d.ts +60 -0
- package/dist/connectors/db/lib/drivers/mongodb.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/mongodb.js +371 -0
- package/dist/connectors/db/lib/drivers/mongodb.js.map +1 -0
- package/dist/connectors/db/lib/drivers/mysql.d.ts +45 -0
- package/dist/connectors/db/lib/drivers/mysql.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/mysql.js +265 -0
- package/dist/connectors/db/lib/drivers/mysql.js.map +1 -0
- package/dist/connectors/db/lib/drivers/oracle.d.ts +53 -0
- package/dist/connectors/db/lib/drivers/oracle.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/oracle.js +350 -0
- package/dist/connectors/db/lib/drivers/oracle.js.map +1 -0
- package/dist/connectors/db/lib/drivers/postgresql.d.ts +65 -0
- package/dist/connectors/db/lib/drivers/postgresql.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/postgresql.js +294 -0
- package/dist/connectors/db/lib/drivers/postgresql.js.map +1 -0
- package/dist/connectors/db/lib/drivers/register.d.ts +16 -0
- package/dist/connectors/db/lib/drivers/register.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/register.js +111 -0
- package/dist/connectors/db/lib/drivers/register.js.map +1 -0
- package/dist/connectors/db/lib/drivers/sqlite.d.ts +11 -0
- package/dist/connectors/db/lib/drivers/sqlite.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/sqlite.js +147 -0
- package/dist/connectors/db/lib/drivers/sqlite.js.map +1 -0
- package/dist/connectors/db/lib/drivers/sqlserver.d.ts +58 -0
- package/dist/connectors/db/lib/drivers/sqlserver.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/sqlserver.js +274 -0
- package/dist/connectors/db/lib/drivers/sqlserver.js.map +1 -0
- package/dist/connectors/db/lib/environments.d.ts +68 -0
- package/dist/connectors/db/lib/environments.d.ts.map +1 -0
- package/dist/connectors/db/lib/environments.js +53 -0
- package/dist/connectors/db/lib/environments.js.map +1 -0
- package/dist/connectors/db/lib/index.d.ts +28 -0
- package/dist/connectors/db/lib/index.d.ts.map +1 -0
- package/dist/connectors/db/lib/index.js +30 -0
- package/dist/connectors/db/lib/index.js.map +1 -0
- package/dist/connectors/db/lib/plugin_config.d.ts +64 -0
- package/dist/connectors/db/lib/plugin_config.d.ts.map +1 -0
- package/dist/connectors/db/lib/plugin_config.js +287 -0
- package/dist/connectors/db/lib/plugin_config.js.map +1 -0
- package/dist/connectors/db/lib/policy.d.ts +162 -0
- package/dist/connectors/db/lib/policy.d.ts.map +1 -0
- package/dist/connectors/db/lib/policy.js +581 -0
- package/dist/connectors/db/lib/policy.js.map +1 -0
- package/dist/connectors/db/lib/query.d.ts +22 -0
- package/dist/connectors/db/lib/query.d.ts.map +1 -0
- package/dist/connectors/db/lib/query.js +93 -0
- package/dist/connectors/db/lib/query.js.map +1 -0
- package/dist/connectors/db/lib/schema.d.ts +13 -0
- package/dist/connectors/db/lib/schema.d.ts.map +1 -0
- package/dist/connectors/db/lib/schema.js +80 -0
- package/dist/connectors/db/lib/schema.js.map +1 -0
- package/dist/connectors/gcp/cli.d.ts +3 -0
- package/dist/connectors/gcp/cli.d.ts.map +1 -0
- package/dist/connectors/gcp/cli.js +24 -0
- package/dist/connectors/gcp/cli.js.map +1 -0
- package/dist/connectors/gcp/index.d.ts +24 -0
- package/dist/connectors/gcp/index.d.ts.map +1 -0
- package/dist/connectors/gcp/index.js +205 -0
- package/dist/connectors/gcp/index.js.map +1 -0
- package/dist/connectors/gcp/lib/gcp_client.d.ts +88 -0
- package/dist/connectors/gcp/lib/gcp_client.d.ts.map +1 -0
- package/dist/connectors/gcp/lib/gcp_client.js +434 -0
- package/dist/connectors/gcp/lib/gcp_client.js.map +1 -0
- package/dist/connectors/gcp/lib/gcp_error.d.ts +10 -0
- package/dist/connectors/gcp/lib/gcp_error.d.ts.map +1 -0
- package/dist/connectors/gcp/lib/gcp_error.js +15 -0
- package/dist/connectors/gcp/lib/gcp_error.js.map +1 -0
- package/dist/connectors/github/cli.d.ts +3 -0
- package/dist/connectors/github/cli.d.ts.map +1 -0
- package/dist/connectors/github/cli.js +23 -0
- package/dist/connectors/github/cli.js.map +1 -0
- package/dist/connectors/github/index.d.ts +23 -0
- package/dist/connectors/github/index.d.ts.map +1 -0
- package/dist/connectors/github/index.js +462 -0
- package/dist/connectors/github/index.js.map +1 -0
- package/dist/connectors/github/lib/github_client.d.ts +181 -0
- package/dist/connectors/github/lib/github_client.d.ts.map +1 -0
- package/dist/connectors/github/lib/github_client.js +383 -0
- package/dist/connectors/github/lib/github_client.js.map +1 -0
- package/dist/connectors/github/lib/github_error.d.ts +11 -0
- package/dist/connectors/github/lib/github_error.d.ts.map +1 -0
- package/dist/connectors/github/lib/github_error.js +17 -0
- package/dist/connectors/github/lib/github_error.js.map +1 -0
- package/dist/connectors/jira/cli.d.ts +3 -0
- package/dist/connectors/jira/cli.d.ts.map +1 -0
- package/dist/connectors/jira/cli.js +24 -0
- package/dist/connectors/jira/cli.js.map +1 -0
- package/dist/connectors/jira/index.d.ts +13 -0
- package/dist/connectors/jira/index.d.ts.map +1 -0
- package/dist/connectors/jira/index.js +287 -0
- package/dist/connectors/jira/index.js.map +1 -0
- package/dist/connectors/jira/lib/adf.d.ts +25 -0
- package/dist/connectors/jira/lib/adf.d.ts.map +1 -0
- package/dist/connectors/jira/lib/adf.js +105 -0
- package/dist/connectors/jira/lib/adf.js.map +1 -0
- package/dist/connectors/jira/lib/jira_client.d.ts +143 -0
- package/dist/connectors/jira/lib/jira_client.d.ts.map +1 -0
- package/dist/connectors/jira/lib/jira_client.js +355 -0
- package/dist/connectors/jira/lib/jira_client.js.map +1 -0
- package/dist/connectors/jira/lib/jira_error.d.ts +11 -0
- package/dist/connectors/jira/lib/jira_error.d.ts.map +1 -0
- package/dist/connectors/jira/lib/jira_error.js +17 -0
- package/dist/connectors/jira/lib/jira_error.js.map +1 -0
- package/dist/connectors/notion/cli.d.ts +3 -0
- package/dist/connectors/notion/cli.d.ts.map +1 -0
- package/dist/connectors/notion/cli.js +22 -0
- package/dist/connectors/notion/cli.js.map +1 -0
- package/dist/connectors/notion/index.d.ts +20 -0
- package/dist/connectors/notion/index.d.ts.map +1 -0
- package/dist/connectors/notion/index.js +317 -0
- package/dist/connectors/notion/index.js.map +1 -0
- package/dist/connectors/notion/lib/notion_client.d.ts +117 -0
- package/dist/connectors/notion/lib/notion_client.d.ts.map +1 -0
- package/dist/connectors/notion/lib/notion_client.js +377 -0
- package/dist/connectors/notion/lib/notion_client.js.map +1 -0
- package/dist/connectors/notion/lib/notion_error.d.ts +12 -0
- package/dist/connectors/notion/lib/notion_error.d.ts.map +1 -0
- package/dist/connectors/notion/lib/notion_error.js +18 -0
- package/dist/connectors/notion/lib/notion_error.js.map +1 -0
- package/dist/hub/cli.d.ts +4 -0
- package/dist/hub/cli.d.ts.map +1 -0
- package/dist/hub/cli.js +93 -0
- package/dist/hub/cli.js.map +1 -0
- package/dist/hub/dispatch.d.ts +33 -0
- package/dist/hub/dispatch.d.ts.map +1 -0
- package/dist/hub/dispatch.js +297 -0
- package/dist/hub/dispatch.js.map +1 -0
- package/dist/hub/index.d.ts +9 -0
- package/dist/hub/index.d.ts.map +1 -0
- package/dist/hub/index.js +215 -0
- package/dist/hub/index.js.map +1 -0
- package/dist/hub/plan.d.ts +24 -0
- package/dist/hub/plan.d.ts.map +1 -0
- package/dist/hub/plan.js +103 -0
- package/dist/hub/plan.js.map +1 -0
- package/dist/hub/types.d.ts +65 -0
- package/dist/hub/types.d.ts.map +1 -0
- package/dist/hub/types.js +3 -0
- package/dist/hub/types.js.map +1 -0
- package/dist/toolkit/_optional.d.ts +14 -0
- package/dist/toolkit/_optional.d.ts.map +1 -0
- package/dist/toolkit/_optional.js +96 -0
- package/dist/toolkit/_optional.js.map +1 -0
- package/dist/toolkit/agent_cli.d.ts +33 -0
- package/dist/toolkit/agent_cli.d.ts.map +1 -0
- package/dist/toolkit/agent_cli.js +62 -0
- package/dist/toolkit/agent_cli.js.map +1 -0
- package/dist/toolkit/agent_resolver.d.ts +46 -0
- package/dist/toolkit/agent_resolver.d.ts.map +1 -0
- package/dist/toolkit/agent_resolver.js +78 -0
- package/dist/toolkit/agent_resolver.js.map +1 -0
- package/dist/toolkit/audit/events.d.ts +45 -0
- package/dist/toolkit/audit/events.d.ts.map +1 -0
- package/dist/toolkit/audit/events.js +8 -0
- package/dist/toolkit/audit/events.js.map +1 -0
- package/dist/toolkit/audit/writer.d.ts +16 -0
- package/dist/toolkit/audit/writer.d.ts.map +1 -0
- package/dist/toolkit/audit/writer.js +73 -0
- package/dist/toolkit/audit/writer.js.map +1 -0
- package/dist/toolkit/cli/usage-report.d.ts +3 -0
- package/dist/toolkit/cli/usage-report.d.ts.map +1 -0
- package/dist/toolkit/cli/usage-report.js +76 -0
- package/dist/toolkit/cli/usage-report.js.map +1 -0
- package/dist/toolkit/connector.d.ts +142 -0
- package/dist/toolkit/connector.d.ts.map +1 -0
- package/dist/toolkit/connector.js +593 -0
- package/dist/toolkit/connector.js.map +1 -0
- package/dist/toolkit/extract_binary.d.ts +45 -0
- package/dist/toolkit/extract_binary.d.ts.map +1 -0
- package/dist/toolkit/extract_binary.js +342 -0
- package/dist/toolkit/extract_binary.js.map +1 -0
- package/dist/toolkit/extract_multimodal.d.ts +22 -0
- package/dist/toolkit/extract_multimodal.d.ts.map +1 -0
- package/dist/toolkit/extract_multimodal.js +209 -0
- package/dist/toolkit/extract_multimodal.js.map +1 -0
- package/dist/toolkit/fetch_attachment.d.ts +21 -0
- package/dist/toolkit/fetch_attachment.d.ts.map +1 -0
- package/dist/toolkit/fetch_attachment.js +169 -0
- package/dist/toolkit/fetch_attachment.js.map +1 -0
- package/dist/toolkit/fetch_helper.d.ts +47 -0
- package/dist/toolkit/fetch_helper.d.ts.map +1 -0
- package/dist/toolkit/fetch_helper.js +124 -0
- package/dist/toolkit/fetch_helper.js.map +1 -0
- package/dist/toolkit/guardrail.d.ts +63 -0
- package/dist/toolkit/guardrail.d.ts.map +1 -0
- package/dist/toolkit/guardrail.js +166 -0
- package/dist/toolkit/guardrail.js.map +1 -0
- package/dist/toolkit/hardship/curate.d.ts +47 -0
- package/dist/toolkit/hardship/curate.d.ts.map +1 -0
- package/dist/toolkit/hardship/curate.js +113 -0
- package/dist/toolkit/hardship/curate.js.map +1 -0
- package/dist/toolkit/hardship/patterns.d.ts +32 -0
- package/dist/toolkit/hardship/patterns.d.ts.map +1 -0
- package/dist/toolkit/hardship/patterns.js +98 -0
- package/dist/toolkit/hardship/patterns.js.map +1 -0
- package/dist/toolkit/hardship/preamble.d.ts +13 -0
- package/dist/toolkit/hardship/preamble.d.ts.map +1 -0
- package/dist/toolkit/hardship/preamble.js +47 -0
- package/dist/toolkit/hardship/preamble.js.map +1 -0
- package/dist/toolkit/hardship/read.d.ts +34 -0
- package/dist/toolkit/hardship/read.d.ts.map +1 -0
- package/dist/toolkit/hardship/read.js +116 -0
- package/dist/toolkit/hardship/read.js.map +1 -0
- package/dist/toolkit/hardship/record.d.ts +43 -0
- package/dist/toolkit/hardship/record.d.ts.map +1 -0
- package/dist/toolkit/hardship/record.js +74 -0
- package/dist/toolkit/hardship/record.js.map +1 -0
- package/dist/toolkit/hardship/scope.d.ts +20 -0
- package/dist/toolkit/hardship/scope.d.ts.map +1 -0
- package/dist/toolkit/hardship/scope.js +56 -0
- package/dist/toolkit/hardship/scope.js.map +1 -0
- package/dist/toolkit/index.d.ts +42 -0
- package/dist/toolkit/index.d.ts.map +1 -0
- package/dist/toolkit/index.js +51 -0
- package/dist/toolkit/index.js.map +1 -0
- package/dist/toolkit/plugin/curate-cmd.d.ts +22 -0
- package/dist/toolkit/plugin/curate-cmd.d.ts.map +1 -0
- package/dist/toolkit/plugin/curate-cmd.js +72 -0
- package/dist/toolkit/plugin/curate-cmd.js.map +1 -0
- package/dist/toolkit/plugin/prefs.d.ts +15 -0
- package/dist/toolkit/plugin/prefs.d.ts.map +1 -0
- package/dist/toolkit/plugin/prefs.js +78 -0
- package/dist/toolkit/plugin/prefs.js.map +1 -0
- package/dist/toolkit/plugin/reminder.d.ts +28 -0
- package/dist/toolkit/plugin/reminder.d.ts.map +1 -0
- package/dist/toolkit/plugin/reminder.js +103 -0
- package/dist/toolkit/plugin/reminder.js.map +1 -0
- package/dist/toolkit/policy/approval.d.ts +24 -0
- package/dist/toolkit/policy/approval.d.ts.map +1 -0
- package/dist/toolkit/policy/approval.js +56 -0
- package/dist/toolkit/policy/approval.js.map +1 -0
- package/dist/toolkit/policy/config.d.ts +38 -0
- package/dist/toolkit/policy/config.d.ts.map +1 -0
- package/dist/toolkit/policy/config.js +172 -0
- package/dist/toolkit/policy/config.js.map +1 -0
- package/dist/toolkit/policy/gate.d.ts +28 -0
- package/dist/toolkit/policy/gate.d.ts.map +1 -0
- package/dist/toolkit/policy/gate.js +126 -0
- package/dist/toolkit/policy/gate.js.map +1 -0
- package/dist/toolkit/policy/types.d.ts +106 -0
- package/dist/toolkit/policy/types.d.ts.map +1 -0
- package/dist/toolkit/policy/types.js +22 -0
- package/dist/toolkit/policy/types.js.map +1 -0
- package/dist/toolkit/security_check.d.ts +15 -0
- package/dist/toolkit/security_check.d.ts.map +1 -0
- package/dist/toolkit/security_check.js +109 -0
- package/dist/toolkit/security_check.js.map +1 -0
- package/dist/toolkit/usage/aggregate-cross-session.d.ts +36 -0
- package/dist/toolkit/usage/aggregate-cross-session.d.ts.map +1 -0
- package/dist/toolkit/usage/aggregate-cross-session.js +142 -0
- package/dist/toolkit/usage/aggregate-cross-session.js.map +1 -0
- package/dist/toolkit/usage/aggregate.d.ts +4 -0
- package/dist/toolkit/usage/aggregate.d.ts.map +1 -0
- package/dist/toolkit/usage/aggregate.js +105 -0
- package/dist/toolkit/usage/aggregate.js.map +1 -0
- package/dist/toolkit/usage/index.d.ts +11 -0
- package/dist/toolkit/usage/index.d.ts.map +1 -0
- package/dist/toolkit/usage/index.js +7 -0
- package/dist/toolkit/usage/index.js.map +1 -0
- package/dist/toolkit/usage/parse.d.ts +5 -0
- package/dist/toolkit/usage/parse.d.ts.map +1 -0
- package/dist/toolkit/usage/parse.js +19 -0
- package/dist/toolkit/usage/parse.js.map +1 -0
- package/dist/toolkit/usage/record.d.ts +8 -0
- package/dist/toolkit/usage/record.d.ts.map +1 -0
- package/dist/toolkit/usage/record.js +18 -0
- package/dist/toolkit/usage/record.js.map +1 -0
- package/dist/toolkit/usage/retention.d.ts +6 -0
- package/dist/toolkit/usage/retention.d.ts.map +1 -0
- package/dist/toolkit/usage/retention.js +71 -0
- package/dist/toolkit/usage/retention.js.map +1 -0
- package/dist/toolkit/usage/tokenize.d.ts +11 -0
- package/dist/toolkit/usage/tokenize.d.ts.map +1 -0
- package/dist/toolkit/usage/tokenize.js +24 -0
- package/dist/toolkit/usage/tokenize.js.map +1 -0
- package/dist/toolkit/usage/types.d.ts +34 -0
- package/dist/toolkit/usage/types.d.ts.map +1 -0
- package/dist/toolkit/usage/types.js +2 -0
- package/dist/toolkit/usage/types.js.map +1 -0
- package/package.json +124 -0
- package/plugin-hooks/session-summary.mjs +138 -0
- package/plugin-hooks/stale-summarize.mjs +70 -0
- package/plugin-hooks/usage-record.mjs +112 -0
- package/plugins/aws-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/aws-agent/README.md +46 -0
- package/plugins/aws-agent/bin/aws-agent +22 -0
- package/plugins/aws-agent/commands/aws-agent.md +6 -0
- package/plugins/aws-agent/hooks/hooks.json +49 -0
- package/plugins/aws-agent/hooks/reminder.mjs +16 -0
- package/plugins/aws-agent/package.json +9 -0
- package/plugins/aws-agent/skills/aws-agent/SKILL.md +70 -0
- package/plugins/confluence-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/confluence-agent/README.md +15 -0
- package/plugins/confluence-agent/bin/confluence-agent +17 -0
- package/plugins/confluence-agent/commands/confluence-agent.md +6 -0
- package/plugins/confluence-agent/hooks/hooks.json +49 -0
- package/plugins/confluence-agent/hooks/reminder.mjs +25 -0
- package/plugins/confluence-agent/package.json +8 -0
- package/plugins/confluence-agent/skills/confluence-agent/SKILL.md +40 -0
- package/plugins/db-agent/.claude-plugin/plugin.json +20 -0
- package/plugins/db-agent/README.md +13 -0
- package/plugins/db-agent/bin/db-agent +17 -0
- package/plugins/db-agent/commands/db-agent.md +6 -0
- package/plugins/db-agent/hooks/db-guard.mjs +110 -0
- package/plugins/db-agent/hooks/guardrails.json +26 -0
- package/plugins/db-agent/hooks/hooks.json +61 -0
- package/plugins/db-agent/hooks/reminder.mjs +16 -0
- package/plugins/db-agent/package.json +8 -0
- package/plugins/db-agent/skills/db-agent/SKILL.md +50 -0
- package/plugins/gcp-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/gcp-agent/README.md +31 -0
- package/plugins/gcp-agent/bin/gcp-agent +18 -0
- package/plugins/gcp-agent/commands/gcp-agent.md +6 -0
- package/plugins/gcp-agent/hooks/hooks.json +49 -0
- package/plugins/gcp-agent/hooks/reminder.mjs +16 -0
- package/plugins/gcp-agent/package.json +9 -0
- package/plugins/gcp-agent/skills/gcp-agent/SKILL.md +54 -0
- package/plugins/github-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/github-agent/README.md +13 -0
- package/plugins/github-agent/bin/github-agent +17 -0
- package/plugins/github-agent/commands/github-agent.md +6 -0
- package/plugins/github-agent/hooks/hooks.json +49 -0
- package/plugins/github-agent/hooks/reminder.mjs +16 -0
- package/plugins/github-agent/package.json +8 -0
- package/plugins/github-agent/skills/github-agent/SKILL.md +41 -0
- package/plugins/jira-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/jira-agent/README.md +15 -0
- package/plugins/jira-agent/bin/jira-agent +17 -0
- package/plugins/jira-agent/commands/jira-agent.md +6 -0
- package/plugins/jira-agent/hooks/hooks.json +49 -0
- package/plugins/jira-agent/hooks/reminder.mjs +16 -0
- package/plugins/jira-agent/package.json +8 -0
- package/plugins/jira-agent/skills/jira-agent/SKILL.md +37 -0
- package/plugins/notion-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/notion-agent/README.md +23 -0
- package/plugins/notion-agent/bin/notion-agent +17 -0
- package/plugins/notion-agent/commands/notion-agent.md +6 -0
- package/plugins/notion-agent/hooks/hooks.json +49 -0
- package/plugins/notion-agent/hooks/reminder.mjs +17 -0
- package/plugins/notion-agent/package.json +8 -0
- package/plugins/notion-agent/skills/notion-agent/SKILL.md +48 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* drivers/postgresql.ts — PostgreSQL driver via the `pg` package.
|
|
3
|
+
*
|
|
4
|
+
* Design:
|
|
5
|
+
* - The driver owns a `pg.Pool` lazily created on the first `connect()`
|
|
6
|
+
* call and cached for the lifetime of the driver instance. Each
|
|
7
|
+
* `connect()` call checks out a client from the pool; `close()`
|
|
8
|
+
* releases it back. The pool itself is destroyed by `shutdown()`,
|
|
9
|
+
* which connection.ts is expected to call at process teardown.
|
|
10
|
+
* - connection.ts calls `driver.connect(envConfig)` per
|
|
11
|
+
* `getConnection()` invocation, so the lazy-pool + per-call checkout
|
|
12
|
+
* gives us real pooling: N calls reuse M < N underlying sockets.
|
|
13
|
+
* - Read-only: every `executeReadAsync` runs inside a `BEGIN READ ONLY`
|
|
14
|
+
* transaction with a server-side `statement_timeout`.
|
|
15
|
+
* - The native `pg` module is loaded with a dynamic `import()` so this
|
|
16
|
+
* file compiles even when the package is not installed. On a missing
|
|
17
|
+
* install, `connect()` throws a helpful `npm install pg @types/pg` hint.
|
|
18
|
+
*/
|
|
19
|
+
import { performance } from "node:perf_hooks";
|
|
20
|
+
import { Column, DatabaseDriver, Table, } from "./base.js";
|
|
21
|
+
import { classifySqlKeywords } from "../policy.js";
|
|
22
|
+
export class PostgresDriver extends DatabaseDriver {
|
|
23
|
+
_pgModule = null;
|
|
24
|
+
_pool = null;
|
|
25
|
+
_schema = null;
|
|
26
|
+
_poolPromise = null;
|
|
27
|
+
async _loadPg() {
|
|
28
|
+
if (this._pgModule !== null)
|
|
29
|
+
return this._pgModule;
|
|
30
|
+
try {
|
|
31
|
+
const mod = (await import("pg"));
|
|
32
|
+
this._pgModule =
|
|
33
|
+
"Pool" in mod
|
|
34
|
+
? mod
|
|
35
|
+
: mod.default;
|
|
36
|
+
return this._pgModule;
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
throw new Error(`Driver 'postgresql' requires 'pg' — run: npm install pg @types/pg (${e.message})`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Build the pool on first call; subsequent callers receive the cached
|
|
44
|
+
* instance (or await the in-flight creation promise to avoid racing
|
|
45
|
+
* two `new Pool()` calls on concurrent connects).
|
|
46
|
+
*/
|
|
47
|
+
_ensurePool(envConfig) {
|
|
48
|
+
if (this._pool !== null)
|
|
49
|
+
return Promise.resolve(this._pool);
|
|
50
|
+
if (this._poolPromise !== null)
|
|
51
|
+
return this._poolPromise;
|
|
52
|
+
this._poolPromise = this._loadPg().then((pg) => {
|
|
53
|
+
const host = typeof envConfig["host"] === "string" ? envConfig["host"] : "localhost";
|
|
54
|
+
const port = typeof envConfig["port"] === "number" ? envConfig["port"] : 5432;
|
|
55
|
+
const database = typeof envConfig["database"] === "string" ? envConfig["database"] : "";
|
|
56
|
+
const user = typeof envConfig["user"] === "string" ? envConfig["user"] : undefined;
|
|
57
|
+
const password = typeof envConfig["password"] === "string"
|
|
58
|
+
? envConfig["password"]
|
|
59
|
+
: undefined;
|
|
60
|
+
const ssl = envConfig["ssl"] === true
|
|
61
|
+
? { rejectUnauthorized: false }
|
|
62
|
+
: typeof envConfig["ssl"] === "object" && envConfig["ssl"] !== null
|
|
63
|
+
? envConfig["ssl"]
|
|
64
|
+
: undefined;
|
|
65
|
+
this._schema =
|
|
66
|
+
typeof envConfig["schema"] === "string" &&
|
|
67
|
+
envConfig["schema"].length > 0
|
|
68
|
+
? envConfig["schema"]
|
|
69
|
+
: null;
|
|
70
|
+
const poolConfig = {
|
|
71
|
+
host,
|
|
72
|
+
port,
|
|
73
|
+
database,
|
|
74
|
+
max: typeof envConfig["pool_max"] === "number"
|
|
75
|
+
? envConfig["pool_max"]
|
|
76
|
+
: 10,
|
|
77
|
+
idleTimeoutMillis: 30_000,
|
|
78
|
+
};
|
|
79
|
+
if (user !== undefined)
|
|
80
|
+
poolConfig["user"] = user;
|
|
81
|
+
if (password !== undefined)
|
|
82
|
+
poolConfig["password"] = password;
|
|
83
|
+
if (ssl !== undefined)
|
|
84
|
+
poolConfig["ssl"] = ssl;
|
|
85
|
+
const pool = new pg.Pool(poolConfig);
|
|
86
|
+
this._pool = pool;
|
|
87
|
+
return pool;
|
|
88
|
+
});
|
|
89
|
+
return this._poolPromise;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check out a client from the pool. connection.ts tracks one handle per
|
|
93
|
+
* `getConnection()` call; `close()` releases the client back to the pool.
|
|
94
|
+
*/
|
|
95
|
+
connect(envConfig) {
|
|
96
|
+
return this._ensurePool(envConfig).then(async (pool) => {
|
|
97
|
+
const client = await pool.connect();
|
|
98
|
+
return { client, schema: this._schema };
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
executeRead(_conn, _query, _params = null, _maxRows = 1000, _timeoutMs = 30_000) {
|
|
102
|
+
return {
|
|
103
|
+
status: "error",
|
|
104
|
+
error_code: "SYNC_UNSUPPORTED",
|
|
105
|
+
error: "PostgresDriver.executeRead is async — call executeReadAsync() instead.",
|
|
106
|
+
execution_time_ms: 0,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
async executeReadAsync(conn, query, params = null, maxRows = 1000, timeoutMs = 30_000) {
|
|
110
|
+
const handle = (await conn);
|
|
111
|
+
const start = performance.now();
|
|
112
|
+
try {
|
|
113
|
+
await handle.client.query(`SET statement_timeout = ${Math.max(1, timeoutMs)}`);
|
|
114
|
+
await handle.client.query("BEGIN READ ONLY");
|
|
115
|
+
if (handle.schema !== null) {
|
|
116
|
+
const safe = handle.schema.replace(/"/g, '""');
|
|
117
|
+
await handle.client.query(`SET LOCAL search_path TO "${safe}"`);
|
|
118
|
+
}
|
|
119
|
+
// G-LIMIT-WRAP: wrap as a subquery so bounded semantics hold even
|
|
120
|
+
// when the outer query has a trailing `-- limit` comment, a CTE
|
|
121
|
+
// with its own LIMIT, a FOR UPDATE clause, or a LIMIT on an inner
|
|
122
|
+
// SELECT that the old substring check mistook for the bound.
|
|
123
|
+
const inner = query.trim().replace(/;\s*$/, "");
|
|
124
|
+
const limited = `SELECT * FROM (${inner}) AS _limited LIMIT ${maxRows + 1}`;
|
|
125
|
+
const result = await handle.client.query(limited, params ?? []);
|
|
126
|
+
await handle.client.query("COMMIT");
|
|
127
|
+
let truncated = false;
|
|
128
|
+
let rows = result.rows;
|
|
129
|
+
if (rows.length > maxRows) {
|
|
130
|
+
truncated = true;
|
|
131
|
+
rows = rows.slice(0, maxRows);
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
status: "success",
|
|
135
|
+
rows,
|
|
136
|
+
row_count: rows.length,
|
|
137
|
+
columns: result.fields.map((f) => f.name),
|
|
138
|
+
execution_time_ms: roundTo2(performance.now() - start),
|
|
139
|
+
truncated,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
try {
|
|
144
|
+
await handle.client.query("ROLLBACK");
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
/* best-effort */
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
status: "error",
|
|
151
|
+
error_code: "SQL_ERROR",
|
|
152
|
+
error: e.message,
|
|
153
|
+
execution_time_ms: roundTo2(performance.now() - start),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
getSchema(_conn, _schemaName = "", _tableFilter = null) {
|
|
158
|
+
return [];
|
|
159
|
+
}
|
|
160
|
+
async getSchemaAsync(conn, schemaName = "", tableFilter = null) {
|
|
161
|
+
const handle = (await conn);
|
|
162
|
+
const ns = schemaName.length > 0 ? schemaName : (handle.schema ?? "public");
|
|
163
|
+
try {
|
|
164
|
+
const tableParams = [ns];
|
|
165
|
+
let tableSql = "SELECT table_name FROM information_schema.tables " +
|
|
166
|
+
"WHERE table_schema = $1 AND table_type = 'BASE TABLE'";
|
|
167
|
+
if (tableFilter !== null && tableFilter !== undefined) {
|
|
168
|
+
tableSql += " AND table_name LIKE $2 ESCAPE '!'";
|
|
169
|
+
tableParams.push(tableFilter.replace(/[!_%]/g, "!$&"));
|
|
170
|
+
}
|
|
171
|
+
tableSql += " ORDER BY table_name";
|
|
172
|
+
const tablesResult = await handle.client.query(tableSql, tableParams);
|
|
173
|
+
const tableNames = tablesResult.rows.map((r) => String(r["table_name"]));
|
|
174
|
+
if (tableNames.length === 0)
|
|
175
|
+
return [];
|
|
176
|
+
// G-SCHEMA-BATCH: fold per-table queries into two set-based queries
|
|
177
|
+
// using PostgreSQL's `= ANY($N::text[])`. For N tables we drop from
|
|
178
|
+
// 2N+1 round-trips (tables + N columns + N PKs) to 3.
|
|
179
|
+
const colsResult = await handle.client.query("SELECT table_name, column_name, data_type, is_nullable, column_default, ordinal_position " +
|
|
180
|
+
"FROM information_schema.columns " +
|
|
181
|
+
"WHERE table_schema = $1 AND table_name = ANY($2::text[]) " +
|
|
182
|
+
"ORDER BY table_name, ordinal_position", [ns, tableNames]);
|
|
183
|
+
const pkResult = await handle.client.query("SELECT c.relname AS table_name, a.attname AS column_name " +
|
|
184
|
+
"FROM pg_index i " +
|
|
185
|
+
"JOIN pg_class c ON c.oid = i.indrelid " +
|
|
186
|
+
"JOIN pg_namespace nsp ON nsp.oid = c.relnamespace " +
|
|
187
|
+
"JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey) " +
|
|
188
|
+
"WHERE nsp.nspname = $1 AND c.relname = ANY($2::text[]) AND i.indisprimary", [ns, tableNames]);
|
|
189
|
+
const pksByTable = new Map();
|
|
190
|
+
for (const r of pkResult.rows) {
|
|
191
|
+
const t = String(r["table_name"]);
|
|
192
|
+
let set = pksByTable.get(t);
|
|
193
|
+
if (set === undefined) {
|
|
194
|
+
set = new Set();
|
|
195
|
+
pksByTable.set(t, set);
|
|
196
|
+
}
|
|
197
|
+
set.add(String(r["column_name"]));
|
|
198
|
+
}
|
|
199
|
+
const colsByTable = new Map();
|
|
200
|
+
for (const r of colsResult.rows) {
|
|
201
|
+
const t = String(r["table_name"]);
|
|
202
|
+
let list = colsByTable.get(t);
|
|
203
|
+
if (list === undefined) {
|
|
204
|
+
list = [];
|
|
205
|
+
colsByTable.set(t, list);
|
|
206
|
+
}
|
|
207
|
+
const name = String(r["column_name"]);
|
|
208
|
+
list.push(new Column({
|
|
209
|
+
name,
|
|
210
|
+
data_type: String(r["data_type"]),
|
|
211
|
+
nullable: String(r["is_nullable"]).toUpperCase() === "YES",
|
|
212
|
+
is_primary_key: pksByTable.get(t)?.has(name) ?? false,
|
|
213
|
+
default: r["column_default"] === null
|
|
214
|
+
? null
|
|
215
|
+
: String(r["column_default"]),
|
|
216
|
+
}));
|
|
217
|
+
}
|
|
218
|
+
const out = [];
|
|
219
|
+
for (const tableName of tableNames) {
|
|
220
|
+
out.push(new Table({
|
|
221
|
+
name: tableName,
|
|
222
|
+
schema: ns,
|
|
223
|
+
columns: colsByTable.get(tableName) ?? [],
|
|
224
|
+
}));
|
|
225
|
+
}
|
|
226
|
+
return out;
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return [];
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Release the checked-out client back to the pool. Does NOT destroy
|
|
234
|
+
* the pool — use {@link shutdown} for that.
|
|
235
|
+
*/
|
|
236
|
+
close(conn) {
|
|
237
|
+
Promise.resolve(conn)
|
|
238
|
+
.then((h) => h.client.release())
|
|
239
|
+
.catch((e) => {
|
|
240
|
+
// G-CLOSE-LOG: surface release errors on stderr instead of
|
|
241
|
+
// swallowing them. close() is called from sync cleanup paths
|
|
242
|
+
// so we cannot await; keep it fire-and-forget but at least
|
|
243
|
+
// give an operator something to grep for in a misbehaving run.
|
|
244
|
+
process.stderr.write(`[postgresql] release error (best-effort): ${e instanceof Error ? e.message : String(e)}\n`);
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
classifyOperation(query) {
|
|
248
|
+
return classifySqlKeywords(query);
|
|
249
|
+
}
|
|
250
|
+
async closeAsync(conn) {
|
|
251
|
+
const handle = (await conn);
|
|
252
|
+
try {
|
|
253
|
+
handle.client.release();
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
/* best-effort */
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Per-driver health check. Runs `SELECT 1` on the given handle. Caller
|
|
261
|
+
* still owns the handle and is responsible for {@link close}-ing it.
|
|
262
|
+
*/
|
|
263
|
+
async healthCheck(conn) {
|
|
264
|
+
try {
|
|
265
|
+
const handle = (await conn);
|
|
266
|
+
const r = await handle.client.query("SELECT 1");
|
|
267
|
+
return r.rowCount !== null && r.rowCount >= 0;
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Drain and destroy the pool. connection.ts's `shutdownAll()` fans out
|
|
275
|
+
* to each driver instance; this is where we actually close sockets.
|
|
276
|
+
*/
|
|
277
|
+
async shutdown() {
|
|
278
|
+
const pool = this._pool;
|
|
279
|
+
this._pool = null;
|
|
280
|
+
this._poolPromise = null;
|
|
281
|
+
if (pool !== null) {
|
|
282
|
+
try {
|
|
283
|
+
await pool.end();
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
/* best-effort */
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
function roundTo2(n) {
|
|
292
|
+
return Math.round(n * 100) / 100;
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=postgresql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresql.js","sourceRoot":"","sources":["../../../../../src/connectors/db/lib/drivers/postgresql.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic-import and register the driver backing a given name (or alias).
|
|
3
|
+
* Throws if `name` is not a recognized driver key; callers should propagate
|
|
4
|
+
* this through to the CLI where it surfaces as a validation error.
|
|
5
|
+
*/
|
|
6
|
+
export declare function ensureDriver(name: string): Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* Load and register every shipped driver. Used by tests that want the
|
|
9
|
+
* full registry available and by explicit library consumers. Prefer
|
|
10
|
+
* `ensureDriver(name)` in production code paths so only the drivers
|
|
11
|
+
* actually in use get pulled into memory.
|
|
12
|
+
*/
|
|
13
|
+
export declare function registerAll(): Promise<void>;
|
|
14
|
+
/** Test helper — drop the loaded-driver memo so dynamic imports re-run. */
|
|
15
|
+
export declare function _resetLoadedDrivers(): void;
|
|
16
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../../src/connectors/db/lib/drivers/register.ts"],"names":[],"mappings":"AA+CA;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD9D;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAGjD;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* drivers/register.ts — Lazy driver loader.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the v1 eager `registerAll()` (which pulled every optional Phase E
|
|
5
|
+
* dep into memory on `import "./lib"`) with an alias-aware `ensureDriver(name)`
|
|
6
|
+
* that dynamic-imports the requested driver module on demand. Idempotent —
|
|
7
|
+
* a second call for the same driver is a no-op.
|
|
8
|
+
*
|
|
9
|
+
* Call sites:
|
|
10
|
+
* - `connection.getConnection(envName)` awaits `ensureDriver(driverName)`
|
|
11
|
+
* before the factory lookup.
|
|
12
|
+
* - Tests that want every driver wired up can `await registerAll()`, which
|
|
13
|
+
* resolves all of them in parallel.
|
|
14
|
+
*
|
|
15
|
+
* Heavy optional deps (`pg`, `mysql2`, `mssql`, `mongodb`,
|
|
16
|
+
* `@aws-sdk/client-dynamodb`) therefore only load when a config references
|
|
17
|
+
* the corresponding driver name.
|
|
18
|
+
*/
|
|
19
|
+
import { listDriverFactories, registerDriverFactory } from "../connection.js";
|
|
20
|
+
const ALIASES = {
|
|
21
|
+
sqlite: "sqlite",
|
|
22
|
+
postgresql: "postgresql",
|
|
23
|
+
postgres: "postgresql",
|
|
24
|
+
mysql: "mysql",
|
|
25
|
+
sqlserver: "sqlserver",
|
|
26
|
+
mssql: "sqlserver",
|
|
27
|
+
mongodb: "mongodb",
|
|
28
|
+
mongo: "mongodb",
|
|
29
|
+
dynamodb: "dynamodb",
|
|
30
|
+
dynamo: "dynamodb",
|
|
31
|
+
oracle: "oracle",
|
|
32
|
+
oracledb: "oracle",
|
|
33
|
+
oci: "oracle",
|
|
34
|
+
};
|
|
35
|
+
const _loaded = new Set();
|
|
36
|
+
/**
|
|
37
|
+
* Dynamic-import and register the driver backing a given name (or alias).
|
|
38
|
+
* Throws if `name` is not a recognized driver key; callers should propagate
|
|
39
|
+
* this through to the CLI where it surfaces as a validation error.
|
|
40
|
+
*/
|
|
41
|
+
export async function ensureDriver(name) {
|
|
42
|
+
// If a factory is already registered (including test-only mock drivers),
|
|
43
|
+
// leave it alone — the caller's factory wins.
|
|
44
|
+
if (listDriverFactories().includes(name))
|
|
45
|
+
return;
|
|
46
|
+
const key = ALIASES[name];
|
|
47
|
+
if (key === undefined) {
|
|
48
|
+
throw new Error(`unknown driver: '${name}' (valid: ${Object.keys(ALIASES).sort().join(", ")})`);
|
|
49
|
+
}
|
|
50
|
+
if (_loaded.has(key))
|
|
51
|
+
return;
|
|
52
|
+
switch (key) {
|
|
53
|
+
case "sqlite": {
|
|
54
|
+
const m = await import("./sqlite.js");
|
|
55
|
+
registerDriverFactory("sqlite", () => new m.SQLiteDriver());
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case "postgresql": {
|
|
59
|
+
const m = await import("./postgresql.js");
|
|
60
|
+
registerDriverFactory("postgresql", () => new m.PostgresDriver());
|
|
61
|
+
registerDriverFactory("postgres", () => new m.PostgresDriver());
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
case "mysql": {
|
|
65
|
+
const m = await import("./mysql.js");
|
|
66
|
+
registerDriverFactory("mysql", () => new m.MysqlDriver());
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
case "sqlserver": {
|
|
70
|
+
const m = await import("./sqlserver.js");
|
|
71
|
+
registerDriverFactory("sqlserver", () => new m.SqlServerDriver());
|
|
72
|
+
registerDriverFactory("mssql", () => new m.SqlServerDriver());
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
case "mongodb": {
|
|
76
|
+
const m = await import("./mongodb.js");
|
|
77
|
+
registerDriverFactory("mongodb", () => new m.MongoDriver());
|
|
78
|
+
registerDriverFactory("mongo", () => new m.MongoDriver());
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
case "dynamodb": {
|
|
82
|
+
const m = await import("./dynamodb.js");
|
|
83
|
+
registerDriverFactory("dynamodb", () => new m.DynamoDriver());
|
|
84
|
+
registerDriverFactory("dynamo", () => new m.DynamoDriver());
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
case "oracle": {
|
|
88
|
+
const m = await import("./oracle.js");
|
|
89
|
+
registerDriverFactory("oracle", () => new m.OracleDriver());
|
|
90
|
+
registerDriverFactory("oracledb", () => new m.OracleDriver());
|
|
91
|
+
registerDriverFactory("oci", () => new m.OracleDriver());
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
_loaded.add(key);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Load and register every shipped driver. Used by tests that want the
|
|
99
|
+
* full registry available and by explicit library consumers. Prefer
|
|
100
|
+
* `ensureDriver(name)` in production code paths so only the drivers
|
|
101
|
+
* actually in use get pulled into memory.
|
|
102
|
+
*/
|
|
103
|
+
export async function registerAll() {
|
|
104
|
+
const unique = [...new Set(Object.values(ALIASES))];
|
|
105
|
+
await Promise.all(unique.map((k) => ensureDriver(k)));
|
|
106
|
+
}
|
|
107
|
+
/** Test helper — drop the loaded-driver memo so dynamic imports re-run. */
|
|
108
|
+
export function _resetLoadedDrivers() {
|
|
109
|
+
_loaded.clear();
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../../src/connectors/db/lib/drivers/register.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import { DatabaseDriver, Table, type ExecuteReadResult } from "./base.js";
|
|
3
|
+
import { type OperationType } from "../policy.js";
|
|
4
|
+
export declare class SQLiteDriver extends DatabaseDriver {
|
|
5
|
+
connect(envConfig: Record<string, unknown>): Database.Database;
|
|
6
|
+
executeRead(conn: unknown, query: string, params?: unknown[] | null, maxRows?: number, _timeoutMs?: number): ExecuteReadResult;
|
|
7
|
+
getSchema(conn: unknown, schemaName?: string, tableFilter?: string | null): Table[];
|
|
8
|
+
close(conn: unknown): void;
|
|
9
|
+
classifyOperation(query: string): OperationType;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../../../src/connectors/db/lib/drivers/sqlite.ts"],"names":[],"mappings":"AAmBA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAEL,cAAc,EACd,KAAK,EACL,KAAK,iBAAiB,EACvB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEvE,qBAAa,YAAa,SAAQ,cAAc;IACrC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,QAAQ;IAQ9D,WAAW,CAClB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,OAAO,EAAE,GAAG,IAAW,EAC/B,OAAO,GAAE,MAAa,EACtB,UAAU,GAAE,MAAc,GACzB,iBAAiB;IAoEX,SAAS,CAChB,IAAI,EAAE,OAAO,EACb,UAAU,GAAE,MAAW,EACvB,WAAW,GAAE,MAAM,GAAG,IAAW,GAChC,KAAK,EAAE;IAoDD,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI1B,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa;CAGzD"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* drivers/sqlite.ts — SQLite driver, used for fast unit tests and
|
|
3
|
+
* local/embedded databases.
|
|
4
|
+
*
|
|
5
|
+
* Mirrors `drivers/sqlite.py`. The Python implementation uses stdlib
|
|
6
|
+
* `sqlite3`; here we use `better-sqlite3` because it provides a synchronous
|
|
7
|
+
* API that matches Python's ergonomics (no Promise wrapping needed for
|
|
8
|
+
* single-shot queries inside the policy/query pipeline).
|
|
9
|
+
*
|
|
10
|
+
* Behaviour parity:
|
|
11
|
+
* - `connect({database})` opens the path; `:memory:` is an in-memory DB.
|
|
12
|
+
* - `executeRead` fetches `max_rows + 1` rows so we can detect truncation
|
|
13
|
+
* without reading the whole result set.
|
|
14
|
+
* - On error: returns `{status: "error", error_code: "SQL_ERROR", error,
|
|
15
|
+
* execution_time_ms}` — never raises.
|
|
16
|
+
* - `getSchema(conn, schema?, tableFilter?)` reads `sqlite_master` and
|
|
17
|
+
* `PRAGMA table_info(<name>)`, mirroring Python's queries verbatim.
|
|
18
|
+
*/
|
|
19
|
+
import { performance } from "node:perf_hooks";
|
|
20
|
+
import Database from "better-sqlite3";
|
|
21
|
+
import { Column, DatabaseDriver, Table, } from "./base.js";
|
|
22
|
+
import { classifySqlKeywords } from "../policy.js";
|
|
23
|
+
export class SQLiteDriver extends DatabaseDriver {
|
|
24
|
+
connect(envConfig) {
|
|
25
|
+
const dbPath = typeof envConfig["database"] === "string"
|
|
26
|
+
? envConfig["database"]
|
|
27
|
+
: ":memory:";
|
|
28
|
+
return new Database(dbPath);
|
|
29
|
+
}
|
|
30
|
+
executeRead(conn, query, params = null, maxRows = 1000, _timeoutMs = 30000) {
|
|
31
|
+
const db = conn;
|
|
32
|
+
const start = performance.now();
|
|
33
|
+
try {
|
|
34
|
+
const stmt = db.prepare(query);
|
|
35
|
+
// better-sqlite3 exposes `stmt.reader` as `true` for row-returning
|
|
36
|
+
// statements (SELECT / PRAGMA / EXPLAIN) and `false` for writes
|
|
37
|
+
// (INSERT/UPDATE/DELETE). `.iterate()` only works for readers; writes
|
|
38
|
+
// must go through `.run()`. When the plugin config opts into
|
|
39
|
+
// `write: allow` or `delete: allow`, the policy gate routes the
|
|
40
|
+
// statement through this method — so dispatch on `stmt.reader`.
|
|
41
|
+
if (stmt.reader === false) {
|
|
42
|
+
stmt.run(...(params ?? []));
|
|
43
|
+
const elapsed = performance.now() - start;
|
|
44
|
+
return {
|
|
45
|
+
status: "success",
|
|
46
|
+
rows: [],
|
|
47
|
+
row_count: 0,
|
|
48
|
+
columns: [],
|
|
49
|
+
execution_time_ms: roundTo2(elapsed),
|
|
50
|
+
truncated: false,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const iter = stmt.iterate(...(params ?? []));
|
|
54
|
+
const rowsRaw = [];
|
|
55
|
+
// Fetch one extra row to detect truncation.
|
|
56
|
+
let truncated = false;
|
|
57
|
+
for (const row of iter) {
|
|
58
|
+
if (rowsRaw.length >= maxRows) {
|
|
59
|
+
truncated = true;
|
|
60
|
+
// We need to break the iterator cleanly so SQLite can release
|
|
61
|
+
// its statement state. better-sqlite3's iterate() honours
|
|
62
|
+
// `return()` to close the underlying stmt.
|
|
63
|
+
if (typeof iter.return === "function")
|
|
64
|
+
iter.return();
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
rowsRaw.push(row);
|
|
68
|
+
}
|
|
69
|
+
// Columns: `stmt.columns()` returns ColumnDefinition[] with `name`.
|
|
70
|
+
let columns = [];
|
|
71
|
+
try {
|
|
72
|
+
columns = stmt.columns().map((c) => c.name);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Non-SELECT statements have no columns; mirror Python's
|
|
76
|
+
// `cursor.description` being None.
|
|
77
|
+
columns = [];
|
|
78
|
+
}
|
|
79
|
+
const elapsed = performance.now() - start;
|
|
80
|
+
return {
|
|
81
|
+
status: "success",
|
|
82
|
+
rows: rowsRaw,
|
|
83
|
+
row_count: rowsRaw.length,
|
|
84
|
+
columns,
|
|
85
|
+
execution_time_ms: roundTo2(elapsed),
|
|
86
|
+
truncated,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
const elapsed = performance.now() - start;
|
|
91
|
+
return {
|
|
92
|
+
status: "error",
|
|
93
|
+
error_code: "SQL_ERROR",
|
|
94
|
+
error: e.message,
|
|
95
|
+
execution_time_ms: roundTo2(elapsed),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
getSchema(conn, schemaName = "", tableFilter = null) {
|
|
100
|
+
const db = conn;
|
|
101
|
+
try {
|
|
102
|
+
let cursor;
|
|
103
|
+
let baseQuery = "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'";
|
|
104
|
+
if (tableFilter !== null && tableFilter !== undefined) {
|
|
105
|
+
baseQuery += " AND name LIKE ?";
|
|
106
|
+
cursor = db.prepare(baseQuery).all(tableFilter);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
cursor = db.prepare(baseQuery).all();
|
|
110
|
+
}
|
|
111
|
+
const tables = [];
|
|
112
|
+
for (const row of cursor) {
|
|
113
|
+
const tableName = row.name;
|
|
114
|
+
// PRAGMA table_info returns rows shaped like:
|
|
115
|
+
// {cid, name, type, notnull, dflt_value, pk}
|
|
116
|
+
const colCursor = db
|
|
117
|
+
.prepare(`PRAGMA table_info(${tableName})`)
|
|
118
|
+
.all();
|
|
119
|
+
const columns = [];
|
|
120
|
+
for (const colRow of colCursor) {
|
|
121
|
+
columns.push(new Column({
|
|
122
|
+
name: colRow.name,
|
|
123
|
+
data_type: colRow.type,
|
|
124
|
+
nullable: !colRow.notnull,
|
|
125
|
+
is_primary_key: Boolean(colRow.pk),
|
|
126
|
+
default: colRow.dflt_value,
|
|
127
|
+
}));
|
|
128
|
+
}
|
|
129
|
+
tables.push(new Table({ name: tableName, schema: schemaName, columns }));
|
|
130
|
+
}
|
|
131
|
+
return tables;
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
close(conn) {
|
|
138
|
+
conn.close();
|
|
139
|
+
}
|
|
140
|
+
classifyOperation(query) {
|
|
141
|
+
return classifySqlKeywords(query);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function roundTo2(n) {
|
|
145
|
+
return Math.round(n * 100) / 100;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../../../src/connectors/db/lib/drivers/sqlite.ts"],"names":[],"mappings":"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"}
|