narai-primitives 2.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +64 -0
- package/dist/config/bootstrap.d.ts +28 -0
- package/dist/config/bootstrap.d.ts.map +1 -0
- package/dist/config/bootstrap.js +80 -0
- package/dist/config/bootstrap.js.map +1 -0
- package/dist/config/index.d.ts +13 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +12 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/load.d.ts +37 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +99 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/resolve.d.ts +23 -0
- package/dist/config/resolve.d.ts.map +1 -0
- package/dist/config/resolve.js +198 -0
- package/dist/config/resolve.js.map +1 -0
- package/dist/config/secrets.d.ts +20 -0
- package/dist/config/secrets.d.ts.map +1 -0
- package/dist/config/secrets.js +43 -0
- package/dist/config/secrets.js.map +1 -0
- package/dist/config/types.d.ts +104 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +11 -0
- package/dist/config/types.js.map +1 -0
- package/dist/connectors/aws/cli.d.ts +3 -0
- package/dist/connectors/aws/cli.d.ts.map +1 -0
- package/dist/connectors/aws/cli.js +27 -0
- package/dist/connectors/aws/cli.js.map +1 -0
- package/dist/connectors/aws/index.d.ts +27 -0
- package/dist/connectors/aws/index.d.ts.map +1 -0
- package/dist/connectors/aws/index.js +281 -0
- package/dist/connectors/aws/index.js.map +1 -0
- package/dist/connectors/aws/lib/aws_client.d.ts +140 -0
- package/dist/connectors/aws/lib/aws_client.d.ts.map +1 -0
- package/dist/connectors/aws/lib/aws_client.js +196 -0
- package/dist/connectors/aws/lib/aws_client.js.map +1 -0
- package/dist/connectors/aws/lib/aws_error.d.ts +10 -0
- package/dist/connectors/aws/lib/aws_error.d.ts.map +1 -0
- package/dist/connectors/aws/lib/aws_error.js +15 -0
- package/dist/connectors/aws/lib/aws_error.js.map +1 -0
- package/dist/connectors/confluence/cli.d.ts +3 -0
- package/dist/connectors/confluence/cli.d.ts.map +1 -0
- package/dist/connectors/confluence/cli.js +24 -0
- package/dist/connectors/confluence/cli.js.map +1 -0
- package/dist/connectors/confluence/index.d.ts +15 -0
- package/dist/connectors/confluence/index.d.ts.map +1 -0
- package/dist/connectors/confluence/index.js +295 -0
- package/dist/connectors/confluence/index.js.map +1 -0
- package/dist/connectors/confluence/lib/confluence_client.d.ts +135 -0
- package/dist/connectors/confluence/lib/confluence_client.d.ts.map +1 -0
- package/dist/connectors/confluence/lib/confluence_client.js +329 -0
- package/dist/connectors/confluence/lib/confluence_client.js.map +1 -0
- package/dist/connectors/confluence/lib/confluence_error.d.ts +13 -0
- package/dist/connectors/confluence/lib/confluence_error.d.ts.map +1 -0
- package/dist/connectors/confluence/lib/confluence_error.js +19 -0
- package/dist/connectors/confluence/lib/confluence_error.js.map +1 -0
- package/dist/connectors/db/cli.d.ts +5 -0
- package/dist/connectors/db/cli.d.ts.map +1 -0
- package/dist/connectors/db/cli.js +34 -0
- package/dist/connectors/db/cli.js.map +1 -0
- package/dist/connectors/db/config.d.ts +18 -0
- package/dist/connectors/db/config.d.ts.map +1 -0
- package/dist/connectors/db/config.js +142 -0
- package/dist/connectors/db/config.js.map +1 -0
- package/dist/connectors/db/connector.d.ts +31 -0
- package/dist/connectors/db/connector.d.ts.map +1 -0
- package/dist/connectors/db/connector.js +175 -0
- package/dist/connectors/db/connector.js.map +1 -0
- package/dist/connectors/db/dispatcher.d.ts +36 -0
- package/dist/connectors/db/dispatcher.d.ts.map +1 -0
- package/dist/connectors/db/dispatcher.js +597 -0
- package/dist/connectors/db/dispatcher.js.map +1 -0
- package/dist/connectors/db/index.d.ts +22 -0
- package/dist/connectors/db/index.d.ts.map +1 -0
- package/dist/connectors/db/index.js +26 -0
- package/dist/connectors/db/index.js.map +1 -0
- package/dist/connectors/db/lib/audit.d.ts +32 -0
- package/dist/connectors/db/lib/audit.d.ts.map +1 -0
- package/dist/connectors/db/lib/audit.js +130 -0
- package/dist/connectors/db/lib/audit.js.map +1 -0
- package/dist/connectors/db/lib/connection.d.ts +61 -0
- package/dist/connectors/db/lib/connection.d.ts.map +1 -0
- package/dist/connectors/db/lib/connection.js +326 -0
- package/dist/connectors/db/lib/connection.js.map +1 -0
- package/dist/connectors/db/lib/credentials.d.ts +60 -0
- package/dist/connectors/db/lib/credentials.d.ts.map +1 -0
- package/dist/connectors/db/lib/credentials.js +117 -0
- package/dist/connectors/db/lib/credentials.js.map +1 -0
- package/dist/connectors/db/lib/drivers/base.d.ts +83 -0
- package/dist/connectors/db/lib/drivers/base.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/base.js +46 -0
- package/dist/connectors/db/lib/drivers/base.js.map +1 -0
- package/dist/connectors/db/lib/drivers/dynamodb.d.ts +108 -0
- package/dist/connectors/db/lib/drivers/dynamodb.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/dynamodb.js +468 -0
- package/dist/connectors/db/lib/drivers/dynamodb.js.map +1 -0
- package/dist/connectors/db/lib/drivers/mongodb.d.ts +60 -0
- package/dist/connectors/db/lib/drivers/mongodb.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/mongodb.js +371 -0
- package/dist/connectors/db/lib/drivers/mongodb.js.map +1 -0
- package/dist/connectors/db/lib/drivers/mysql.d.ts +45 -0
- package/dist/connectors/db/lib/drivers/mysql.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/mysql.js +265 -0
- package/dist/connectors/db/lib/drivers/mysql.js.map +1 -0
- package/dist/connectors/db/lib/drivers/oracle.d.ts +53 -0
- package/dist/connectors/db/lib/drivers/oracle.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/oracle.js +350 -0
- package/dist/connectors/db/lib/drivers/oracle.js.map +1 -0
- package/dist/connectors/db/lib/drivers/postgresql.d.ts +65 -0
- package/dist/connectors/db/lib/drivers/postgresql.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/postgresql.js +294 -0
- package/dist/connectors/db/lib/drivers/postgresql.js.map +1 -0
- package/dist/connectors/db/lib/drivers/register.d.ts +16 -0
- package/dist/connectors/db/lib/drivers/register.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/register.js +111 -0
- package/dist/connectors/db/lib/drivers/register.js.map +1 -0
- package/dist/connectors/db/lib/drivers/sqlite.d.ts +11 -0
- package/dist/connectors/db/lib/drivers/sqlite.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/sqlite.js +147 -0
- package/dist/connectors/db/lib/drivers/sqlite.js.map +1 -0
- package/dist/connectors/db/lib/drivers/sqlserver.d.ts +58 -0
- package/dist/connectors/db/lib/drivers/sqlserver.d.ts.map +1 -0
- package/dist/connectors/db/lib/drivers/sqlserver.js +274 -0
- package/dist/connectors/db/lib/drivers/sqlserver.js.map +1 -0
- package/dist/connectors/db/lib/environments.d.ts +68 -0
- package/dist/connectors/db/lib/environments.d.ts.map +1 -0
- package/dist/connectors/db/lib/environments.js +53 -0
- package/dist/connectors/db/lib/environments.js.map +1 -0
- package/dist/connectors/db/lib/index.d.ts +28 -0
- package/dist/connectors/db/lib/index.d.ts.map +1 -0
- package/dist/connectors/db/lib/index.js +30 -0
- package/dist/connectors/db/lib/index.js.map +1 -0
- package/dist/connectors/db/lib/plugin_config.d.ts +64 -0
- package/dist/connectors/db/lib/plugin_config.d.ts.map +1 -0
- package/dist/connectors/db/lib/plugin_config.js +287 -0
- package/dist/connectors/db/lib/plugin_config.js.map +1 -0
- package/dist/connectors/db/lib/policy.d.ts +162 -0
- package/dist/connectors/db/lib/policy.d.ts.map +1 -0
- package/dist/connectors/db/lib/policy.js +581 -0
- package/dist/connectors/db/lib/policy.js.map +1 -0
- package/dist/connectors/db/lib/query.d.ts +22 -0
- package/dist/connectors/db/lib/query.d.ts.map +1 -0
- package/dist/connectors/db/lib/query.js +93 -0
- package/dist/connectors/db/lib/query.js.map +1 -0
- package/dist/connectors/db/lib/schema.d.ts +13 -0
- package/dist/connectors/db/lib/schema.d.ts.map +1 -0
- package/dist/connectors/db/lib/schema.js +80 -0
- package/dist/connectors/db/lib/schema.js.map +1 -0
- package/dist/connectors/gcp/cli.d.ts +3 -0
- package/dist/connectors/gcp/cli.d.ts.map +1 -0
- package/dist/connectors/gcp/cli.js +24 -0
- package/dist/connectors/gcp/cli.js.map +1 -0
- package/dist/connectors/gcp/index.d.ts +24 -0
- package/dist/connectors/gcp/index.d.ts.map +1 -0
- package/dist/connectors/gcp/index.js +205 -0
- package/dist/connectors/gcp/index.js.map +1 -0
- package/dist/connectors/gcp/lib/gcp_client.d.ts +88 -0
- package/dist/connectors/gcp/lib/gcp_client.d.ts.map +1 -0
- package/dist/connectors/gcp/lib/gcp_client.js +434 -0
- package/dist/connectors/gcp/lib/gcp_client.js.map +1 -0
- package/dist/connectors/gcp/lib/gcp_error.d.ts +10 -0
- package/dist/connectors/gcp/lib/gcp_error.d.ts.map +1 -0
- package/dist/connectors/gcp/lib/gcp_error.js +15 -0
- package/dist/connectors/gcp/lib/gcp_error.js.map +1 -0
- package/dist/connectors/github/cli.d.ts +3 -0
- package/dist/connectors/github/cli.d.ts.map +1 -0
- package/dist/connectors/github/cli.js +23 -0
- package/dist/connectors/github/cli.js.map +1 -0
- package/dist/connectors/github/index.d.ts +23 -0
- package/dist/connectors/github/index.d.ts.map +1 -0
- package/dist/connectors/github/index.js +462 -0
- package/dist/connectors/github/index.js.map +1 -0
- package/dist/connectors/github/lib/github_client.d.ts +181 -0
- package/dist/connectors/github/lib/github_client.d.ts.map +1 -0
- package/dist/connectors/github/lib/github_client.js +383 -0
- package/dist/connectors/github/lib/github_client.js.map +1 -0
- package/dist/connectors/github/lib/github_error.d.ts +11 -0
- package/dist/connectors/github/lib/github_error.d.ts.map +1 -0
- package/dist/connectors/github/lib/github_error.js +17 -0
- package/dist/connectors/github/lib/github_error.js.map +1 -0
- package/dist/connectors/jira/cli.d.ts +3 -0
- package/dist/connectors/jira/cli.d.ts.map +1 -0
- package/dist/connectors/jira/cli.js +24 -0
- package/dist/connectors/jira/cli.js.map +1 -0
- package/dist/connectors/jira/index.d.ts +13 -0
- package/dist/connectors/jira/index.d.ts.map +1 -0
- package/dist/connectors/jira/index.js +287 -0
- package/dist/connectors/jira/index.js.map +1 -0
- package/dist/connectors/jira/lib/adf.d.ts +25 -0
- package/dist/connectors/jira/lib/adf.d.ts.map +1 -0
- package/dist/connectors/jira/lib/adf.js +105 -0
- package/dist/connectors/jira/lib/adf.js.map +1 -0
- package/dist/connectors/jira/lib/jira_client.d.ts +143 -0
- package/dist/connectors/jira/lib/jira_client.d.ts.map +1 -0
- package/dist/connectors/jira/lib/jira_client.js +355 -0
- package/dist/connectors/jira/lib/jira_client.js.map +1 -0
- package/dist/connectors/jira/lib/jira_error.d.ts +11 -0
- package/dist/connectors/jira/lib/jira_error.d.ts.map +1 -0
- package/dist/connectors/jira/lib/jira_error.js +17 -0
- package/dist/connectors/jira/lib/jira_error.js.map +1 -0
- package/dist/connectors/notion/cli.d.ts +3 -0
- package/dist/connectors/notion/cli.d.ts.map +1 -0
- package/dist/connectors/notion/cli.js +22 -0
- package/dist/connectors/notion/cli.js.map +1 -0
- package/dist/connectors/notion/index.d.ts +20 -0
- package/dist/connectors/notion/index.d.ts.map +1 -0
- package/dist/connectors/notion/index.js +317 -0
- package/dist/connectors/notion/index.js.map +1 -0
- package/dist/connectors/notion/lib/notion_client.d.ts +117 -0
- package/dist/connectors/notion/lib/notion_client.d.ts.map +1 -0
- package/dist/connectors/notion/lib/notion_client.js +377 -0
- package/dist/connectors/notion/lib/notion_client.js.map +1 -0
- package/dist/connectors/notion/lib/notion_error.d.ts +12 -0
- package/dist/connectors/notion/lib/notion_error.d.ts.map +1 -0
- package/dist/connectors/notion/lib/notion_error.js +18 -0
- package/dist/connectors/notion/lib/notion_error.js.map +1 -0
- package/dist/hub/cli.d.ts +4 -0
- package/dist/hub/cli.d.ts.map +1 -0
- package/dist/hub/cli.js +93 -0
- package/dist/hub/cli.js.map +1 -0
- package/dist/hub/dispatch.d.ts +33 -0
- package/dist/hub/dispatch.d.ts.map +1 -0
- package/dist/hub/dispatch.js +297 -0
- package/dist/hub/dispatch.js.map +1 -0
- package/dist/hub/index.d.ts +9 -0
- package/dist/hub/index.d.ts.map +1 -0
- package/dist/hub/index.js +215 -0
- package/dist/hub/index.js.map +1 -0
- package/dist/hub/plan.d.ts +24 -0
- package/dist/hub/plan.d.ts.map +1 -0
- package/dist/hub/plan.js +103 -0
- package/dist/hub/plan.js.map +1 -0
- package/dist/hub/types.d.ts +65 -0
- package/dist/hub/types.d.ts.map +1 -0
- package/dist/hub/types.js +3 -0
- package/dist/hub/types.js.map +1 -0
- package/dist/toolkit/_optional.d.ts +14 -0
- package/dist/toolkit/_optional.d.ts.map +1 -0
- package/dist/toolkit/_optional.js +96 -0
- package/dist/toolkit/_optional.js.map +1 -0
- package/dist/toolkit/agent_cli.d.ts +33 -0
- package/dist/toolkit/agent_cli.d.ts.map +1 -0
- package/dist/toolkit/agent_cli.js +62 -0
- package/dist/toolkit/agent_cli.js.map +1 -0
- package/dist/toolkit/agent_resolver.d.ts +46 -0
- package/dist/toolkit/agent_resolver.d.ts.map +1 -0
- package/dist/toolkit/agent_resolver.js +78 -0
- package/dist/toolkit/agent_resolver.js.map +1 -0
- package/dist/toolkit/audit/events.d.ts +45 -0
- package/dist/toolkit/audit/events.d.ts.map +1 -0
- package/dist/toolkit/audit/events.js +8 -0
- package/dist/toolkit/audit/events.js.map +1 -0
- package/dist/toolkit/audit/writer.d.ts +16 -0
- package/dist/toolkit/audit/writer.d.ts.map +1 -0
- package/dist/toolkit/audit/writer.js +73 -0
- package/dist/toolkit/audit/writer.js.map +1 -0
- package/dist/toolkit/cli/usage-report.d.ts +3 -0
- package/dist/toolkit/cli/usage-report.d.ts.map +1 -0
- package/dist/toolkit/cli/usage-report.js +76 -0
- package/dist/toolkit/cli/usage-report.js.map +1 -0
- package/dist/toolkit/connector.d.ts +142 -0
- package/dist/toolkit/connector.d.ts.map +1 -0
- package/dist/toolkit/connector.js +593 -0
- package/dist/toolkit/connector.js.map +1 -0
- package/dist/toolkit/extract_binary.d.ts +45 -0
- package/dist/toolkit/extract_binary.d.ts.map +1 -0
- package/dist/toolkit/extract_binary.js +342 -0
- package/dist/toolkit/extract_binary.js.map +1 -0
- package/dist/toolkit/extract_multimodal.d.ts +22 -0
- package/dist/toolkit/extract_multimodal.d.ts.map +1 -0
- package/dist/toolkit/extract_multimodal.js +209 -0
- package/dist/toolkit/extract_multimodal.js.map +1 -0
- package/dist/toolkit/fetch_attachment.d.ts +21 -0
- package/dist/toolkit/fetch_attachment.d.ts.map +1 -0
- package/dist/toolkit/fetch_attachment.js +169 -0
- package/dist/toolkit/fetch_attachment.js.map +1 -0
- package/dist/toolkit/fetch_helper.d.ts +47 -0
- package/dist/toolkit/fetch_helper.d.ts.map +1 -0
- package/dist/toolkit/fetch_helper.js +124 -0
- package/dist/toolkit/fetch_helper.js.map +1 -0
- package/dist/toolkit/guardrail.d.ts +63 -0
- package/dist/toolkit/guardrail.d.ts.map +1 -0
- package/dist/toolkit/guardrail.js +166 -0
- package/dist/toolkit/guardrail.js.map +1 -0
- package/dist/toolkit/hardship/curate.d.ts +47 -0
- package/dist/toolkit/hardship/curate.d.ts.map +1 -0
- package/dist/toolkit/hardship/curate.js +113 -0
- package/dist/toolkit/hardship/curate.js.map +1 -0
- package/dist/toolkit/hardship/patterns.d.ts +32 -0
- package/dist/toolkit/hardship/patterns.d.ts.map +1 -0
- package/dist/toolkit/hardship/patterns.js +98 -0
- package/dist/toolkit/hardship/patterns.js.map +1 -0
- package/dist/toolkit/hardship/preamble.d.ts +13 -0
- package/dist/toolkit/hardship/preamble.d.ts.map +1 -0
- package/dist/toolkit/hardship/preamble.js +47 -0
- package/dist/toolkit/hardship/preamble.js.map +1 -0
- package/dist/toolkit/hardship/read.d.ts +34 -0
- package/dist/toolkit/hardship/read.d.ts.map +1 -0
- package/dist/toolkit/hardship/read.js +116 -0
- package/dist/toolkit/hardship/read.js.map +1 -0
- package/dist/toolkit/hardship/record.d.ts +43 -0
- package/dist/toolkit/hardship/record.d.ts.map +1 -0
- package/dist/toolkit/hardship/record.js +74 -0
- package/dist/toolkit/hardship/record.js.map +1 -0
- package/dist/toolkit/hardship/scope.d.ts +20 -0
- package/dist/toolkit/hardship/scope.d.ts.map +1 -0
- package/dist/toolkit/hardship/scope.js +56 -0
- package/dist/toolkit/hardship/scope.js.map +1 -0
- package/dist/toolkit/index.d.ts +42 -0
- package/dist/toolkit/index.d.ts.map +1 -0
- package/dist/toolkit/index.js +51 -0
- package/dist/toolkit/index.js.map +1 -0
- package/dist/toolkit/plugin/curate-cmd.d.ts +22 -0
- package/dist/toolkit/plugin/curate-cmd.d.ts.map +1 -0
- package/dist/toolkit/plugin/curate-cmd.js +72 -0
- package/dist/toolkit/plugin/curate-cmd.js.map +1 -0
- package/dist/toolkit/plugin/prefs.d.ts +15 -0
- package/dist/toolkit/plugin/prefs.d.ts.map +1 -0
- package/dist/toolkit/plugin/prefs.js +78 -0
- package/dist/toolkit/plugin/prefs.js.map +1 -0
- package/dist/toolkit/plugin/reminder.d.ts +28 -0
- package/dist/toolkit/plugin/reminder.d.ts.map +1 -0
- package/dist/toolkit/plugin/reminder.js +103 -0
- package/dist/toolkit/plugin/reminder.js.map +1 -0
- package/dist/toolkit/policy/approval.d.ts +24 -0
- package/dist/toolkit/policy/approval.d.ts.map +1 -0
- package/dist/toolkit/policy/approval.js +56 -0
- package/dist/toolkit/policy/approval.js.map +1 -0
- package/dist/toolkit/policy/config.d.ts +38 -0
- package/dist/toolkit/policy/config.d.ts.map +1 -0
- package/dist/toolkit/policy/config.js +172 -0
- package/dist/toolkit/policy/config.js.map +1 -0
- package/dist/toolkit/policy/gate.d.ts +28 -0
- package/dist/toolkit/policy/gate.d.ts.map +1 -0
- package/dist/toolkit/policy/gate.js +126 -0
- package/dist/toolkit/policy/gate.js.map +1 -0
- package/dist/toolkit/policy/types.d.ts +106 -0
- package/dist/toolkit/policy/types.d.ts.map +1 -0
- package/dist/toolkit/policy/types.js +22 -0
- package/dist/toolkit/policy/types.js.map +1 -0
- package/dist/toolkit/security_check.d.ts +15 -0
- package/dist/toolkit/security_check.d.ts.map +1 -0
- package/dist/toolkit/security_check.js +109 -0
- package/dist/toolkit/security_check.js.map +1 -0
- package/dist/toolkit/usage/aggregate-cross-session.d.ts +36 -0
- package/dist/toolkit/usage/aggregate-cross-session.d.ts.map +1 -0
- package/dist/toolkit/usage/aggregate-cross-session.js +142 -0
- package/dist/toolkit/usage/aggregate-cross-session.js.map +1 -0
- package/dist/toolkit/usage/aggregate.d.ts +4 -0
- package/dist/toolkit/usage/aggregate.d.ts.map +1 -0
- package/dist/toolkit/usage/aggregate.js +105 -0
- package/dist/toolkit/usage/aggregate.js.map +1 -0
- package/dist/toolkit/usage/index.d.ts +11 -0
- package/dist/toolkit/usage/index.d.ts.map +1 -0
- package/dist/toolkit/usage/index.js +7 -0
- package/dist/toolkit/usage/index.js.map +1 -0
- package/dist/toolkit/usage/parse.d.ts +5 -0
- package/dist/toolkit/usage/parse.d.ts.map +1 -0
- package/dist/toolkit/usage/parse.js +19 -0
- package/dist/toolkit/usage/parse.js.map +1 -0
- package/dist/toolkit/usage/record.d.ts +8 -0
- package/dist/toolkit/usage/record.d.ts.map +1 -0
- package/dist/toolkit/usage/record.js +18 -0
- package/dist/toolkit/usage/record.js.map +1 -0
- package/dist/toolkit/usage/retention.d.ts +6 -0
- package/dist/toolkit/usage/retention.d.ts.map +1 -0
- package/dist/toolkit/usage/retention.js +71 -0
- package/dist/toolkit/usage/retention.js.map +1 -0
- package/dist/toolkit/usage/tokenize.d.ts +11 -0
- package/dist/toolkit/usage/tokenize.d.ts.map +1 -0
- package/dist/toolkit/usage/tokenize.js +24 -0
- package/dist/toolkit/usage/tokenize.js.map +1 -0
- package/dist/toolkit/usage/types.d.ts +34 -0
- package/dist/toolkit/usage/types.d.ts.map +1 -0
- package/dist/toolkit/usage/types.js +2 -0
- package/dist/toolkit/usage/types.js.map +1 -0
- package/package.json +124 -0
- package/plugin-hooks/session-summary.mjs +138 -0
- package/plugin-hooks/stale-summarize.mjs +70 -0
- package/plugin-hooks/usage-record.mjs +112 -0
- package/plugins/aws-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/aws-agent/README.md +46 -0
- package/plugins/aws-agent/bin/aws-agent +22 -0
- package/plugins/aws-agent/commands/aws-agent.md +6 -0
- package/plugins/aws-agent/hooks/hooks.json +49 -0
- package/plugins/aws-agent/hooks/reminder.mjs +16 -0
- package/plugins/aws-agent/package.json +9 -0
- package/plugins/aws-agent/skills/aws-agent/SKILL.md +70 -0
- package/plugins/confluence-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/confluence-agent/README.md +15 -0
- package/plugins/confluence-agent/bin/confluence-agent +17 -0
- package/plugins/confluence-agent/commands/confluence-agent.md +6 -0
- package/plugins/confluence-agent/hooks/hooks.json +49 -0
- package/plugins/confluence-agent/hooks/reminder.mjs +25 -0
- package/plugins/confluence-agent/package.json +8 -0
- package/plugins/confluence-agent/skills/confluence-agent/SKILL.md +40 -0
- package/plugins/db-agent/.claude-plugin/plugin.json +20 -0
- package/plugins/db-agent/README.md +13 -0
- package/plugins/db-agent/bin/db-agent +17 -0
- package/plugins/db-agent/commands/db-agent.md +6 -0
- package/plugins/db-agent/hooks/db-guard.mjs +110 -0
- package/plugins/db-agent/hooks/guardrails.json +26 -0
- package/plugins/db-agent/hooks/hooks.json +61 -0
- package/plugins/db-agent/hooks/reminder.mjs +16 -0
- package/plugins/db-agent/package.json +8 -0
- package/plugins/db-agent/skills/db-agent/SKILL.md +50 -0
- package/plugins/gcp-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/gcp-agent/README.md +31 -0
- package/plugins/gcp-agent/bin/gcp-agent +18 -0
- package/plugins/gcp-agent/commands/gcp-agent.md +6 -0
- package/plugins/gcp-agent/hooks/hooks.json +49 -0
- package/plugins/gcp-agent/hooks/reminder.mjs +16 -0
- package/plugins/gcp-agent/package.json +9 -0
- package/plugins/gcp-agent/skills/gcp-agent/SKILL.md +54 -0
- package/plugins/github-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/github-agent/README.md +13 -0
- package/plugins/github-agent/bin/github-agent +17 -0
- package/plugins/github-agent/commands/github-agent.md +6 -0
- package/plugins/github-agent/hooks/hooks.json +49 -0
- package/plugins/github-agent/hooks/reminder.mjs +16 -0
- package/plugins/github-agent/package.json +8 -0
- package/plugins/github-agent/skills/github-agent/SKILL.md +41 -0
- package/plugins/jira-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/jira-agent/README.md +15 -0
- package/plugins/jira-agent/bin/jira-agent +17 -0
- package/plugins/jira-agent/commands/jira-agent.md +6 -0
- package/plugins/jira-agent/hooks/hooks.json +49 -0
- package/plugins/jira-agent/hooks/reminder.mjs +16 -0
- package/plugins/jira-agent/package.json +8 -0
- package/plugins/jira-agent/skills/jira-agent/SKILL.md +37 -0
- package/plugins/notion-agent/.claude-plugin/plugin.json +6 -0
- package/plugins/notion-agent/README.md +23 -0
- package/plugins/notion-agent/bin/notion-agent +17 -0
- package/plugins/notion-agent/commands/notion-agent.md +6 -0
- package/plugins/notion-agent/hooks/hooks.json +49 -0
- package/plugins/notion-agent/hooks/reminder.mjs +17 -0
- package/plugins/notion-agent/package.json +8 -0
- package/plugins/notion-agent/skills/notion-agent/SKILL.md +48 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalize a free-form context string so minor differences (whitespace,
|
|
3
|
+
* timestamps, UUIDs) collapse into the same cluster.
|
|
4
|
+
*/
|
|
5
|
+
export function normalizeContext(raw) {
|
|
6
|
+
return raw
|
|
7
|
+
.toLowerCase()
|
|
8
|
+
.replace(/\s+/g, " ")
|
|
9
|
+
.replace(/\d{4}-\d{2}-\d{2}t[\d:.z+-]*/g, "<ts>")
|
|
10
|
+
.replace(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/g, "<uuid>")
|
|
11
|
+
.replace(/\b\d{6,}\b/g, "<num>")
|
|
12
|
+
.trim();
|
|
13
|
+
}
|
|
14
|
+
function clusterKey(entry) {
|
|
15
|
+
return [
|
|
16
|
+
entry.connector,
|
|
17
|
+
entry.action,
|
|
18
|
+
entry.kind,
|
|
19
|
+
entry.scope ?? "",
|
|
20
|
+
normalizeContext(entry.context),
|
|
21
|
+
].join("\0");
|
|
22
|
+
}
|
|
23
|
+
function addUnique(list, item, cap) {
|
|
24
|
+
if (list.length >= cap)
|
|
25
|
+
return;
|
|
26
|
+
if (!list.includes(item))
|
|
27
|
+
list.push(item);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Cluster a flat list of entries. Stable output: clusters are sorted by
|
|
31
|
+
* count descending, then by last_ts descending.
|
|
32
|
+
*/
|
|
33
|
+
export function clusterHardships(entries) {
|
|
34
|
+
const byKey = new Map();
|
|
35
|
+
for (const e of entries) {
|
|
36
|
+
const key = clusterKey(e);
|
|
37
|
+
let cluster = byKey.get(key);
|
|
38
|
+
if (cluster === undefined) {
|
|
39
|
+
cluster = {
|
|
40
|
+
signature: key,
|
|
41
|
+
connector: e.connector,
|
|
42
|
+
action: e.action,
|
|
43
|
+
kind: e.kind,
|
|
44
|
+
scope: e.scope ?? null,
|
|
45
|
+
count: 0,
|
|
46
|
+
first_ts: e.ts,
|
|
47
|
+
last_ts: e.ts,
|
|
48
|
+
sample_contexts: [],
|
|
49
|
+
sample_resolutions: [],
|
|
50
|
+
sessions: [],
|
|
51
|
+
};
|
|
52
|
+
byKey.set(key, cluster);
|
|
53
|
+
}
|
|
54
|
+
cluster.count += 1;
|
|
55
|
+
if (e.ts < cluster.first_ts)
|
|
56
|
+
cluster.first_ts = e.ts;
|
|
57
|
+
if (e.ts > cluster.last_ts)
|
|
58
|
+
cluster.last_ts = e.ts;
|
|
59
|
+
addUnique(cluster.sample_contexts, e.context, 5);
|
|
60
|
+
if (e.resolution !== undefined && e.resolution.length > 0) {
|
|
61
|
+
addUnique(cluster.sample_resolutions, e.resolution, 5);
|
|
62
|
+
}
|
|
63
|
+
if (e.session_id !== undefined)
|
|
64
|
+
addUnique(cluster.sessions, e.session_id, 10);
|
|
65
|
+
}
|
|
66
|
+
return Array.from(byKey.values()).sort((a, b) => b.count - a.count || (b.last_ts < a.last_ts ? 1 : -1));
|
|
67
|
+
}
|
|
68
|
+
// ───────────────────────────────────────────────────────────────────────────
|
|
69
|
+
// Curation marker — stored as MD frontmatter on `hardships.md`.
|
|
70
|
+
// ───────────────────────────────────────────────────────────────────────────
|
|
71
|
+
const FRONTMATTER_RE = /^---\n([\s\S]*?)\n---\n?/;
|
|
72
|
+
export function readCurationMarker(md) {
|
|
73
|
+
const match = FRONTMATTER_RE.exec(md);
|
|
74
|
+
if (!match)
|
|
75
|
+
return { last_curated_ts: null, last_curated_count: 0 };
|
|
76
|
+
const body = match[1];
|
|
77
|
+
const lines = body.split("\n");
|
|
78
|
+
let ts = null;
|
|
79
|
+
let count = 0;
|
|
80
|
+
for (const line of lines) {
|
|
81
|
+
const [k, ...rest] = line.split(":");
|
|
82
|
+
if (!k)
|
|
83
|
+
continue;
|
|
84
|
+
const value = rest.join(":").trim();
|
|
85
|
+
if (k.trim() === "last_curated_ts") {
|
|
86
|
+
ts = value || null;
|
|
87
|
+
}
|
|
88
|
+
else if (k.trim() === "last_curated_count") {
|
|
89
|
+
const parsed = Number(value);
|
|
90
|
+
if (Number.isFinite(parsed))
|
|
91
|
+
count = parsed;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return { last_curated_ts: ts, last_curated_count: count };
|
|
95
|
+
}
|
|
96
|
+
export function writeCurationMarker(md, marker) {
|
|
97
|
+
const frontmatter = [
|
|
98
|
+
"---",
|
|
99
|
+
`last_curated_ts: ${marker.last_curated_ts ?? ""}`,
|
|
100
|
+
`last_curated_count: ${marker.last_curated_count}`,
|
|
101
|
+
"---",
|
|
102
|
+
"",
|
|
103
|
+
].join("\n");
|
|
104
|
+
const stripped = md.replace(FRONTMATTER_RE, "");
|
|
105
|
+
return frontmatter + stripped;
|
|
106
|
+
}
|
|
107
|
+
/** Filter entries newer than the last-curated timestamp. */
|
|
108
|
+
export function entriesSinceLastCuration(entries, marker) {
|
|
109
|
+
if (marker.last_curated_ts === null)
|
|
110
|
+
return [...entries];
|
|
111
|
+
return entries.filter((e) => e.ts > marker.last_curated_ts);
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=curate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curate.js","sourceRoot":"","sources":["../../../src/toolkit/hardship/curate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface PatternMatcher {
|
|
2
|
+
context_regex?: string;
|
|
3
|
+
}
|
|
4
|
+
export interface Pattern {
|
|
5
|
+
pattern_id: string;
|
|
6
|
+
status: "active" | "draft";
|
|
7
|
+
confidence: number;
|
|
8
|
+
kind: string;
|
|
9
|
+
actions?: string[];
|
|
10
|
+
matcher: PatternMatcher;
|
|
11
|
+
advice: string;
|
|
12
|
+
}
|
|
13
|
+
export interface PatternsFile {
|
|
14
|
+
version: number;
|
|
15
|
+
last_updated?: string;
|
|
16
|
+
patterns: Pattern[];
|
|
17
|
+
}
|
|
18
|
+
export interface HardshipFacts {
|
|
19
|
+
kind: string;
|
|
20
|
+
action: string;
|
|
21
|
+
context: string;
|
|
22
|
+
}
|
|
23
|
+
export interface MatchedPattern {
|
|
24
|
+
pattern_id: string;
|
|
25
|
+
advice: string;
|
|
26
|
+
confidence: number;
|
|
27
|
+
}
|
|
28
|
+
export declare function loadPatterns(filePath: string): PatternsFile;
|
|
29
|
+
export declare function matchPattern(patterns: readonly Pattern[], facts: HardshipFacts): MatchedPattern | null;
|
|
30
|
+
/** Test helper — clear the mtime cache. */
|
|
31
|
+
export declare function _resetPatternCache(): void;
|
|
32
|
+
//# sourceMappingURL=patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../src/toolkit/hardship/patterns.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAyBD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAoC3D;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,KAAK,EAAE,aAAa,GACnB,cAAc,GAAG,IAAI,CAqBvB;AAED,2CAA2C;AAC3C,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* patterns.ts — load patterns.yaml, match hardship facts, produce hints.
|
|
3
|
+
*
|
|
4
|
+
* Hot-path: called on every non-success envelope. Cached with mtime
|
|
5
|
+
* invalidation so a freshly-curated patterns.yaml is picked up without
|
|
6
|
+
* restart (within the same process).
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from "node:fs";
|
|
9
|
+
import { createRequire } from "node:module";
|
|
10
|
+
// js-yaml is a direct toolkit dependency (see package.json). Use createRequire
|
|
11
|
+
// for sync loading from an ESM module; dynamic import() would force the hot
|
|
12
|
+
// path to be async.
|
|
13
|
+
const requireSync = createRequire(import.meta.url);
|
|
14
|
+
const cache = new Map();
|
|
15
|
+
const EMPTY = { version: 1, patterns: [] };
|
|
16
|
+
function isPattern(obj) {
|
|
17
|
+
if (!obj || typeof obj !== "object")
|
|
18
|
+
return false;
|
|
19
|
+
const p = obj;
|
|
20
|
+
return (typeof p["pattern_id"] === "string" &&
|
|
21
|
+
(p["status"] === "active" || p["status"] === "draft") &&
|
|
22
|
+
typeof p["confidence"] === "number" &&
|
|
23
|
+
typeof p["kind"] === "string" &&
|
|
24
|
+
typeof p["advice"] === "string" &&
|
|
25
|
+
typeof p["matcher"] === "object" &&
|
|
26
|
+
p["matcher"] !== null);
|
|
27
|
+
}
|
|
28
|
+
export function loadPatterns(filePath) {
|
|
29
|
+
let stat;
|
|
30
|
+
try {
|
|
31
|
+
stat = fs.statSync(filePath);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return EMPTY;
|
|
35
|
+
}
|
|
36
|
+
const cached = cache.get(filePath);
|
|
37
|
+
if (cached && cached.mtimeMs === stat.mtimeMs)
|
|
38
|
+
return cached.file;
|
|
39
|
+
let raw;
|
|
40
|
+
try {
|
|
41
|
+
raw = fs.readFileSync(filePath, "utf-8");
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return EMPTY;
|
|
45
|
+
}
|
|
46
|
+
const yaml = requireSync("js-yaml");
|
|
47
|
+
let parsed;
|
|
48
|
+
try {
|
|
49
|
+
parsed = yaml.load(raw);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return EMPTY;
|
|
53
|
+
}
|
|
54
|
+
if (!parsed || typeof parsed !== "object")
|
|
55
|
+
return EMPTY;
|
|
56
|
+
const p = parsed;
|
|
57
|
+
const rawPatterns = Array.isArray(p["patterns"]) ? p["patterns"] : [];
|
|
58
|
+
const file = {
|
|
59
|
+
version: typeof p["version"] === "number" ? p["version"] : 1,
|
|
60
|
+
...(typeof p["last_updated"] === "string"
|
|
61
|
+
? { last_updated: p["last_updated"] }
|
|
62
|
+
: {}),
|
|
63
|
+
patterns: rawPatterns.filter(isPattern),
|
|
64
|
+
};
|
|
65
|
+
cache.set(filePath, { mtimeMs: stat.mtimeMs, file });
|
|
66
|
+
return file;
|
|
67
|
+
}
|
|
68
|
+
export function matchPattern(patterns, facts) {
|
|
69
|
+
for (const p of patterns) {
|
|
70
|
+
if (p.status !== "active")
|
|
71
|
+
continue;
|
|
72
|
+
if (p.kind !== facts.kind)
|
|
73
|
+
continue;
|
|
74
|
+
if (p.actions && p.actions.length > 0 && !p.actions.includes(facts.action)) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (p.matcher.context_regex) {
|
|
78
|
+
try {
|
|
79
|
+
if (!new RegExp(p.matcher.context_regex).test(facts.context))
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
continue; // malformed regex — skip pattern
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
pattern_id: p.pattern_id,
|
|
88
|
+
advice: p.advice,
|
|
89
|
+
confidence: p.confidence,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
/** Test helper — clear the mtime cache. */
|
|
95
|
+
export function _resetPatternCache() {
|
|
96
|
+
cache.clear();
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/toolkit/hardship/patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface RenderSkillPreambleOptions {
|
|
2
|
+
connector: string;
|
|
3
|
+
scope?: string | null;
|
|
4
|
+
cwd?: string;
|
|
5
|
+
home?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Walk all 4 tiers and collect every active pattern. Dedupe by pattern_id
|
|
9
|
+
* preferring the most-specific tier's version. Return a markdown block
|
|
10
|
+
* or "" if there are no active patterns.
|
|
11
|
+
*/
|
|
12
|
+
export declare function renderSkillPreamble(opts: RenderSkillPreambleOptions): string;
|
|
13
|
+
//# sourceMappingURL=preamble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preamble.d.ts","sourceRoot":"","sources":["../../../src/toolkit/hardship/preamble.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,0BAA0B,GAC/B,MAAM,CA+BR"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* preamble.ts — render the session-start "Known gotchas" markdown block
|
|
3
|
+
* for a connector. Called from each connector's SKILL.md plugin loader.
|
|
4
|
+
*/
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import { resolveTierPaths } from "./scope.js";
|
|
7
|
+
import { loadPatterns } from "./patterns.js";
|
|
8
|
+
/**
|
|
9
|
+
* Walk all 4 tiers and collect every active pattern. Dedupe by pattern_id
|
|
10
|
+
* preferring the most-specific tier's version. Return a markdown block
|
|
11
|
+
* or "" if there are no active patterns.
|
|
12
|
+
*/
|
|
13
|
+
export function renderSkillPreamble(opts) {
|
|
14
|
+
const scope = opts.scope ?? null;
|
|
15
|
+
const tiers = resolveTierPaths({
|
|
16
|
+
connector: opts.connector,
|
|
17
|
+
scope,
|
|
18
|
+
cwd: opts.cwd ?? process.cwd(),
|
|
19
|
+
home: opts.home ?? process.env["HOME"] ?? "/",
|
|
20
|
+
});
|
|
21
|
+
const seen = new Map();
|
|
22
|
+
for (const t of tiers) {
|
|
23
|
+
const file = loadPatterns(path.join(t.dir, "patterns.yaml"));
|
|
24
|
+
for (const p of file.patterns) {
|
|
25
|
+
if (p.status !== "active")
|
|
26
|
+
continue;
|
|
27
|
+
if (!seen.has(p.pattern_id)) {
|
|
28
|
+
seen.set(p.pattern_id, p);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (seen.size === 0)
|
|
33
|
+
return "";
|
|
34
|
+
const bullets = [];
|
|
35
|
+
for (const p of seen.values()) {
|
|
36
|
+
const firstLine = p.advice.split("\n")[0]?.trim() ?? "";
|
|
37
|
+
bullets.push(`- **${p.pattern_id}**: ${firstLine}`);
|
|
38
|
+
}
|
|
39
|
+
return [
|
|
40
|
+
`## Known gotchas (auto — ${opts.connector})`,
|
|
41
|
+
...bullets,
|
|
42
|
+
"",
|
|
43
|
+
`_Auto-injected from curated hardships. Run \`/curate\` to refresh._`,
|
|
44
|
+
"",
|
|
45
|
+
].join("\n");
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=preamble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preamble.js","sourceRoot":"","sources":["../../../src/toolkit/hardship/preamble.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAgB,MAAM,eAAe,CAAC;AAS3D;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAgC;IAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;IACjC,MAAM,KAAK,GAAG,gBAAgB,CAAC;QAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK;QACL,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;QAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG;KAC9C,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,IAAI,GAAG,EAAmB,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC;QAC7D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;gBAAE,SAAS;YACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,OAAO,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO;QACL,4BAA4B,IAAI,CAAC,SAAS,GAAG;QAC7C,GAAG,OAAO;QACV,EAAE;QACF,qEAAqE;QACrE,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { HardshipEntry } from "./record.js";
|
|
2
|
+
import { type TierName } from "./scope.js";
|
|
3
|
+
import { type HardshipFacts, type MatchedPattern } from "./patterns.js";
|
|
4
|
+
export interface ReadOptions {
|
|
5
|
+
cwd?: string;
|
|
6
|
+
home?: string;
|
|
7
|
+
/** Tenant scope; null (default) walks only the global tiers. */
|
|
8
|
+
scope?: string | null;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Load the curated MD for a connector across all tiers. Each tier's file,
|
|
12
|
+
* if present, is concatenated in tier order (most specific first) separated
|
|
13
|
+
* by a visible divider. Returns `""` when no tier has content.
|
|
14
|
+
*/
|
|
15
|
+
export declare function readCuratedHardships(connector: string, opts?: ReadOptions): string;
|
|
16
|
+
/** Load raw JSONL entries, newest-first, across all tiers combined. */
|
|
17
|
+
export declare function readRawHardships(connector: string, opts?: ReadOptions): HardshipEntry[];
|
|
18
|
+
/** Count JSONL entries for a connector across all tiers. Used by the reminder. */
|
|
19
|
+
export declare function countRawHardships(connector: string, opts?: ReadOptions): number;
|
|
20
|
+
export interface ReadFirstMatchingPatternOptions {
|
|
21
|
+
connector: string;
|
|
22
|
+
scope: string | null;
|
|
23
|
+
cwd?: string;
|
|
24
|
+
home?: string;
|
|
25
|
+
facts: HardshipFacts;
|
|
26
|
+
}
|
|
27
|
+
export interface TierMatch {
|
|
28
|
+
tier: TierName;
|
|
29
|
+
match: MatchedPattern;
|
|
30
|
+
/** "tenant" if the tier included a tenant hash, "global" otherwise. */
|
|
31
|
+
scopeLevel: "tenant" | "global";
|
|
32
|
+
}
|
|
33
|
+
export declare function readFirstMatchingPattern(opts: ReadFirstMatchingPatternOptions): TierMatch | null;
|
|
34
|
+
//# sourceMappingURL=read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/toolkit/hardship/read.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AA8BD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,WAAgB,GACrB,MAAM,CAWR;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,WAAgB,GACrB,aAAa,EAAE,CAqBjB;AAcD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,WAAgB,GACrB,MAAM,CAER;AAED,MAAM,WAAW,+BAA+B;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,cAAc,CAAC;IACtB,uEAAuE;IACvE,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACjC;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,+BAA+B,GACpC,SAAS,GAAG,IAAI,CAelB"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reader for hardship artifacts. 4-tier walk (project-tenant → project-global
|
|
3
|
+
* → user-tenant → user-global); non-existent tier files are skipped.
|
|
4
|
+
*
|
|
5
|
+
* project-tenant: <cwd>/.claude/connectors/<name>/tenants/<hash>/{hardships.jsonl,hardships.md}
|
|
6
|
+
* project-global: <cwd>/.claude/connectors/<name>/global/{hardships.jsonl,hardships.md}
|
|
7
|
+
* user-tenant: <home>/.claude/connectors/<name>/tenants/<hash>/{hardships.jsonl,hardships.md}
|
|
8
|
+
* user-global: <home>/.claude/connectors/<name>/global/{hardships.jsonl,hardships.md}
|
|
9
|
+
*
|
|
10
|
+
* When `scope` is null, only the two `-global` tiers are walked.
|
|
11
|
+
*
|
|
12
|
+
* MD is merged: each tier's file is concatenated in tier order with a
|
|
13
|
+
* divider; empty / missing tiers are skipped. Agents reading the MD see
|
|
14
|
+
* most-specific guidance first. Sections with identical headings are NOT
|
|
15
|
+
* auto-merged — that is the curation step's job.
|
|
16
|
+
*
|
|
17
|
+
* JSONL is concatenated across all tiers, then sorted newest-first by `ts`.
|
|
18
|
+
*/
|
|
19
|
+
import * as fs from "node:fs";
|
|
20
|
+
import * as path from "node:path";
|
|
21
|
+
import { resolveTierPaths } from "./scope.js";
|
|
22
|
+
import { loadPatterns, matchPattern, } from "./patterns.js";
|
|
23
|
+
/** Return candidate file paths across all tiers (existence not checked). */
|
|
24
|
+
function hardshipPaths(connector, opts, filename) {
|
|
25
|
+
const tiers = resolveTierPaths({
|
|
26
|
+
connector,
|
|
27
|
+
scope: opts.scope ?? null,
|
|
28
|
+
cwd: opts.cwd ?? process.cwd(),
|
|
29
|
+
home: opts.home ?? process.env["HOME"] ?? "/",
|
|
30
|
+
});
|
|
31
|
+
return tiers.map((t) => ({ tier: t.name, path: path.join(t.dir, filename) }));
|
|
32
|
+
}
|
|
33
|
+
function tryReadFile(filePath) {
|
|
34
|
+
try {
|
|
35
|
+
return fs.readFileSync(filePath, "utf-8");
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Load the curated MD for a connector across all tiers. Each tier's file,
|
|
43
|
+
* if present, is concatenated in tier order (most specific first) separated
|
|
44
|
+
* by a visible divider. Returns `""` when no tier has content.
|
|
45
|
+
*/
|
|
46
|
+
export function readCuratedHardships(connector, opts = {}) {
|
|
47
|
+
const files = hardshipPaths(connector, opts, "hardships.md");
|
|
48
|
+
const parts = [];
|
|
49
|
+
for (const f of files) {
|
|
50
|
+
const raw = tryReadFile(f.path);
|
|
51
|
+
if (raw === null)
|
|
52
|
+
continue;
|
|
53
|
+
const trimmed = raw.trim();
|
|
54
|
+
if (trimmed.length === 0)
|
|
55
|
+
continue;
|
|
56
|
+
parts.push(`<!-- layer: ${f.tier} (${f.path}) -->\n${trimmed}`);
|
|
57
|
+
}
|
|
58
|
+
return parts.join("\n\n---\n\n");
|
|
59
|
+
}
|
|
60
|
+
/** Load raw JSONL entries, newest-first, across all tiers combined. */
|
|
61
|
+
export function readRawHardships(connector, opts = {}) {
|
|
62
|
+
const files = hardshipPaths(connector, opts, "hardships.jsonl");
|
|
63
|
+
const entries = [];
|
|
64
|
+
for (const f of files) {
|
|
65
|
+
const raw = tryReadFile(f.path);
|
|
66
|
+
if (raw === null)
|
|
67
|
+
continue;
|
|
68
|
+
for (const line of raw.split("\n")) {
|
|
69
|
+
const trimmed = line.trim();
|
|
70
|
+
if (trimmed.length === 0)
|
|
71
|
+
continue;
|
|
72
|
+
try {
|
|
73
|
+
const parsed = JSON.parse(trimmed);
|
|
74
|
+
if (isHardshipEntry(parsed)) {
|
|
75
|
+
entries.push(parsed);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Skip malformed lines silently.
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
entries.sort((a, b) => (a.ts < b.ts ? 1 : a.ts > b.ts ? -1 : 0));
|
|
84
|
+
return entries;
|
|
85
|
+
}
|
|
86
|
+
function isHardshipEntry(v) {
|
|
87
|
+
if (typeof v !== "object" || v === null)
|
|
88
|
+
return false;
|
|
89
|
+
const o = v;
|
|
90
|
+
return (typeof o["ts"] === "string" &&
|
|
91
|
+
typeof o["connector"] === "string" &&
|
|
92
|
+
typeof o["action"] === "string" &&
|
|
93
|
+
typeof o["kind"] === "string" &&
|
|
94
|
+
typeof o["context"] === "string");
|
|
95
|
+
}
|
|
96
|
+
/** Count JSONL entries for a connector across all tiers. Used by the reminder. */
|
|
97
|
+
export function countRawHardships(connector, opts = {}) {
|
|
98
|
+
return readRawHardships(connector, opts).length;
|
|
99
|
+
}
|
|
100
|
+
export function readFirstMatchingPattern(opts) {
|
|
101
|
+
const tiers = resolveTierPaths({
|
|
102
|
+
connector: opts.connector,
|
|
103
|
+
scope: opts.scope,
|
|
104
|
+
cwd: opts.cwd ?? process.cwd(),
|
|
105
|
+
home: opts.home ?? process.env["HOME"] ?? "/",
|
|
106
|
+
});
|
|
107
|
+
for (const tier of tiers) {
|
|
108
|
+
const file = loadPatterns(path.join(tier.dir, "patterns.yaml"));
|
|
109
|
+
const match = matchPattern(file.patterns, opts.facts);
|
|
110
|
+
if (match) {
|
|
111
|
+
return { tier: tier.name, match, scopeLevel: tier.scopeLevel };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/toolkit/hardship/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** A single friction observation. `ts` / `connector` / `session_id` are stamped by the writer. */
|
|
2
|
+
export interface HardshipEntry {
|
|
3
|
+
ts: string;
|
|
4
|
+
connector: string;
|
|
5
|
+
action: string;
|
|
6
|
+
/** Coarse category: "rate_limit" | "auth" | "not_found" | "timeout" | "validation" | "schema" | ... */
|
|
7
|
+
kind: string;
|
|
8
|
+
/** Human-readable description of what happened. */
|
|
9
|
+
context: string;
|
|
10
|
+
/** Tenant scope key (e.g. base URL). null = connector-wide, not tenant-specific. */
|
|
11
|
+
scope: string | null;
|
|
12
|
+
/** Optional — what (if anything) resolved it or made it tolerable. */
|
|
13
|
+
resolution?: string;
|
|
14
|
+
/** Optional session id correlating with audit trail. */
|
|
15
|
+
session_id?: string;
|
|
16
|
+
}
|
|
17
|
+
export type HardshipInput = Omit<HardshipEntry, "ts" | "connector" | "session_id" | "scope"> & {
|
|
18
|
+
scope?: string | null;
|
|
19
|
+
};
|
|
20
|
+
export interface HardshipWriterOptions {
|
|
21
|
+
connector: string;
|
|
22
|
+
enabled?: boolean;
|
|
23
|
+
sessionId?: string;
|
|
24
|
+
/** Override cwd (tests). Defaults to `process.cwd()`. */
|
|
25
|
+
cwd?: string;
|
|
26
|
+
/** Override home (tests). Defaults to `process.env["HOME"] ?? "/"`. */
|
|
27
|
+
home?: string;
|
|
28
|
+
/** Force a specific path (tests, or operator override). Bypasses discovery. */
|
|
29
|
+
explicitPath?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface ResolveHardshipPathOptions {
|
|
32
|
+
connector: string;
|
|
33
|
+
scope: string | null;
|
|
34
|
+
cwd?: string;
|
|
35
|
+
home?: string;
|
|
36
|
+
}
|
|
37
|
+
/** Compute where a hardship entry will be written given connector + scope + env. */
|
|
38
|
+
export declare function resolveHardshipPath(opts: ResolveHardshipPathOptions): string;
|
|
39
|
+
export interface HardshipRecorder {
|
|
40
|
+
(entry: HardshipInput): void;
|
|
41
|
+
}
|
|
42
|
+
export declare function createHardshipRecorder(opts: HardshipWriterOptions): HardshipRecorder;
|
|
43
|
+
//# sourceMappingURL=record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/toolkit/hardship/record.ts"],"names":[],"mappings":"AAoBA,kGAAkG;AAClG,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,uGAAuG;IACvG,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC,GAAG;IAC7F,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,0BAA0B,GAAG,MAAM,CAgB5E;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,qBAAqB,GAC1B,gBAAgB,CAmClB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hardship logger. Append-only JSONL capture of agent-observed friction.
|
|
3
|
+
*
|
|
4
|
+
* Storage layering (3.0, tiered):
|
|
5
|
+
* project-tenant: <cwd>/.claude/connectors/<name>/tenants/<hash>/hardships.jsonl
|
|
6
|
+
* project-global: <cwd>/.claude/connectors/<name>/global/hardships.jsonl
|
|
7
|
+
* user-tenant: <home>/.claude/connectors/<name>/tenants/<hash>/hardships.jsonl
|
|
8
|
+
* user-global: <home>/.claude/connectors/<name>/global/hardships.jsonl
|
|
9
|
+
*
|
|
10
|
+
* Write goes to the most-specific tier available. If cwd/.claude/ exists,
|
|
11
|
+
* project-* tiers are eligible; otherwise user-* tiers only.
|
|
12
|
+
*
|
|
13
|
+
* Non-failing: disk errors are swallowed. Hardship MUST NEVER crash the
|
|
14
|
+
* caller — that would turn a friction observation into a full outage.
|
|
15
|
+
*/
|
|
16
|
+
import * as fs from "node:fs";
|
|
17
|
+
import * as path from "node:path";
|
|
18
|
+
import { resolveTierPaths } from "./scope.js";
|
|
19
|
+
/** Compute where a hardship entry will be written given connector + scope + env. */
|
|
20
|
+
export function resolveHardshipPath(opts) {
|
|
21
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
22
|
+
const home = opts.home ?? process.env["HOME"] ?? "/";
|
|
23
|
+
const tiers = resolveTierPaths({
|
|
24
|
+
connector: opts.connector,
|
|
25
|
+
scope: opts.scope,
|
|
26
|
+
cwd,
|
|
27
|
+
home,
|
|
28
|
+
});
|
|
29
|
+
const hasProject = fs.existsSync(path.join(cwd, ".claude"));
|
|
30
|
+
for (const t of tiers) {
|
|
31
|
+
if (!hasProject && t.name.startsWith("project-"))
|
|
32
|
+
continue;
|
|
33
|
+
return path.join(t.dir, "hardships.jsonl");
|
|
34
|
+
}
|
|
35
|
+
// Unreachable: tiers always contains a user-global entry.
|
|
36
|
+
return path.join(tiers[tiers.length - 1].dir, "hardships.jsonl");
|
|
37
|
+
}
|
|
38
|
+
export function createHardshipRecorder(opts) {
|
|
39
|
+
const connector = opts.connector;
|
|
40
|
+
return (input) => {
|
|
41
|
+
if (opts.enabled === false)
|
|
42
|
+
return;
|
|
43
|
+
const scope = input.scope ?? null;
|
|
44
|
+
const dest = opts.explicitPath ??
|
|
45
|
+
resolveHardshipPath({
|
|
46
|
+
connector,
|
|
47
|
+
scope,
|
|
48
|
+
...(opts.cwd !== undefined ? { cwd: opts.cwd } : {}),
|
|
49
|
+
...(opts.home !== undefined ? { home: opts.home } : {}),
|
|
50
|
+
});
|
|
51
|
+
try {
|
|
52
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
53
|
+
const entry = {
|
|
54
|
+
ts: new Date().toISOString(),
|
|
55
|
+
connector,
|
|
56
|
+
action: input.action,
|
|
57
|
+
kind: input.kind,
|
|
58
|
+
context: input.context,
|
|
59
|
+
scope,
|
|
60
|
+
...(input.resolution !== undefined
|
|
61
|
+
? { resolution: input.resolution }
|
|
62
|
+
: {}),
|
|
63
|
+
...(opts.sessionId !== undefined
|
|
64
|
+
? { session_id: opts.sessionId }
|
|
65
|
+
: {}),
|
|
66
|
+
};
|
|
67
|
+
fs.appendFileSync(dest, JSON.stringify(entry) + "\n", "utf-8");
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// swallow — never raise into caller
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/toolkit/hardship/record.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type TierName = "project-tenant" | "project-global" | "user-tenant" | "user-global";
|
|
2
|
+
export interface Tier {
|
|
3
|
+
name: TierName;
|
|
4
|
+
dir: string;
|
|
5
|
+
scopeLevel: "tenant" | "global";
|
|
6
|
+
}
|
|
7
|
+
export type TierPaths = Tier[];
|
|
8
|
+
/**
|
|
9
|
+
* 16-char hex sha256 prefix. Stable across processes, short enough for
|
|
10
|
+
* filesystem paths, collision probability negligible for O(100) tenants.
|
|
11
|
+
*/
|
|
12
|
+
export declare function hashScopeKey(key: string): string;
|
|
13
|
+
export interface ResolveTierPathsOptions {
|
|
14
|
+
connector: string;
|
|
15
|
+
scope: string | null;
|
|
16
|
+
cwd: string;
|
|
17
|
+
home: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function resolveTierPaths(opts: ResolveTierPathsOptions): TierPaths;
|
|
20
|
+
//# sourceMappingURL=scope.d.ts.map
|