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/dist/hub/plan.js
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/** Planner-prompt builder, response JSON extraction, plan validation, and the
|
|
2
|
+
* default Agent SDK planner. */
|
|
3
|
+
/** Build the system prompt by concatenating each connector's SKILL.md verbatim. */
|
|
4
|
+
export function buildSystemPrompt(connectors) {
|
|
5
|
+
const sorted = [...connectors].sort((a, b) => a.name.localeCompare(b.name));
|
|
6
|
+
const intro = "You are a planner for a set of read-only data connectors. Below is the documentation for each connector you may call, copied verbatim from its plugin skill.";
|
|
7
|
+
const sections = sorted.map((c) => `## Connector: \`${c.name}\`\n\n${c.skillContent.trim()}\n`);
|
|
8
|
+
const tail = 'Given the user\'s prompt, return JSON: an array of objects with shape `{"connector": "<name>", "action": "<action>", "params": { ... }}`. Do not include any call whose required params you cannot fill from the prompt. Return `[]` if no connector is relevant. Return JSON only, no prose.';
|
|
9
|
+
return [intro, ...sections, tail].join("\n\n");
|
|
10
|
+
}
|
|
11
|
+
/** Build the user-facing prompt portion. */
|
|
12
|
+
export function buildUserPrompt(prompt, extraContext) {
|
|
13
|
+
if (extraContext === undefined || extraContext.trim() === "")
|
|
14
|
+
return prompt;
|
|
15
|
+
return `${prompt}\n\n--- extra context ---\n${extraContext}`;
|
|
16
|
+
}
|
|
17
|
+
/** Extract a JSON array from a possibly-prose-wrapped LLM response.
|
|
18
|
+
* Returns the parsed value (typed `unknown`), or throws on failure. */
|
|
19
|
+
export function extractJsonArray(raw) {
|
|
20
|
+
// First try a clean parse — best case, the model returned only JSON.
|
|
21
|
+
const trimmed = raw.trim();
|
|
22
|
+
try {
|
|
23
|
+
return JSON.parse(trimmed);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// fall through
|
|
27
|
+
}
|
|
28
|
+
// Greedy match the first `[ ... ]` block. Defensive but acceptable for V1.
|
|
29
|
+
const match = trimmed.match(/\[[\s\S]*\]/);
|
|
30
|
+
if (match === null) {
|
|
31
|
+
throw new Error("no JSON array found in planner response");
|
|
32
|
+
}
|
|
33
|
+
return JSON.parse(match[0]);
|
|
34
|
+
}
|
|
35
|
+
/** Validate raw plan entries; drop malformed ones with a recorded reason. */
|
|
36
|
+
export function validatePlan(raw, enabledConnectors) {
|
|
37
|
+
if (!Array.isArray(raw)) {
|
|
38
|
+
return { valid: [], invalid: [{ entry: raw, reason: "plan is not an array" }] };
|
|
39
|
+
}
|
|
40
|
+
const valid = [];
|
|
41
|
+
const invalid = [];
|
|
42
|
+
for (const entry of raw) {
|
|
43
|
+
if (!isPlainObject(entry)) {
|
|
44
|
+
invalid.push({ entry, reason: "entry is not a plain object" });
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const { connector, action, params } = entry;
|
|
48
|
+
if (typeof connector !== "string" || !enabledConnectors.has(connector)) {
|
|
49
|
+
invalid.push({ entry, reason: `unknown connector '${String(connector)}'` });
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (typeof action !== "string" || action === "") {
|
|
53
|
+
invalid.push({ entry, reason: "missing or empty action" });
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (!isPlainObject(params)) {
|
|
57
|
+
invalid.push({ entry, reason: "params must be a plain object" });
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
valid.push({ connector, action, params });
|
|
61
|
+
}
|
|
62
|
+
return { valid, invalid };
|
|
63
|
+
}
|
|
64
|
+
function isPlainObject(v) {
|
|
65
|
+
return v !== null && typeof v === "object" && !Array.isArray(v);
|
|
66
|
+
}
|
|
67
|
+
/** Default planner: invokes `@anthropic-ai/claude-agent-sdk` `query()`. */
|
|
68
|
+
export class AgentSdkPlanner {
|
|
69
|
+
async plan(systemPrompt, userPrompt) {
|
|
70
|
+
let query;
|
|
71
|
+
try {
|
|
72
|
+
({ query } = await import("@anthropic-ai/claude-agent-sdk"));
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
throw new Error(`failed to load @anthropic-ai/claude-agent-sdk: ${err.message}`);
|
|
76
|
+
}
|
|
77
|
+
const iter = query({
|
|
78
|
+
prompt: userPrompt,
|
|
79
|
+
options: {
|
|
80
|
+
systemPrompt,
|
|
81
|
+
maxTurns: 1,
|
|
82
|
+
// The planner does not need any tools; it returns JSON via assistant text.
|
|
83
|
+
tools: [],
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
let final = "";
|
|
87
|
+
for await (const msg of iter) {
|
|
88
|
+
if (msg.type === "result") {
|
|
89
|
+
if (msg.subtype === "success") {
|
|
90
|
+
final = msg.result;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
throw new Error(`planner failed: ${msg.subtype}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (final === "") {
|
|
98
|
+
throw new Error("planner returned no result");
|
|
99
|
+
}
|
|
100
|
+
return final;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/hub/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** Public types for `@narai/connector-hub`. */
|
|
2
|
+
import type { ResolvedConnector, LoadOptions, ResolvedConfig } from "narai-primitives/config";
|
|
3
|
+
import type { ResolvedAgentCli } from "narai-primitives/toolkit";
|
|
4
|
+
export interface GatherInput {
|
|
5
|
+
prompt: string;
|
|
6
|
+
consumer?: string;
|
|
7
|
+
environment?: string;
|
|
8
|
+
extraContext?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface PlanStep {
|
|
11
|
+
connector: string;
|
|
12
|
+
action: string;
|
|
13
|
+
params: Record<string, unknown>;
|
|
14
|
+
}
|
|
15
|
+
export interface DispatchError {
|
|
16
|
+
code: string;
|
|
17
|
+
message: string;
|
|
18
|
+
}
|
|
19
|
+
export interface DispatchResult {
|
|
20
|
+
step: number;
|
|
21
|
+
connector: string;
|
|
22
|
+
action: string;
|
|
23
|
+
params: Record<string, unknown>;
|
|
24
|
+
envelope?: unknown;
|
|
25
|
+
error?: DispatchError;
|
|
26
|
+
}
|
|
27
|
+
export interface GatherOutput {
|
|
28
|
+
plan: PlanStep[];
|
|
29
|
+
results: DispatchResult[];
|
|
30
|
+
}
|
|
31
|
+
/** Pluggable planner — an implementation that returns a raw LLM response string. */
|
|
32
|
+
export interface Planner {
|
|
33
|
+
plan(systemPrompt: string, userPrompt: string): Promise<string>;
|
|
34
|
+
}
|
|
35
|
+
/** A resolved connector + the bin needed to invoke it + its SKILL.md content. */
|
|
36
|
+
export interface PreparedConnector {
|
|
37
|
+
name: string;
|
|
38
|
+
binCommand: string;
|
|
39
|
+
binArgs: string[];
|
|
40
|
+
skillContent: string;
|
|
41
|
+
slice: ResolvedConnector;
|
|
42
|
+
}
|
|
43
|
+
/** Options for `child_process.spawn`-style injection. */
|
|
44
|
+
export interface SpawnOpts {
|
|
45
|
+
env?: NodeJS.ProcessEnv;
|
|
46
|
+
}
|
|
47
|
+
/** Minimal handle returned by an injected spawn fn. */
|
|
48
|
+
export interface SpawnedHandle {
|
|
49
|
+
stdout: NodeJS.ReadableStream;
|
|
50
|
+
stderr: NodeJS.ReadableStream;
|
|
51
|
+
on(event: "exit", listener: (code: number | null) => void): void;
|
|
52
|
+
on(event: "error", listener: (err: Error) => void): void;
|
|
53
|
+
}
|
|
54
|
+
export type SpawnFn = (cmd: string, args: string[], opts: SpawnOpts) => SpawnedHandle;
|
|
55
|
+
export type ConfigLoader = (opts: LoadOptions) => Promise<ResolvedConfig>;
|
|
56
|
+
/** Resolves a connector's CLI bin from its short name. Defaults to `resolveAgentCli`. */
|
|
57
|
+
export type CliResolver = (name: string) => ResolvedAgentCli | null;
|
|
58
|
+
export interface GatherDeps {
|
|
59
|
+
planner?: Planner;
|
|
60
|
+
spawnProcess?: SpawnFn;
|
|
61
|
+
configLoader?: ConfigLoader;
|
|
62
|
+
/** Override the default `resolveAgentCli` (used by tests). */
|
|
63
|
+
cliResolver?: CliResolver;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hub/types.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,oFAAoF;AACpF,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACjE;AAED,iFAAiF;AACjF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAED,yDAAyD;AACzD,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,uDAAuD;AACvD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IACjE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;CAC1D;AAED,MAAM,MAAM,OAAO,GAAG,CACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,SAAS,KACZ,aAAa,CAAC;AAEnB,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAE1E,yFAAyF;AACzF,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,gBAAgB,GAAG,IAAI,CAAC;AAEpE,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hub/types.ts"],"names":[],"mappings":"AAAA,+CAA+C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wrap a dynamic `import(modName)` so that `ERR_MODULE_NOT_FOUND` (and the
|
|
3
|
+
* older CommonJS `MODULE_NOT_FOUND`) becomes a friendly error matching the
|
|
4
|
+
* Python `ImportError` style: the user sees the package name and the exact
|
|
5
|
+
* `npm install` command needed.
|
|
6
|
+
*
|
|
7
|
+
* Anything other than a not-found error is rethrown unchanged — we don't
|
|
8
|
+
* want to swallow real import failures (syntax errors, etc.).
|
|
9
|
+
*/
|
|
10
|
+
export declare function importOptional<T>(modName: string, installName?: string): Promise<T>;
|
|
11
|
+
export declare function isBinaryOnPath(binaryName: string): boolean;
|
|
12
|
+
/** Test helper — wipe the PATH probe cache between tests. */
|
|
13
|
+
export declare function _resetBinaryProbeCache(): void;
|
|
14
|
+
//# sourceMappingURL=_optional.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_optional.d.ts","sourceRoot":"","sources":["../../src/toolkit/_optional.ts"],"names":[],"mappings":"AAqBA;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,CAAC,CA8BZ;AAsBD,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAiB1D;AAED,6DAA6D;AAC7D,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* _optional.ts — shared helpers for graceful degradation when an optional
|
|
3
|
+
* dependency is missing.
|
|
4
|
+
*
|
|
5
|
+
* Two primitives:
|
|
6
|
+
* - `importOptional(modName, installName?)`: wrap a dynamic `import(x)` so
|
|
7
|
+
* an unresolvable module raises a user-friendly `Error` naming the
|
|
8
|
+
* npm package and the exact install command, matching the Python
|
|
9
|
+
* reference's `ImportError` style. Promoted from `extract_binary.ts`
|
|
10
|
+
* so `extract_multimodal.ts` can reuse it.
|
|
11
|
+
* - `isBinaryOnPath(binaryName)`: probe `PATH` for an external CLI tool
|
|
12
|
+
* (e.g. `faster-whisper`, `yt-dlp`) by running `<bin> --version` via
|
|
13
|
+
* `spawnSync` and returning whether the exit code was 0. Suppresses
|
|
14
|
+
* stdio, safe to call in hot paths. Backbone of the multimodal
|
|
15
|
+
* feature flag (`multimodal.enabled: optional`) — callers surface a
|
|
16
|
+
* warning when this returns false instead of erroring out.
|
|
17
|
+
*/
|
|
18
|
+
import { spawnSync } from "node:child_process";
|
|
19
|
+
// ── Optional-dep loader ────────────────────────────────────────────
|
|
20
|
+
/**
|
|
21
|
+
* Wrap a dynamic `import(modName)` so that `ERR_MODULE_NOT_FOUND` (and the
|
|
22
|
+
* older CommonJS `MODULE_NOT_FOUND`) becomes a friendly error matching the
|
|
23
|
+
* Python `ImportError` style: the user sees the package name and the exact
|
|
24
|
+
* `npm install` command needed.
|
|
25
|
+
*
|
|
26
|
+
* Anything other than a not-found error is rethrown unchanged — we don't
|
|
27
|
+
* want to swallow real import failures (syntax errors, etc.).
|
|
28
|
+
*/
|
|
29
|
+
export async function importOptional(modName, installName) {
|
|
30
|
+
try {
|
|
31
|
+
return (await import(modName));
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
const err = e;
|
|
35
|
+
const msg = typeof err.message === "string" ? err.message : "";
|
|
36
|
+
// Match both Node's native loader (`ERR_MODULE_NOT_FOUND`) and
|
|
37
|
+
// Vitest/Vite's loader (message-shaped errors). Real syntax errors
|
|
38
|
+
// from inside a resolved module produce `SyntaxError` (name), which
|
|
39
|
+
// we intentionally do NOT rewrite — rewriting would hide user bugs.
|
|
40
|
+
const notFound = err.code === "ERR_MODULE_NOT_FOUND" ||
|
|
41
|
+
err.code === "MODULE_NOT_FOUND" ||
|
|
42
|
+
(err.name !== "SyntaxError" &&
|
|
43
|
+
(msg.includes("Failed to load url") ||
|
|
44
|
+
msg.includes("Cannot find module") ||
|
|
45
|
+
msg.includes("Cannot find package") ||
|
|
46
|
+
msg.includes("does not provide an export")));
|
|
47
|
+
if (notFound) {
|
|
48
|
+
const pkgName = installName ??
|
|
49
|
+
(modName.startsWith("@")
|
|
50
|
+
? modName.split("/").slice(0, 2).join("/")
|
|
51
|
+
: (modName.split("/")[0] ?? modName));
|
|
52
|
+
throw new Error(`Missing optional dependency '${pkgName}'. Install with: npm install ${pkgName}`);
|
|
53
|
+
}
|
|
54
|
+
throw e;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// ── PATH probing ────────────────────────────────────────────────────
|
|
58
|
+
/**
|
|
59
|
+
* Return true when `binaryName` is resolvable on `PATH` (i.e. the user's
|
|
60
|
+
* shell could run it). Implementation: invoke `<binaryName> --version`
|
|
61
|
+
* via `spawnSync` with stdio suppressed.
|
|
62
|
+
*
|
|
63
|
+
* `spawnSync` returns an object with:
|
|
64
|
+
* - `error` populated when the binary isn't found (ENOENT).
|
|
65
|
+
* - `status` set when the binary ran (even if `--version` isn't a real
|
|
66
|
+
* flag — we only care that the process launched, not its exit code).
|
|
67
|
+
*
|
|
68
|
+
* So presence = no error AND status is a number. Non-zero statuses still
|
|
69
|
+
* count as "present" because some legacy tools use `--version` for help.
|
|
70
|
+
*
|
|
71
|
+
* Never throws. Caches the result per binary name for the lifetime of
|
|
72
|
+
* the Node process (PATH doesn't change mid-run).
|
|
73
|
+
*/
|
|
74
|
+
const _probeCache = new Map();
|
|
75
|
+
export function isBinaryOnPath(binaryName) {
|
|
76
|
+
const cached = _probeCache.get(binaryName);
|
|
77
|
+
if (cached !== undefined)
|
|
78
|
+
return cached;
|
|
79
|
+
const result = spawnSync(binaryName, ["--version"], {
|
|
80
|
+
stdio: "ignore",
|
|
81
|
+
// Guard against a binary that hangs on --version: cap at 5s.
|
|
82
|
+
timeout: 5_000,
|
|
83
|
+
});
|
|
84
|
+
// spawnSync returns `error` set when the binary isn't found (ENOENT),
|
|
85
|
+
// or a non-null `status` / `signal` when it ran.
|
|
86
|
+
const present = result.error === undefined || result.error === null
|
|
87
|
+
? result.status !== null || result.signal !== null
|
|
88
|
+
: false;
|
|
89
|
+
_probeCache.set(binaryName, present);
|
|
90
|
+
return present;
|
|
91
|
+
}
|
|
92
|
+
/** Test helper — wipe the PATH probe cache between tests. */
|
|
93
|
+
export function _resetBinaryProbeCache() {
|
|
94
|
+
_probeCache.clear();
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=_optional.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_optional.js","sourceRoot":"","sources":["../../src/toolkit/_optional.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,sEAAsE;AAEtE;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAe,EACf,WAAoB;IAEpB,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAM,CAAC;IACtC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAA0B,CAAC;QACvC,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,+DAA+D;QAC/D,mEAAmE;QACnE,oEAAoE;QACpE,oEAAoE;QACpE,MAAM,QAAQ,GACZ,GAAG,CAAC,IAAI,KAAK,sBAAsB;YACnC,GAAG,CAAC,IAAI,KAAK,kBAAkB;YAC/B,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa;gBACzB,CAAC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC;oBACjC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC;oBAClC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC;oBACnC,GAAG,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GACX,WAAW;gBACX,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;oBACtB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;oBAC1C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,gCAAgC,OAAO,gCAAgC,OAAO,EAAE,CACjF,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAED,uEAAuE;AAEvE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmB,CAAC;AAE/C,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE;QAClD,KAAK,EAAE,QAAQ;QACf,6DAA6D;QAC7D,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IACH,sEAAsE;IACtE,iDAAiD;IACjD,MAAM,OAAO,GACX,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI;QACjD,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;QAClD,CAAC,CAAC,KAAK,CAAC;IACZ,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,sBAAsB;IACpC,WAAW,CAAC,KAAK,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent_cli — shared CLI argument parser for connector packages.
|
|
3
|
+
*
|
|
4
|
+
* Connectors all accept the same `--action <name> --params <json>` shape.
|
|
5
|
+
* This helper centralises the parser, keyed by an explicit set of valid
|
|
6
|
+
* flag names so unknown flags still throw. Each caller keeps its own
|
|
7
|
+
* help text and post-parse validation (e.g. JSON-shaped `--params`).
|
|
8
|
+
*/
|
|
9
|
+
/** Parsed result. Keys match the lowercase flag names. */
|
|
10
|
+
export interface ParsedAgentArgs {
|
|
11
|
+
/** The `<name>` portion of `--action <name>` or `--action=<name>`. */
|
|
12
|
+
action?: string;
|
|
13
|
+
/** The `<json>` portion of `--params <json>` or `--params=<json>`. */
|
|
14
|
+
params?: string;
|
|
15
|
+
/** `true` when `-h` / `--help` was passed. */
|
|
16
|
+
help?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** Closed set of valid flag names (without the leading `--`). */
|
|
19
|
+
export interface FlagSpec {
|
|
20
|
+
readonly flags: readonly string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Parse `argv` against a closed set of valid flag names.
|
|
24
|
+
*
|
|
25
|
+
* Accepted shapes:
|
|
26
|
+
* --flag value
|
|
27
|
+
* --flag=value
|
|
28
|
+
* -h / --help
|
|
29
|
+
*
|
|
30
|
+
* Throws on any positional, bare `-x`, or unrecognised `--name`.
|
|
31
|
+
*/
|
|
32
|
+
export declare function parseAgentArgs(argv: readonly string[], spec: FlagSpec): ParsedAgentArgs;
|
|
33
|
+
//# sourceMappingURL=agent_cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent_cli.d.ts","sourceRoot":"","sources":["../../src/toolkit/agent_cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,iEAAiE;AACjE,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,EAAE,QAAQ,GACb,eAAe,CAwCjB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent_cli — shared CLI argument parser for connector packages.
|
|
3
|
+
*
|
|
4
|
+
* Connectors all accept the same `--action <name> --params <json>` shape.
|
|
5
|
+
* This helper centralises the parser, keyed by an explicit set of valid
|
|
6
|
+
* flag names so unknown flags still throw. Each caller keeps its own
|
|
7
|
+
* help text and post-parse validation (e.g. JSON-shaped `--params`).
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Parse `argv` against a closed set of valid flag names.
|
|
11
|
+
*
|
|
12
|
+
* Accepted shapes:
|
|
13
|
+
* --flag value
|
|
14
|
+
* --flag=value
|
|
15
|
+
* -h / --help
|
|
16
|
+
*
|
|
17
|
+
* Throws on any positional, bare `-x`, or unrecognised `--name`.
|
|
18
|
+
*/
|
|
19
|
+
export function parseAgentArgs(argv, spec) {
|
|
20
|
+
const valid = new Set(spec.flags);
|
|
21
|
+
const out = {};
|
|
22
|
+
let i = 0;
|
|
23
|
+
while (i < argv.length) {
|
|
24
|
+
const a = argv[i];
|
|
25
|
+
if (a === undefined) {
|
|
26
|
+
i++;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (a === "-h" || a === "--help") {
|
|
30
|
+
out.help = true;
|
|
31
|
+
i++;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (!a.startsWith("--")) {
|
|
35
|
+
throw new Error(`unrecognized argument: ${a}`);
|
|
36
|
+
}
|
|
37
|
+
let name;
|
|
38
|
+
let value;
|
|
39
|
+
const eq = a.indexOf("=");
|
|
40
|
+
if (eq >= 0) {
|
|
41
|
+
name = a.slice(2, eq);
|
|
42
|
+
value = a.slice(eq + 1);
|
|
43
|
+
i++;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
name = a.slice(2);
|
|
47
|
+
value = argv[i + 1];
|
|
48
|
+
i += 2;
|
|
49
|
+
}
|
|
50
|
+
if (!valid.has(name)) {
|
|
51
|
+
throw new Error(`unrecognized argument: --${name}`);
|
|
52
|
+
}
|
|
53
|
+
if (name === "action") {
|
|
54
|
+
out.action = value ?? "";
|
|
55
|
+
}
|
|
56
|
+
else if (name === "params") {
|
|
57
|
+
out.params = value ?? "";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=agent_cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent_cli.js","sourceRoot":"","sources":["../../src/toolkit/agent_cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAuB,EACvB,IAAc;IAEd,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YACjC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAChB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,IAAY,CAAC;QACjB,IAAI,KAAyB,CAAC;QAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACZ,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACxB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClB,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,GAAG,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC;QAC3B,CAAC;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,GAAG,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent_resolver — locate a connector's CLI on disk via the canonical
|
|
3
|
+
* 4-step fallback every consumer (the hub, doc-wiki's wrappers, etc.) needs:
|
|
4
|
+
*
|
|
5
|
+
* 1. `<NAME>_AGENT_CLI` env var (operator escape hatch).
|
|
6
|
+
* 2. `~/.claude/plugins/cache/<name>-agent-plugin*` — populated by Claude
|
|
7
|
+
* Code's plugin manager.
|
|
8
|
+
* 3. `${CLAUDE_PLUGIN_DATA}/node_modules/<package>/<cliRelativePath>` —
|
|
9
|
+
* where the connector's `SessionStart` hook installs it.
|
|
10
|
+
* 4. `~/src/connectors/<name>-agent-connector/<cliRelativePath>` — the
|
|
11
|
+
* developer-machine fallback.
|
|
12
|
+
*
|
|
13
|
+
* Returns null if no candidate exists, so callers can fail with a clear
|
|
14
|
+
* message instead of crashing on `spawn`.
|
|
15
|
+
*/
|
|
16
|
+
export interface ResolveAgentCliOptions {
|
|
17
|
+
/** Connector short name (e.g. `"confluence"`, `"db"`, `"aws"`). */
|
|
18
|
+
name: string;
|
|
19
|
+
/** Override env-var name. Default: `<NAME>_AGENT_CLI` (uppercased + underscores for hyphens). */
|
|
20
|
+
envVar?: string;
|
|
21
|
+
/** Substring matched against entries in `~/.claude/plugins/cache/`. Default: `<name>-agent-plugin`. */
|
|
22
|
+
pluginNameContains?: string;
|
|
23
|
+
/** npm package the connector is published as. Default: `@narai/<name>-agent-connector`. */
|
|
24
|
+
packageName?: string;
|
|
25
|
+
/** CLI path within the package. Default: `dist/cli.js`. */
|
|
26
|
+
cliRelativePath?: string;
|
|
27
|
+
/** Dev-fallback root. Default: `~/src/connectors/`. */
|
|
28
|
+
devRoot?: string;
|
|
29
|
+
/** Override for `process.env`. Used by tests; production callers leave it alone. */
|
|
30
|
+
envOverride?: NodeJS.ProcessEnv;
|
|
31
|
+
/** Override for `os.homedir()`. Used by tests. */
|
|
32
|
+
homeOverride?: string;
|
|
33
|
+
}
|
|
34
|
+
export type ResolutionSource = "env" | "plugin-cache" | "claude-plugin-data" | "dev-fallback";
|
|
35
|
+
export interface ResolvedAgentCli {
|
|
36
|
+
/** Always `"node"` — connector CLIs are always invoked through node. */
|
|
37
|
+
command: string;
|
|
38
|
+
/** `[absoluteCliPath]`; pass to `child_process.spawn(command, [...args, ...callerArgs])`. */
|
|
39
|
+
args: string[];
|
|
40
|
+
/** Which fallback path produced the resolution. Useful for diagnostics. */
|
|
41
|
+
source: ResolutionSource;
|
|
42
|
+
/** Absolute path that was found on disk. */
|
|
43
|
+
resolvedPath: string;
|
|
44
|
+
}
|
|
45
|
+
export declare function resolveAgentCli(opts: ResolveAgentCliOptions): ResolvedAgentCli | null;
|
|
46
|
+
//# sourceMappingURL=agent_resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent_resolver.d.ts","sourceRoot":"","sources":["../../src/toolkit/agent_resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,MAAM,WAAW,sBAAsB;IACrC,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uGAAuG;IACvG,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2FAA2F;IAC3F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,gBAAgB,GACxB,KAAK,GACL,cAAc,GACd,oBAAoB,GACpB,cAAc,CAAC;AAEnB,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,6FAA6F;IAC7F,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,2EAA2E;IAC3E,MAAM,EAAE,gBAAgB,CAAC;IACzB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;CACtB;AAkBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,gBAAgB,GAAG,IAAI,CAiDrF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent_resolver — locate a connector's CLI on disk via the canonical
|
|
3
|
+
* 4-step fallback every consumer (the hub, doc-wiki's wrappers, etc.) needs:
|
|
4
|
+
*
|
|
5
|
+
* 1. `<NAME>_AGENT_CLI` env var (operator escape hatch).
|
|
6
|
+
* 2. `~/.claude/plugins/cache/<name>-agent-plugin*` — populated by Claude
|
|
7
|
+
* Code's plugin manager.
|
|
8
|
+
* 3. `${CLAUDE_PLUGIN_DATA}/node_modules/<package>/<cliRelativePath>` —
|
|
9
|
+
* where the connector's `SessionStart` hook installs it.
|
|
10
|
+
* 4. `~/src/connectors/<name>-agent-connector/<cliRelativePath>` — the
|
|
11
|
+
* developer-machine fallback.
|
|
12
|
+
*
|
|
13
|
+
* Returns null if no candidate exists, so callers can fail with a clear
|
|
14
|
+
* message instead of crashing on `spawn`.
|
|
15
|
+
*/
|
|
16
|
+
import * as fs from "node:fs";
|
|
17
|
+
import * as os from "node:os";
|
|
18
|
+
import * as path from "node:path";
|
|
19
|
+
function defaultEnvVar(name) {
|
|
20
|
+
return `${name.toUpperCase().replace(/-/g, "_")}_AGENT_CLI`;
|
|
21
|
+
}
|
|
22
|
+
function defaultPluginNameContains(name) {
|
|
23
|
+
return `${name}-agent-plugin`;
|
|
24
|
+
}
|
|
25
|
+
function defaultPackageName(name) {
|
|
26
|
+
return `@narai/${name}-agent-connector`;
|
|
27
|
+
}
|
|
28
|
+
function defaultDevRoot(home) {
|
|
29
|
+
return path.join(home, "src", "connectors");
|
|
30
|
+
}
|
|
31
|
+
export function resolveAgentCli(opts) {
|
|
32
|
+
const env = opts.envOverride ?? process.env;
|
|
33
|
+
const home = opts.homeOverride ?? os.homedir();
|
|
34
|
+
const envVar = opts.envVar ?? defaultEnvVar(opts.name);
|
|
35
|
+
const pluginContains = opts.pluginNameContains ?? defaultPluginNameContains(opts.name);
|
|
36
|
+
const packageName = opts.packageName ?? defaultPackageName(opts.name);
|
|
37
|
+
const cliRelative = opts.cliRelativePath ?? "dist/cli.js";
|
|
38
|
+
const devRoot = opts.devRoot ?? defaultDevRoot(home);
|
|
39
|
+
// 1. Explicit env-var override.
|
|
40
|
+
const envPath = env[envVar];
|
|
41
|
+
if (typeof envPath === "string" && envPath !== "" && fs.existsSync(envPath)) {
|
|
42
|
+
return { command: "node", args: [envPath], source: "env", resolvedPath: envPath };
|
|
43
|
+
}
|
|
44
|
+
// 2. Plugin cache lookup.
|
|
45
|
+
const pluginCache = path.join(home, ".claude", "plugins", "cache");
|
|
46
|
+
if (fs.existsSync(pluginCache)) {
|
|
47
|
+
let entries;
|
|
48
|
+
try {
|
|
49
|
+
entries = fs.readdirSync(pluginCache);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
entries = [];
|
|
53
|
+
}
|
|
54
|
+
for (const entry of entries) {
|
|
55
|
+
if (!entry.includes(pluginContains))
|
|
56
|
+
continue;
|
|
57
|
+
const candidate = path.join(pluginCache, entry, "node_modules", packageName, cliRelative);
|
|
58
|
+
if (fs.existsSync(candidate)) {
|
|
59
|
+
return { command: "node", args: [candidate], source: "plugin-cache", resolvedPath: candidate };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// 3. CLAUDE_PLUGIN_DATA install location.
|
|
64
|
+
const pluginData = env["CLAUDE_PLUGIN_DATA"];
|
|
65
|
+
if (typeof pluginData === "string" && pluginData !== "") {
|
|
66
|
+
const candidate = path.join(pluginData, "node_modules", packageName, cliRelative);
|
|
67
|
+
if (fs.existsSync(candidate)) {
|
|
68
|
+
return { command: "node", args: [candidate], source: "claude-plugin-data", resolvedPath: candidate };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// 4. Dev fallback.
|
|
72
|
+
const devCandidate = path.join(devRoot, `${opts.name}-agent-connector`, cliRelative);
|
|
73
|
+
if (fs.existsSync(devCandidate)) {
|
|
74
|
+
return { command: "node", args: [devCandidate], source: "dev-fallback", resolvedPath: devCandidate };
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=agent_resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent_resolver.js","sourceRoot":"","sources":["../../src/toolkit/agent_resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit event shapes. Every event becomes one line in a JSONL file.
|
|
3
|
+
*
|
|
4
|
+
* `event_type` is the discriminant; the union is open (extensible) because
|
|
5
|
+
* connectors may emit their own event types via `AuditWriter.logEvent`.
|
|
6
|
+
*/
|
|
7
|
+
export interface BaseEvent {
|
|
8
|
+
event_type: string;
|
|
9
|
+
timestamp: string;
|
|
10
|
+
session_id: string;
|
|
11
|
+
details?: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
/** Emitted on every action invocation (after policy gate). */
|
|
14
|
+
export interface ActionEvent extends BaseEvent {
|
|
15
|
+
event_type: "action";
|
|
16
|
+
connector: string;
|
|
17
|
+
action: string;
|
|
18
|
+
status: string;
|
|
19
|
+
execution_time_ms: number;
|
|
20
|
+
}
|
|
21
|
+
/** Policy-gate decision events. */
|
|
22
|
+
export interface PolicyEvent extends BaseEvent {
|
|
23
|
+
event_type: "policy_success" | "policy_denied" | "policy_escalate";
|
|
24
|
+
connector: string;
|
|
25
|
+
action: string;
|
|
26
|
+
reason: string;
|
|
27
|
+
kind: string;
|
|
28
|
+
aspects?: readonly string[];
|
|
29
|
+
}
|
|
30
|
+
/** Grant lifecycle. */
|
|
31
|
+
export interface GrantEvent extends BaseEvent {
|
|
32
|
+
event_type: "grant_added" | "grant_expired" | "grant_revoked";
|
|
33
|
+
grant_type: string;
|
|
34
|
+
ttl_seconds?: number;
|
|
35
|
+
}
|
|
36
|
+
/** Hardship — also written to JSONL via the hardship module, but audited too. */
|
|
37
|
+
export interface HardshipEvent extends BaseEvent {
|
|
38
|
+
event_type: "hardship_recorded";
|
|
39
|
+
connector: string;
|
|
40
|
+
action: string;
|
|
41
|
+
kind: string;
|
|
42
|
+
context: string;
|
|
43
|
+
}
|
|
44
|
+
export type AuditEvent = BaseEvent | ActionEvent | PolicyEvent | GrantEvent | HardshipEvent;
|
|
45
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/toolkit/audit/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,8DAA8D;AAC9D,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,UAAU,EAAE,QAAQ,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,mCAAmC;AACnC,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,UAAU,EACN,gBAAgB,GAChB,eAAe,GACf,iBAAiB,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,uBAAuB;AACvB,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC3C,UAAU,EAAE,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,iFAAiF;AACjF,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,UAAU,EAAE,mBAAmB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,WAAW,GACX,WAAW,GACX,UAAU,GACV,aAAa,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit event shapes. Every event becomes one line in a JSONL file.
|
|
3
|
+
*
|
|
4
|
+
* `event_type` is the discriminant; the union is open (extensible) because
|
|
5
|
+
* connectors may emit their own event types via `AuditWriter.logEvent`.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/toolkit/audit/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AuditEvent } from "./events.js";
|
|
2
|
+
export interface AuditWriterOptions {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
/** Absolute path to the JSONL file. Required when `enabled` is true. */
|
|
5
|
+
path?: string;
|
|
6
|
+
/** Fixed session id (tests). If omitted, a random 12-char hex is generated. */
|
|
7
|
+
sessionId?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function scrubSecrets(text: string): string;
|
|
10
|
+
export interface AuditWriter {
|
|
11
|
+
readonly enabled: boolean;
|
|
12
|
+
readonly sessionId: string;
|
|
13
|
+
logEvent(event: Omit<AuditEvent, "timestamp" | "session_id"> & Record<string, unknown>): void;
|
|
14
|
+
}
|
|
15
|
+
export declare function createAuditWriter(opts: AuditWriterOptions): AuditWriter;
|
|
16
|
+
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../src/toolkit/audit/writer.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjD;AAOD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CACN,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,YAAY,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5E,IAAI,CAAC;CACT;AA+CD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,WAAW,CAQvE"}
|