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
package/package.json
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "narai-primitives",
|
|
3
|
+
"version": "2.0.0-rc.1",
|
|
4
|
+
"description": "Read-only connectors + planning hub + connector framework, in one package. Bundles what was @narai/connector-toolkit, @narai/connector-config, @narai/connector-hub, and the seven @narai/<svc>-agent-connector packages.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/hub/index.js",
|
|
7
|
+
"types": "./dist/hub/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/hub/index.d.ts",
|
|
11
|
+
"import": "./dist/hub/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./hub": {
|
|
14
|
+
"types": "./dist/hub/index.d.ts",
|
|
15
|
+
"import": "./dist/hub/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./toolkit": {
|
|
18
|
+
"types": "./dist/toolkit/index.d.ts",
|
|
19
|
+
"import": "./dist/toolkit/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./config": {
|
|
22
|
+
"types": "./dist/config/index.d.ts",
|
|
23
|
+
"import": "./dist/config/index.js"
|
|
24
|
+
},
|
|
25
|
+
"./aws": {
|
|
26
|
+
"types": "./dist/connectors/aws/index.d.ts",
|
|
27
|
+
"import": "./dist/connectors/aws/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./confluence": {
|
|
30
|
+
"types": "./dist/connectors/confluence/index.d.ts",
|
|
31
|
+
"import": "./dist/connectors/confluence/index.js"
|
|
32
|
+
},
|
|
33
|
+
"./db": {
|
|
34
|
+
"types": "./dist/connectors/db/index.d.ts",
|
|
35
|
+
"import": "./dist/connectors/db/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./gcp": {
|
|
38
|
+
"types": "./dist/connectors/gcp/index.d.ts",
|
|
39
|
+
"import": "./dist/connectors/gcp/index.js"
|
|
40
|
+
},
|
|
41
|
+
"./github": {
|
|
42
|
+
"types": "./dist/connectors/github/index.d.ts",
|
|
43
|
+
"import": "./dist/connectors/github/index.js"
|
|
44
|
+
},
|
|
45
|
+
"./jira": {
|
|
46
|
+
"types": "./dist/connectors/jira/index.d.ts",
|
|
47
|
+
"import": "./dist/connectors/jira/index.js"
|
|
48
|
+
},
|
|
49
|
+
"./notion": {
|
|
50
|
+
"types": "./dist/connectors/notion/index.d.ts",
|
|
51
|
+
"import": "./dist/connectors/notion/index.js"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"bin": {
|
|
55
|
+
"narai": "./dist/cli/narai.js",
|
|
56
|
+
"aws-agent-connector": "./dist/connectors/aws/cli.js",
|
|
57
|
+
"confluence-agent-connector": "./dist/connectors/confluence/cli.js",
|
|
58
|
+
"db-agent-connector": "./dist/connectors/db/cli.js",
|
|
59
|
+
"gcp-agent-connector": "./dist/connectors/gcp/cli.js",
|
|
60
|
+
"github-agent-connector": "./dist/connectors/github/cli.js",
|
|
61
|
+
"jira-agent-connector": "./dist/connectors/jira/cli.js",
|
|
62
|
+
"notion-agent-connector": "./dist/connectors/notion/cli.js",
|
|
63
|
+
"usage-report": "./dist/toolkit/cli/usage-report.js"
|
|
64
|
+
},
|
|
65
|
+
"engines": {
|
|
66
|
+
"node": ">=20.0.0"
|
|
67
|
+
},
|
|
68
|
+
"files": [
|
|
69
|
+
"dist/",
|
|
70
|
+
"plugins/",
|
|
71
|
+
"plugin-hooks/",
|
|
72
|
+
"README.md",
|
|
73
|
+
"LICENSE"
|
|
74
|
+
],
|
|
75
|
+
"repository": {
|
|
76
|
+
"type": "git",
|
|
77
|
+
"url": "git+https://github.com/narailabs/narai-primitives.git"
|
|
78
|
+
},
|
|
79
|
+
"bugs": {
|
|
80
|
+
"url": "https://github.com/narailabs/narai-primitives/issues"
|
|
81
|
+
},
|
|
82
|
+
"homepage": "https://github.com/narailabs/narai-primitives#readme",
|
|
83
|
+
"publishConfig": {
|
|
84
|
+
"access": "public"
|
|
85
|
+
},
|
|
86
|
+
"scripts": {
|
|
87
|
+
"build": "tsc",
|
|
88
|
+
"typecheck": "tsc --noEmit",
|
|
89
|
+
"test": "vitest run",
|
|
90
|
+
"test:watch": "vitest",
|
|
91
|
+
"coverage": "vitest run --coverage"
|
|
92
|
+
},
|
|
93
|
+
"dependencies": {
|
|
94
|
+
"@anthropic-ai/claude-agent-sdk": "^0.2.119",
|
|
95
|
+
"@narai/credential-providers": "^0.2.1",
|
|
96
|
+
"better-sqlite3": "^12.9.0",
|
|
97
|
+
"js-yaml": "^4.1.1",
|
|
98
|
+
"zod": "^3.23.0"
|
|
99
|
+
},
|
|
100
|
+
"optionalDependencies": {
|
|
101
|
+
"@aws-sdk/client-cloudwatch": "^3.1030.0",
|
|
102
|
+
"@aws-sdk/client-dynamodb": "^3.1030.0",
|
|
103
|
+
"@aws-sdk/client-lambda": "^3.1030.0",
|
|
104
|
+
"@aws-sdk/client-rds": "^3.1030.0",
|
|
105
|
+
"@aws-sdk/client-s3": "^3.1030.0",
|
|
106
|
+
"@aws-sdk/client-sts": "^3.1030.0",
|
|
107
|
+
"gpt-tokenizer": "^2.5.0",
|
|
108
|
+
"mongodb": "^7.1.1",
|
|
109
|
+
"mssql": "^12.2.1",
|
|
110
|
+
"mysql2": "^3.22.0",
|
|
111
|
+
"oracledb": "^6.10.0",
|
|
112
|
+
"pg": "^8.20.0"
|
|
113
|
+
},
|
|
114
|
+
"devDependencies": {
|
|
115
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
116
|
+
"@types/js-yaml": "^4.0.9",
|
|
117
|
+
"@types/node": "^20.19.39",
|
|
118
|
+
"@types/pg": "^8.20.0",
|
|
119
|
+
"@vitest/coverage-v8": "^3.0.0",
|
|
120
|
+
"aws-sdk-client-mock": "^4.1.0",
|
|
121
|
+
"typescript": "^5.9.3",
|
|
122
|
+
"vitest": "^3.0.0"
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// SessionEnd hook — summarize one session's usage.jsonl into a .json + .md pair.
|
|
3
|
+
|
|
4
|
+
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
|
|
7
|
+
function aggregate(connector, sessionId, records) {
|
|
8
|
+
if (records.length === 0) {
|
|
9
|
+
return {
|
|
10
|
+
session_id: sessionId,
|
|
11
|
+
connector,
|
|
12
|
+
start: "",
|
|
13
|
+
end: "",
|
|
14
|
+
total_calls: 0,
|
|
15
|
+
total_response_bytes: 0,
|
|
16
|
+
total_estimated_tokens: 0,
|
|
17
|
+
error_rate: 0,
|
|
18
|
+
by_action: {},
|
|
19
|
+
top_responses: [],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const byAction = {};
|
|
23
|
+
let totalBytes = 0, totalTokens = 0, errors = 0;
|
|
24
|
+
let start = records[0].ts, end = records[0].ts;
|
|
25
|
+
for (const r of records) {
|
|
26
|
+
totalBytes += r.response_bytes;
|
|
27
|
+
totalTokens += r.estimated_tokens;
|
|
28
|
+
if (r.status !== "success") errors++;
|
|
29
|
+
if (r.ts < start) start = r.ts;
|
|
30
|
+
if (r.ts > end) end = r.ts;
|
|
31
|
+
const s = byAction[r.action] ||= {
|
|
32
|
+
calls: 0, response_bytes: 0, estimated_tokens: 0, ms_total: 0, ms_count: 0,
|
|
33
|
+
};
|
|
34
|
+
s.calls++;
|
|
35
|
+
s.response_bytes += r.response_bytes;
|
|
36
|
+
s.estimated_tokens += r.estimated_tokens;
|
|
37
|
+
if (typeof r.execution_time_ms === "number") { s.ms_total += r.execution_time_ms; s.ms_count++; }
|
|
38
|
+
}
|
|
39
|
+
const by_action = {};
|
|
40
|
+
for (const [k, s] of Object.entries(byAction)) {
|
|
41
|
+
by_action[k] = {
|
|
42
|
+
calls: s.calls,
|
|
43
|
+
response_bytes: s.response_bytes,
|
|
44
|
+
estimated_tokens: s.estimated_tokens,
|
|
45
|
+
avg_ms: s.ms_count > 0 ? Math.round(s.ms_total / s.ms_count) : 0,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const top_responses = [...records]
|
|
49
|
+
.sort((a, b) => b.response_bytes - a.response_bytes)
|
|
50
|
+
.slice(0, 3)
|
|
51
|
+
.map((r) => ({ action: r.action, response_bytes: r.response_bytes }));
|
|
52
|
+
return {
|
|
53
|
+
session_id: sessionId,
|
|
54
|
+
connector,
|
|
55
|
+
start, end,
|
|
56
|
+
total_calls: records.length,
|
|
57
|
+
total_response_bytes: totalBytes,
|
|
58
|
+
total_estimated_tokens: totalTokens,
|
|
59
|
+
error_rate: errors / records.length,
|
|
60
|
+
by_action,
|
|
61
|
+
top_responses,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function renderMd(s) {
|
|
66
|
+
if (s.total_calls === 0) {
|
|
67
|
+
return `# ${s.connector} usage — session ${s.session_id}\n\nNo calls recorded.\n`;
|
|
68
|
+
}
|
|
69
|
+
const successes = s.total_calls - Math.round(s.error_rate * s.total_calls);
|
|
70
|
+
const errors = s.total_calls - successes;
|
|
71
|
+
const rows = Object.entries(s.by_action)
|
|
72
|
+
.sort(([, a], [, b]) => b.response_bytes - a.response_bytes)
|
|
73
|
+
.map(([action, a]) =>
|
|
74
|
+
`| ${action} | ${a.calls} | ${a.response_bytes.toLocaleString()} | ${a.estimated_tokens.toLocaleString()} | ${a.avg_ms} |`,
|
|
75
|
+
).join("\n");
|
|
76
|
+
const top = s.top_responses.map((t, i) =>
|
|
77
|
+
`${i + 1}. ${t.action} (${t.response_bytes.toLocaleString()} bytes)`).join("\n");
|
|
78
|
+
return [
|
|
79
|
+
`# ${s.connector} usage — session ${s.session_id}`, ``,
|
|
80
|
+
`- Window: ${s.start} → ${s.end}`,
|
|
81
|
+
`- Calls: ${s.total_calls} (${successes} success, ${errors} error — ${(s.error_rate * 100).toFixed(1)}%)`,
|
|
82
|
+
`- Response bytes: ${s.total_response_bytes.toLocaleString()} | Estimated tokens: ${s.total_estimated_tokens.toLocaleString()}`,
|
|
83
|
+
``,
|
|
84
|
+
`## By action`, ``,
|
|
85
|
+
`| action | calls | bytes | est. tokens | avg ms |`,
|
|
86
|
+
`|---|---|---|---|---|`,
|
|
87
|
+
rows, ``,
|
|
88
|
+
`## Top responses`, ``,
|
|
89
|
+
top, ``,
|
|
90
|
+
].join("\n");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function summarizeSession(baseDir, connector, sessionId) {
|
|
94
|
+
const jsonl = join(baseDir, `${sessionId}.jsonl`);
|
|
95
|
+
const summaryJson = join(baseDir, `summary-${sessionId}.json`);
|
|
96
|
+
const summaryMd = join(baseDir, `summary-${sessionId}.md`);
|
|
97
|
+
if (!existsSync(jsonl)) return;
|
|
98
|
+
if (existsSync(summaryJson)) return;
|
|
99
|
+
|
|
100
|
+
let raw;
|
|
101
|
+
try { raw = readFileSync(jsonl, "utf-8"); } catch { return; }
|
|
102
|
+
const records = raw.split("\n").filter(Boolean).map((l) => {
|
|
103
|
+
try { return JSON.parse(l); } catch { return null; }
|
|
104
|
+
}).filter(Boolean);
|
|
105
|
+
|
|
106
|
+
const summary = aggregate(connector, sessionId, records);
|
|
107
|
+
try {
|
|
108
|
+
writeFileSync(summaryJson, JSON.stringify(summary, null, 2), "utf-8");
|
|
109
|
+
writeFileSync(summaryMd, renderMd(summary), "utf-8");
|
|
110
|
+
} catch {
|
|
111
|
+
// swallow
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function main() {
|
|
116
|
+
const connector = process.env["USAGE_CONNECTOR_NAME"];
|
|
117
|
+
if (!connector) return;
|
|
118
|
+
|
|
119
|
+
let raw;
|
|
120
|
+
try { raw = readFileSync(0, "utf-8"); } catch { return; }
|
|
121
|
+
let sessionId = "unknown";
|
|
122
|
+
try {
|
|
123
|
+
const p = JSON.parse(raw || "{}");
|
|
124
|
+
if (typeof p.session_id === "string") sessionId = p.session_id;
|
|
125
|
+
} catch {}
|
|
126
|
+
|
|
127
|
+
const baseDir =
|
|
128
|
+
process.env["USAGE_STORAGE_DIR"] ||
|
|
129
|
+
join(process.cwd(), ".claude", "connectors", connector, "usage");
|
|
130
|
+
|
|
131
|
+
summarizeSession(baseDir, connector, sessionId);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Only auto-run when executed directly (not when imported by stale-summarize.mjs).
|
|
135
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
136
|
+
try { main(); } catch {}
|
|
137
|
+
process.exit(0);
|
|
138
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// SessionStart hook — summarize any orphaned <sid>.jsonl whose mtime is older
|
|
3
|
+
// than USAGE_SUMMARY_STALE_HOURS and has no matching summary-<sid>.json.
|
|
4
|
+
|
|
5
|
+
import { readdirSync, statSync, readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
// Reuse summarizeSession by re-importing — but importing a sibling .mjs means
|
|
8
|
+
// the same file must be runnable standalone AND exportable. Simpler: inline
|
|
9
|
+
// a tiny wrapper that delegates to session-summary.mjs via dynamic import.
|
|
10
|
+
|
|
11
|
+
async function main() {
|
|
12
|
+
const connector = process.env["USAGE_CONNECTOR_NAME"];
|
|
13
|
+
if (!connector) return;
|
|
14
|
+
const staleHours = Number(process.env["USAGE_SUMMARY_STALE_HOURS"] ?? "12");
|
|
15
|
+
if (!Number.isFinite(staleHours) || staleHours <= 0) return;
|
|
16
|
+
|
|
17
|
+
const baseDir =
|
|
18
|
+
process.env["USAGE_STORAGE_DIR"] ||
|
|
19
|
+
join(process.cwd(), ".claude", "connectors", connector, "usage");
|
|
20
|
+
|
|
21
|
+
let entries;
|
|
22
|
+
try { entries = readdirSync(baseDir); } catch { return; }
|
|
23
|
+
|
|
24
|
+
const cutoff = Date.now() - staleHours * 60 * 60 * 1000;
|
|
25
|
+
|
|
26
|
+
// Dynamic-import the sibling summarizer module.
|
|
27
|
+
let summarizeSession;
|
|
28
|
+
try {
|
|
29
|
+
const mod = await import(new URL("./session-summary.mjs", import.meta.url).href);
|
|
30
|
+
summarizeSession = mod.summarizeSession;
|
|
31
|
+
} catch {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (typeof summarizeSession !== "function") return;
|
|
35
|
+
|
|
36
|
+
for (const name of entries) {
|
|
37
|
+
if (!name.endsWith(".jsonl")) continue;
|
|
38
|
+
const sessionId = name.slice(0, -".jsonl".length);
|
|
39
|
+
const summaryPath = join(baseDir, `summary-${sessionId}.json`);
|
|
40
|
+
if (existsSync(summaryPath)) continue;
|
|
41
|
+
let st;
|
|
42
|
+
try { st = statSync(join(baseDir, name)); } catch { continue; }
|
|
43
|
+
if (st.mtimeMs > cutoff) continue;
|
|
44
|
+
try { summarizeSession(baseDir, connector, sessionId); } catch {}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Retention pass — gzip old files, delete very-old gz files.
|
|
48
|
+
const gzipDays = Number(process.env["USAGE_RETENTION_GZIP_DAYS"] ?? "30");
|
|
49
|
+
const deleteDays = Number(process.env["USAGE_RETENTION_DELETE_DAYS"] ?? "180");
|
|
50
|
+
if ((Number.isFinite(gzipDays) && gzipDays > 0) || (Number.isFinite(deleteDays) && deleteDays > 0)) {
|
|
51
|
+
try {
|
|
52
|
+
const { runRetention } = await import(
|
|
53
|
+
new URL(
|
|
54
|
+
"../dist/usage/retention.js",
|
|
55
|
+
import.meta.url,
|
|
56
|
+
).href,
|
|
57
|
+
);
|
|
58
|
+
if (typeof runRetention === "function") {
|
|
59
|
+
await runRetention(baseDir, {
|
|
60
|
+
gzipDays: Number.isFinite(gzipDays) ? gzipDays : 0,
|
|
61
|
+
deleteDays: Number.isFinite(deleteDays) ? deleteDays : 0,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
} catch {
|
|
65
|
+
// swallow — retention is best-effort
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
main().catch(() => {}).finally(() => process.exit(0));
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Toolkit-shipped PostToolUse hook. Appends one JSONL line per Bash call
|
|
3
|
+
// that invoked this plugin's connector CLI. Fail-soft: errors exit 0.
|
|
4
|
+
|
|
5
|
+
import { readFileSync, appendFileSync, mkdirSync } from "node:fs";
|
|
6
|
+
import { dirname, join } from "node:path";
|
|
7
|
+
|
|
8
|
+
async function main() {
|
|
9
|
+
if (process.env["USAGE_TRACKING_ENABLED"] === "0") return;
|
|
10
|
+
|
|
11
|
+
const connector = process.env["USAGE_CONNECTOR_NAME"];
|
|
12
|
+
const hint = process.env["USAGE_BIN_HINT"];
|
|
13
|
+
if (!connector || !hint) return;
|
|
14
|
+
|
|
15
|
+
// Read hook payload from stdin (Claude Code sends JSON on stdin).
|
|
16
|
+
let raw;
|
|
17
|
+
try {
|
|
18
|
+
raw = readFileSync(0, "utf-8");
|
|
19
|
+
} catch {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (!raw) return;
|
|
23
|
+
|
|
24
|
+
let payload;
|
|
25
|
+
try {
|
|
26
|
+
payload = JSON.parse(raw);
|
|
27
|
+
} catch {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (payload.tool_name !== "Bash") return;
|
|
32
|
+
|
|
33
|
+
const command =
|
|
34
|
+
(payload.tool_input && typeof payload.tool_input.command === "string"
|
|
35
|
+
? payload.tool_input.command
|
|
36
|
+
: "") || "";
|
|
37
|
+
if (!command.includes(hint)) return;
|
|
38
|
+
|
|
39
|
+
const stdout =
|
|
40
|
+
(payload.tool_response &&
|
|
41
|
+
typeof payload.tool_response.stdout === "string" &&
|
|
42
|
+
payload.tool_response.stdout) ||
|
|
43
|
+
"";
|
|
44
|
+
const response_bytes = Buffer.byteLength(stdout, "utf-8");
|
|
45
|
+
// Tokenizer: heuristic by default, gpt-4o when opted in. Never throws.
|
|
46
|
+
let estimated_tokens = Math.ceil(response_bytes / 4);
|
|
47
|
+
let token_method = "heuristic";
|
|
48
|
+
const tokenizer = process.env["USAGE_TOKENIZER"];
|
|
49
|
+
if (tokenizer && tokenizer !== "heuristic") {
|
|
50
|
+
try {
|
|
51
|
+
if (tokenizer === "gpt-4o") {
|
|
52
|
+
const mod = await import("gpt-tokenizer").catch(() => null);
|
|
53
|
+
if (mod && typeof mod.encode === "function") {
|
|
54
|
+
estimated_tokens = mod.encode(stdout).length;
|
|
55
|
+
token_method = "gpt-4o";
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Unknown methods fall through; heuristic already set.
|
|
59
|
+
} catch {
|
|
60
|
+
// fallback already in place
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Parse --action from command.
|
|
65
|
+
const actionMatch = command.match(/--action\s+([A-Za-z0-9_-]+)/);
|
|
66
|
+
const action = actionMatch ? actionMatch[1] : "unknown";
|
|
67
|
+
|
|
68
|
+
// Parse envelope status.
|
|
69
|
+
let status = "unparseable";
|
|
70
|
+
try {
|
|
71
|
+
const env = JSON.parse(stdout);
|
|
72
|
+
if (env && typeof env.status === "string") status = env.status;
|
|
73
|
+
} catch {
|
|
74
|
+
// status stays "unparseable"
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const execution_time_ms =
|
|
78
|
+
typeof payload.execution_time_ms === "number"
|
|
79
|
+
? payload.execution_time_ms
|
|
80
|
+
: undefined;
|
|
81
|
+
|
|
82
|
+
const record = {
|
|
83
|
+
ts: new Date().toISOString(),
|
|
84
|
+
session_id: String(payload.session_id ?? "unknown"),
|
|
85
|
+
connector,
|
|
86
|
+
action,
|
|
87
|
+
status,
|
|
88
|
+
response_bytes,
|
|
89
|
+
estimated_tokens,
|
|
90
|
+
token_method,
|
|
91
|
+
...(execution_time_ms !== undefined ? { execution_time_ms } : {}),
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const baseDir =
|
|
95
|
+
process.env["USAGE_STORAGE_DIR"] ||
|
|
96
|
+
join(process.cwd(), ".claude", "connectors", connector, "usage");
|
|
97
|
+
const file = join(baseDir, `${record.session_id}.jsonl`);
|
|
98
|
+
|
|
99
|
+
try {
|
|
100
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
101
|
+
appendFileSync(file, JSON.stringify(record) + "\n", "utf-8");
|
|
102
|
+
} catch {
|
|
103
|
+
// swallow
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
try {
|
|
108
|
+
await main();
|
|
109
|
+
} catch {
|
|
110
|
+
// never propagate
|
|
111
|
+
}
|
|
112
|
+
process.exit(0);
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# aws-agent-plugin
|
|
2
|
+
|
|
3
|
+
Claude Code plugin that wraps [`@narai/aws-agent-connector`](https://www.npmjs.com/package/@narai/aws-agent-connector) as a read-only AWS skill and slash command.
|
|
4
|
+
|
|
5
|
+
## What it adds
|
|
6
|
+
|
|
7
|
+
- **Skill** `aws-agent` — invoked automatically when the model is asked about AWS Lambda, RDS, S3, or CloudWatch.
|
|
8
|
+
- **Slash command** `/aws-agent <action> <params-json>` — explicit invocation.
|
|
9
|
+
- **Binary** `aws-agent` — thin shell shim that exec's the installed connector CLI.
|
|
10
|
+
|
|
11
|
+
## How install works
|
|
12
|
+
|
|
13
|
+
Claude Code plugins don't run `npm install`. On first `SessionStart` the
|
|
14
|
+
hook in `hooks/hooks.json`:
|
|
15
|
+
|
|
16
|
+
1. compares the plugin's `package.json` with whatever is in
|
|
17
|
+
`${CLAUDE_PLUGIN_DATA}/`;
|
|
18
|
+
2. if different or missing, copies the manifest and runs
|
|
19
|
+
`npm install --no-audit --no-fund` inside `${CLAUDE_PLUGIN_DATA}`;
|
|
20
|
+
3. if the install fails, removes the stale copy so the hook re-runs
|
|
21
|
+
next session.
|
|
22
|
+
|
|
23
|
+
After a successful install,
|
|
24
|
+
`${CLAUDE_PLUGIN_DATA}/node_modules/@narai/aws-agent-connector/dist/cli.js`
|
|
25
|
+
exists and `bin/aws-agent` can exec it.
|
|
26
|
+
|
|
27
|
+
## Usage
|
|
28
|
+
|
|
29
|
+
Inside Claude Code:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
/aws-agent list_functions {"region":"us-east-1","prefix":"acme-"}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Or let the `aws-agent` skill be triggered automatically by asking about
|
|
36
|
+
AWS resources.
|
|
37
|
+
|
|
38
|
+
## AWS credentials
|
|
39
|
+
|
|
40
|
+
The connector uses the default AWS credential chain — profiles, env
|
|
41
|
+
vars, instance roles, and so on. No credentials are stored by this
|
|
42
|
+
plugin.
|
|
43
|
+
|
|
44
|
+
## License
|
|
45
|
+
|
|
46
|
+
MIT
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# aws-agent — thin shim over @narai/aws-agent-connector.
|
|
3
|
+
#
|
|
4
|
+
# The SessionStart hook in hooks/hooks.json installs the npm package into
|
|
5
|
+
# ${CLAUDE_PLUGIN_DATA}/node_modules on first session. This shim exec's
|
|
6
|
+
# that CLI.
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
if [ -z "${CLAUDE_PLUGIN_DATA:-}" ]; then
|
|
10
|
+
echo "aws-agent: CLAUDE_PLUGIN_DATA is not set (run from inside Claude Code)" >&2
|
|
11
|
+
exit 2
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
CLI="${CLAUDE_PLUGIN_DATA}/node_modules/@narai/aws-agent-connector/dist/cli.js"
|
|
15
|
+
|
|
16
|
+
if [ ! -f "$CLI" ]; then
|
|
17
|
+
echo "aws-agent: connector CLI not found at $CLI" >&2
|
|
18
|
+
echo "Restart your Claude Code session to re-run the SessionStart install hook." >&2
|
|
19
|
+
exit 2
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
exec node "$CLI" "$@"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hooks": {
|
|
3
|
+
"SessionStart": [
|
|
4
|
+
{
|
|
5
|
+
"hooks": [
|
|
6
|
+
{
|
|
7
|
+
"type": "command",
|
|
8
|
+
"command": "diff -q \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/package.json\" >/dev/null 2>&1 || (mkdir -p \"${CLAUDE_PLUGIN_DATA}\" && cp \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/\" && cd \"${CLAUDE_PLUGIN_DATA}\" && npm install --no-audit --no-fund) || rm -f \"${CLAUDE_PLUGIN_DATA}/package.json\""
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"type": "command",
|
|
12
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT}/plugin/hooks/reminder.mjs\" 2>/dev/null || true"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"type": "command",
|
|
16
|
+
"command": "node \"${CLAUDE_PLUGIN_DATA}/node_modules/@narai/connector-toolkit/plugin-hooks/stale-summarize.mjs\" 2>/dev/null || true",
|
|
17
|
+
"env": { "USAGE_CONNECTOR_NAME": "aws" }
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"PostToolUse": [
|
|
23
|
+
{
|
|
24
|
+
"matcher": "Bash",
|
|
25
|
+
"hooks": [
|
|
26
|
+
{
|
|
27
|
+
"type": "command",
|
|
28
|
+
"command": "node \"${CLAUDE_PLUGIN_DATA}/node_modules/@narai/connector-toolkit/plugin-hooks/usage-record.mjs\" 2>/dev/null || true",
|
|
29
|
+
"env": {
|
|
30
|
+
"USAGE_CONNECTOR_NAME": "aws",
|
|
31
|
+
"USAGE_BIN_HINT": "@narai/aws-agent-connector"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"SessionEnd": [
|
|
38
|
+
{
|
|
39
|
+
"hooks": [
|
|
40
|
+
{
|
|
41
|
+
"type": "command",
|
|
42
|
+
"command": "node \"${CLAUDE_PLUGIN_DATA}/node_modules/@narai/connector-toolkit/plugin-hooks/session-summary.mjs\" 2>/dev/null || true",
|
|
43
|
+
"env": { "USAGE_CONNECTOR_NAME": "aws" }
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* SessionStart curation reminder for the AWS connector.
|
|
4
|
+
*/
|
|
5
|
+
try {
|
|
6
|
+
const data = process.env.CLAUDE_PLUGIN_DATA;
|
|
7
|
+
if (!data) process.exit(0);
|
|
8
|
+
const toolkitEntry = `${data}/node_modules/@narai/connector-toolkit/dist/plugin/reminder.js`;
|
|
9
|
+
const mod = await import(toolkitEntry);
|
|
10
|
+
const decision = mod.evaluateNudge({ connectors: ["aws"] });
|
|
11
|
+
if (decision.nudge) {
|
|
12
|
+
process.stdout.write(decision.banner + "\n");
|
|
13
|
+
}
|
|
14
|
+
} catch {
|
|
15
|
+
// best-effort — reminder never blocks startup
|
|
16
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "aws-agent-plugin-runtime",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"description": "Runtime manifest for aws-agent-plugin. The SessionStart hook runs `npm install` on this manifest into ${CLAUDE_PLUGIN_DATA}.",
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"@narai/aws-agent-connector": "file:.."
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aws-agent
|
|
3
|
+
description: |
|
|
4
|
+
Use when the user asks about read-only AWS inventory — Lambda functions,
|
|
5
|
+
RDS databases, S3 buckets, or CloudWatch metrics in an AWS account. Queries
|
|
6
|
+
are scoped to a single region (except list_buckets, which is account-wide).
|
|
7
|
+
Never modifies AWS resources.
|
|
8
|
+
context: fork
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# AWS Agent
|
|
12
|
+
|
|
13
|
+
Answer the user's question by invoking the `aws-agent` binary exposed by
|
|
14
|
+
this plugin. It delegates to `@narai/aws-agent-connector`, which speaks to
|
|
15
|
+
AWS via the read-only SDK v3 surface.
|
|
16
|
+
|
|
17
|
+
## Invocation
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
aws-agent --action <action> --params '<json>'
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The CLI writes a single JSON envelope to stdout and exits 0 on success, 1 on
|
|
24
|
+
a handled error, 2 on CLI misuse. Return the envelope verbatim to the
|
|
25
|
+
orchestrator — do not paraphrase or re-format.
|
|
26
|
+
|
|
27
|
+
## Supported actions
|
|
28
|
+
|
|
29
|
+
| Action | Required params | Notes |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| `list_functions` | `region`, optional `prefix` | Returns Lambda functions in the region, optionally filtered by name prefix |
|
|
32
|
+
| `describe_db` | `region`, `db_identifier` | Returns an RDS instance's engine, version, endpoint, storage, and status |
|
|
33
|
+
| `list_buckets` | optional `prefix`, optional `region` | Returns S3 buckets across the account |
|
|
34
|
+
| `get_metrics` | `region`, `namespace`, `metric_name`, `dimensions`, optional `hours` (default 24, max 168) | CloudWatch datapoints at 5-min resolution |
|
|
35
|
+
|
|
36
|
+
Example:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
aws-agent --action list_functions --params '{"region":"us-east-1","prefix":"acme-"}'
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Envelope shape
|
|
43
|
+
|
|
44
|
+
Success:
|
|
45
|
+
```json
|
|
46
|
+
{"status": "success", "action": "<name>", "data": { ... }}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Error (handled):
|
|
50
|
+
```json
|
|
51
|
+
{"status": "error", "action": "<name>", "error_code": "<CODE>", "message": "...", "retriable": true}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Known error codes: `VALIDATION_ERROR`, `AUTH_ERROR`, `NOT_FOUND`,
|
|
55
|
+
`RATE_LIMITED`, `TIMEOUT`, `CONNECTION_ERROR`, `CONFIG_ERROR`,
|
|
56
|
+
`CONFIGURATION_ERROR`.
|
|
57
|
+
|
|
58
|
+
## Credentials
|
|
59
|
+
|
|
60
|
+
The connector uses the default AWS credential chain — profiles,
|
|
61
|
+
environment variables, instance/container/EKS roles — whichever is
|
|
62
|
+
configured on the host. If both `AWS_ACCESS_KEY_ID` and
|
|
63
|
+
`AWS_SECRET_ACCESS_KEY` are set via `@narai/credential-providers`, those
|
|
64
|
+
take precedence.
|
|
65
|
+
|
|
66
|
+
## Safety
|
|
67
|
+
|
|
68
|
+
Read-only by construction: only `Describe*`, `List*`, and `Get*` SDK
|
|
69
|
+
commands are whitelisted inside the connector. Write/modify operations
|
|
70
|
+
cannot be invoked through this skill.
|