openrod 0.0.0 → 0.1.0
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 +201 -0
- package/NOTICE +8 -0
- package/README.md +58 -2
- package/SETUPS.md +75 -0
- package/THIRD_PARTY_NOTICES.md +15823 -0
- package/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/dist/assets/index-CEZ0R3YS.js +522 -0
- package/dist/assets/index-DYjVZRjW.css +1 -0
- package/dist/assets/index.esm-BVqeoYDn.js +376 -0
- package/dist/assets/index.esm-CXAOoF3i.js +16 -0
- package/dist/assets/index.esm-D0s8MSqt.js +1666 -0
- package/dist/assets/pixelify-sans-cyrillic-wght-normal-BfQLqnEI.woff2 +0 -0
- package/dist/assets/pixelify-sans-latin-ext-wght-normal-CsF3XSp0.woff2 +0 -0
- package/dist/assets/pixelify-sans-latin-wght-normal-Cbhn5ptY.woff2 +0 -0
- package/dist/assets/terminal-view-6GBZ9nXN.css +32 -0
- package/dist/assets/terminal-view-CkPFNoXi.js +40 -0
- package/dist/favicon.png +0 -0
- package/dist/index.html +16 -0
- package/dist/logos/SOURCES.md +133 -0
- package/dist/logos/agents/aider.svg +1 -0
- package/dist/logos/agents/antigravity.svg +1 -0
- package/dist/logos/agents/claudecode.svg +1 -0
- package/dist/logos/agents/codex.svg +1 -0
- package/dist/logos/agents/copilot.svg +1 -0
- package/dist/logos/agents/cursor.svg +1 -0
- package/dist/logos/agents/factory.svg +1 -0
- package/dist/logos/agents/gemini.svg +1 -0
- package/dist/logos/agents/kiro.svg +1 -0
- package/dist/logos/agents/openclaw-color.svg +1 -0
- package/dist/logos/agents/opencode.svg +1 -0
- package/dist/logos/agents/pi.svg +1 -0
- package/dist/logos/anthropic.svg +1 -0
- package/dist/logos/aws-bedrock.svg +1 -0
- package/dist/logos/aws-s3.svg +1 -0
- package/dist/logos/aws.svg +1 -0
- package/dist/logos/claude-code.svg +1 -0
- package/dist/logos/codex.svg +1 -0
- package/dist/logos/copilot.svg +1 -0
- package/dist/logos/cursor.svg +1 -0
- package/dist/logos/deepinfra.svg +1 -0
- package/dist/logos/github.svg +1 -0
- package/dist/logos/google-cloud.svg +1 -0
- package/dist/logos/google-vertex-ai.svg +1 -0
- package/dist/logos/nvidia.svg +1 -0
- package/dist/logos/openai.svg +1 -0
- package/dist/logos/openrouter.svg +1 -0
- package/dist/logos/pypi.svg +1 -0
- package/dist/logos/templates/debian.svg +1 -0
- package/dist/logos/templates/nodejs.svg +1 -0
- package/dist/logos/templates/python.svg +1 -0
- package/dist/logos/templates/ubuntu.svg +1 -0
- package/dist/logos/vscode.svg +1 -0
- package/dist/openrod.png +0 -0
- package/node_modules/@bufbuild/protobuf/README.md +41 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/clone.d.ts +6 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/clone.js +66 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/boot.d.ts +1 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/boot.js +18 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/enum.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/enum.js +31 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/extension.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/extension.js +28 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/file.d.ts +1 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/file.js +18 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/index.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/index.js +39 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/message.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/message.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/service.d.ts +8 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/service.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/symbols.d.ts +140 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/symbols.js +43 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/types.d.ts +79 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/types.js +15 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/boot.d.ts +63 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/boot.js +105 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/embed.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/embed.js +244 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/enum.d.ts +29 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/enum.js +58 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/extension.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/extension.js +28 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/file.d.ts +7 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/file.js +35 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/index.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/index.js +39 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/message.d.ts +15 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/message.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/restore-json-names.d.ts +5 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/restore-json-names.js +29 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/scalar.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/scalar.js +67 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/service.d.ts +8 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/service.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/symbols.d.ts +145 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/symbols.js +74 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/types.d.ts +85 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/types.js +15 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/create.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/create.js +296 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/descriptors.d.ts +634 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/descriptors.js +53 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/equals.d.ts +46 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/equals.js +209 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/extensions.d.ts +60 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/extensions.js +168 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/fields.d.ts +23 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/fields.js +45 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/from-binary.d.ts +48 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/from-binary.js +415 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/from-json.d.ts +73 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/from-json.js +1037 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/index.d.ts +19 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/index.js +55 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/is-message.d.ts +7 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/is-message.js +33 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/json-value.d.ts +16 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/json-value.js +15 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/merge.d.ts +13 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/merge.js +70 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/package.json +4 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/proto-int64.d.ts +98 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/proto-int64.js +131 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/error.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/error.js +36 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/guard.d.ts +20 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/guard.js +78 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/index.d.ts +8 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/index.js +41 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/message.d.ts +49 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/message.js +157 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/names.d.ts +30 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/names.js +115 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/nested-types.d.ts +35 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/nested-types.js +110 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/path.d.ts +107 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/path.js +376 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-check.d.ts +45 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-check.js +292 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-types.d.ts +217 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-types.js +16 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect.js +469 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/scalar.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/scalar.js +129 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/unsafe.d.ts +39 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/unsafe.js +149 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/registry.d.ts +98 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/registry.js +954 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/to-binary.d.ts +28 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/to-binary.js +437 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/to-json.d.ts +67 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/to-json.js +625 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/from-text.d.ts +35 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/from-text.js +684 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/index.d.ts +4 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/index.js +21 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/is-group-like.d.ts +19 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/is-group-like.js +47 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/reader.d.ts +91 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/reader.js +481 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/to-text.d.ts +34 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/to-text.js +358 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/writer.d.ts +76 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/writer.js +220 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/types.d.ts +135 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/types.js +15 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/unknown-enum.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/unknown-enum.js +26 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/base64-encoding.d.ts +25 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/base64-encoding.js +188 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/binary-encoding.d.ts +286 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/binary-encoding.js +726 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/index.d.ts +5 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/index.js +37 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/size-delimited.d.ts +69 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/size-delimited.js +191 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-encoding.d.ts +53 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-encoding.js +106 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-format.d.ts +13 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-format.js +199 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/varint.d.ts +70 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/varint.js +334 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/any.d.ts +38 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/any.js +75 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/duration.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/duration.js +39 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/any_pb.d.ts +238 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/any_pb.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/api_pb.d.ts +537 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/api_pb.js +39 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +490 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +68 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/cpp_features_pb.d.ts +91 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/cpp_features_pb.js +60 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +4143 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/descriptor_pb.js +892 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/duration_pb.d.ts +161 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/duration_pb.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/empty_pb.d.ts +39 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/empty_pb.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +424 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/field_mask_pb.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/go_features_pb.d.ts +189 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/go_features_pb.js +126 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/java_features_pb.d.ts +194 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/java_features_pb.js +106 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/source_context_pb.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/source_context_pb.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/struct_pb.d.ts +195 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/struct_pb.js +59 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +222 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/timestamp_pb.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/type_pb.d.ts +722 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/type_pb.js +242 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +330 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/wrappers_pb.js +67 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/index.d.ts +19 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/index.js +48 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/json.d.ts +28 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/json.js +44 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/timestamp.d.ts +21 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/timestamp.js +57 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/wrappers.d.ts +25 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/wrappers.js +66 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/clone.d.ts +6 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/clone.js +63 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/boot.d.ts +1 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/boot.js +14 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/enum.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/enum.js +26 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/extension.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/extension.js +25 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/file.d.ts +1 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/file.js +14 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/index.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/index.js +23 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/message.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/message.js +21 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/service.d.ts +8 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/service.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/symbols.d.ts +140 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/symbols.js +40 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/types.d.ts +79 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/types.js +14 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.d.ts +63 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.js +101 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/embed.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/embed.js +239 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/enum.d.ts +29 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/enum.js +53 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/extension.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/extension.js +25 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.d.ts +7 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.js +32 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/index.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/index.js +23 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.d.ts +15 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.js +21 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.d.ts +5 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.js +26 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/scalar.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/scalar.js +63 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/service.d.ts +8 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/service.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/symbols.d.ts +145 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/symbols.js +71 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/types.d.ts +85 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/types.js +14 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/create.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/create.js +293 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.d.ts +634 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.js +50 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/equals.d.ts +46 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/equals.js +206 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/extensions.d.ts +60 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/extensions.js +159 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/fields.d.ts +23 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/fields.js +41 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.d.ts +48 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.js +409 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/from-json.d.ts +73 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/from-json.js +1029 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/index.d.ts +19 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/index.js +29 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/is-message.d.ts +7 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/is-message.js +30 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/json-value.d.ts +16 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/json-value.js +14 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/merge.d.ts +13 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/merge.js +67 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/package.json +4 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/proto-int64.d.ts +98 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/proto-int64.js +128 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/error.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/error.js +31 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.d.ts +20 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.js +71 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/index.d.ts +8 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/index.js +21 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/message.d.ts +49 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/message.js +152 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/names.d.ts +30 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/names.js +109 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.d.ts +35 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.js +105 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.d.ts +107 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.js +369 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.d.ts +45 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.js +284 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-types.d.ts +217 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-types.js +14 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.js +464 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.js +124 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.d.ts +39 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.js +140 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/registry.d.ts +98 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/registry.js +948 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/to-binary.d.ts +28 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/to-binary.js +433 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/to-json.d.ts +67 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/to-json.js +620 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/from-text.d.ts +35 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/from-text.js +680 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/index.d.ts +4 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/index.js +15 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/is-group-like.d.ts +19 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/is-group-like.js +44 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/reader.d.ts +91 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/reader.js +477 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/to-text.d.ts +34 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/to-text.js +355 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/writer.d.ts +76 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/writer.js +214 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/types.d.ts +135 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/types.js +14 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/unknown-enum.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/unknown-enum.js +23 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.d.ts +25 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.js +184 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.d.ts +286 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js +721 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/index.d.ts +5 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/index.js +18 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/size-delimited.d.ts +69 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/size-delimited.js +186 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.d.ts +53 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js +101 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.d.ts +13 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.js +195 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.d.ts +70 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.js +325 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/any.d.ts +38 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/any.js +69 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/duration.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/duration.js +35 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +238 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/any_pb.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +537 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.js +36 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +490 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +65 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/cpp_features_pb.d.ts +91 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/cpp_features_pb.js +57 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +4143 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +888 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +161 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/duration_pb.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +39 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/empty_pb.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +424 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.d.ts +189 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.js +123 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/java_features_pb.d.ts +194 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/java_features_pb.js +103 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +195 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/struct_pb.js +56 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +222 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +722 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.js +239 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +330 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +64 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/index.d.ts +19 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/index.js +32 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/json.d.ts +28 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/json.js +41 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/timestamp.d.ts +21 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/timestamp.js +50 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.d.ts +25 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.js +61 -0
- package/node_modules/@bufbuild/protobuf/package.json +147 -0
- package/node_modules/@connectrpc/connect/README.md +62 -0
- package/node_modules/@connectrpc/connect/dist/cjs/any-client.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/cjs/any-client.js +33 -0
- package/node_modules/@connectrpc/connect/dist/cjs/call-options.d.ts +34 -0
- package/node_modules/@connectrpc/connect/dist/cjs/call-options.js +15 -0
- package/node_modules/@connectrpc/connect/dist/cjs/callback-client.d.ts +31 -0
- package/node_modules/@connectrpc/connect/dist/cjs/callback-client.js +116 -0
- package/node_modules/@connectrpc/connect/dist/cjs/code.d.ts +75 -0
- package/node_modules/@connectrpc/connect/dist/cjs/code.js +92 -0
- package/node_modules/@connectrpc/connect/dist/cjs/connect-error.d.ts +104 -0
- package/node_modules/@connectrpc/connect/dist/cjs/connect-error.js +141 -0
- package/node_modules/@connectrpc/connect/dist/cjs/context-values.d.ts +34 -0
- package/node_modules/@connectrpc/connect/dist/cjs/context-values.js +41 -0
- package/node_modules/@connectrpc/connect/dist/cjs/cors.d.ts +45 -0
- package/node_modules/@connectrpc/connect/dist/cjs/cors.js +82 -0
- package/node_modules/@connectrpc/connect/dist/cjs/http-headers.d.ts +37 -0
- package/node_modules/@connectrpc/connect/dist/cjs/http-headers.js +63 -0
- package/node_modules/@connectrpc/connect/dist/cjs/implementation.d.ts +159 -0
- package/node_modules/@connectrpc/connect/dist/cjs/implementation.js +78 -0
- package/node_modules/@connectrpc/connect/dist/cjs/index.d.ts +22 -0
- package/node_modules/@connectrpc/connect/dist/cjs/index.js +46 -0
- package/node_modules/@connectrpc/connect/dist/cjs/interceptor.d.ts +170 -0
- package/node_modules/@connectrpc/connect/dist/cjs/interceptor.js +30 -0
- package/node_modules/@connectrpc/connect/dist/cjs/package.json +1 -0
- package/node_modules/@connectrpc/connect/dist/cjs/promise-client.d.ts +40 -0
- package/node_modules/@connectrpc/connect/dist/cjs/promise-client.js +135 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/async-iterable.d.ts +527 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/async-iterable.js +913 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/compression.d.ts +48 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/compression.js +75 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/content-type-matcher.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/content-type-matcher.js +43 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/create-method-url.d.ts +17 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/create-method-url.js +36 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/envelope.d.ts +90 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/envelope.js +214 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/index.d.ts +25 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/index.js +95 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/invoke-implementation.d.ts +33 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/invoke-implementation.js +178 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/limit-io.d.ts +24 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/limit-io.js +80 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/normalize.d.ts +11 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/normalize.js +55 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/protocol-handler-factory.d.ts +18 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/protocol-handler-factory.js +15 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/protocol-headers.d.ts +9 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/protocol-headers.js +67 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/run-call.d.ts +45 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/run-call.js +125 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/serialization.d.ts +104 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/serialization.js +149 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/signals.d.ts +36 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/signals.js +100 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/transport-options.d.ts +98 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/transport-options.js +15 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-fetch.d.ts +35 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-fetch.js +150 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-handler-client.d.ts +7 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-handler-client.js +88 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-handler.d.ts +167 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-handler.js +130 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal.d.ts +102 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal.js +78 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/code-string.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/code-string.js +52 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/content-type.d.ts +40 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/content-type.js +71 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/end-stream.d.ts +44 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/end-stream.js +137 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/error-json.d.ts +36 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/error-json.js +166 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/get-request.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/get-request.js +66 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/handler-factory.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/handler-factory.js +296 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/headers.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/headers.js +32 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/http-status.d.ts +15 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/http-status.js +90 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/index.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/index.js +81 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/parse-timeout.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/parse-timeout.js +44 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/query-params.d.ts +8 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/query-params.js +24 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/request-header.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/request-header.js +70 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/trailer-mux.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/trailer-mux.js +53 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/transport.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/transport.js +210 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/validate-response.d.ts +30 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/validate-response.js +71 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/version.d.ts +20 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/version.js +58 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/content-type.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/content-type.js +38 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/gen/status_pb.d.ts +91 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/gen/status_pb.js +27 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/handler-factory.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/handler-factory.js +124 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/headers.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/headers.js +29 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/http-status.d.ts +8 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/http-status.js +46 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/index.d.ts +10 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/index.js +61 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/parse-timeout.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/parse-timeout.js +53 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/request-header.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/request-header.js +56 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/trailer-status.d.ts +28 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/trailer-status.js +118 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/transport.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/transport.js +185 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/validate-response.d.ts +33 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/validate-response.js +75 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/validate-trailer.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/validate-trailer.js +44 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/content-type.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/content-type.js +41 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/handler-factory.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/handler-factory.js +130 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/headers.d.ts +20 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/headers.js +44 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/index.d.ts +8 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/index.js +61 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/request-header.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/request-header.js +59 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/trailer.d.ts +27 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/trailer.js +71 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/transport.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/transport.js +234 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/validate-response.d.ts +34 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/validate-response.js +73 -0
- package/node_modules/@connectrpc/connect/dist/cjs/router-transport.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/cjs/router-transport.js +32 -0
- package/node_modules/@connectrpc/connect/dist/cjs/router.d.ts +81 -0
- package/node_modules/@connectrpc/connect/dist/cjs/router.js +68 -0
- package/node_modules/@connectrpc/connect/dist/cjs/transport.d.ts +20 -0
- package/node_modules/@connectrpc/connect/dist/cjs/transport.js +15 -0
- package/node_modules/@connectrpc/connect/dist/esm/any-client.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/esm/any-client.js +30 -0
- package/node_modules/@connectrpc/connect/dist/esm/call-options.d.ts +34 -0
- package/node_modules/@connectrpc/connect/dist/esm/call-options.js +14 -0
- package/node_modules/@connectrpc/connect/dist/esm/callback-client.d.ts +31 -0
- package/node_modules/@connectrpc/connect/dist/esm/callback-client.js +113 -0
- package/node_modules/@connectrpc/connect/dist/esm/code.d.ts +75 -0
- package/node_modules/@connectrpc/connect/dist/esm/code.js +89 -0
- package/node_modules/@connectrpc/connect/dist/esm/connect-error.d.ts +104 -0
- package/node_modules/@connectrpc/connect/dist/esm/connect-error.js +137 -0
- package/node_modules/@connectrpc/connect/dist/esm/context-values.d.ts +34 -0
- package/node_modules/@connectrpc/connect/dist/esm/context-values.js +37 -0
- package/node_modules/@connectrpc/connect/dist/esm/cors.d.ts +45 -0
- package/node_modules/@connectrpc/connect/dist/esm/cors.js +79 -0
- package/node_modules/@connectrpc/connect/dist/esm/http-headers.d.ts +37 -0
- package/node_modules/@connectrpc/connect/dist/esm/http-headers.js +58 -0
- package/node_modules/@connectrpc/connect/dist/esm/implementation.d.ts +159 -0
- package/node_modules/@connectrpc/connect/dist/esm/implementation.js +73 -0
- package/node_modules/@connectrpc/connect/dist/esm/index.d.ts +22 -0
- package/node_modules/@connectrpc/connect/dist/esm/index.js +27 -0
- package/node_modules/@connectrpc/connect/dist/esm/interceptor.d.ts +170 -0
- package/node_modules/@connectrpc/connect/dist/esm/interceptor.js +27 -0
- package/node_modules/@connectrpc/connect/dist/esm/promise-client.d.ts +40 -0
- package/node_modules/@connectrpc/connect/dist/esm/promise-client.js +128 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/async-iterable.d.ts +527 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/async-iterable.js +891 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/compression.d.ts +48 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/compression.js +71 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/content-type-matcher.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/content-type-matcher.js +40 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/create-method-url.d.ts +17 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/create-method-url.js +33 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/envelope.d.ts +90 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/envelope.js +206 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/index.d.ts +25 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/index.js +33 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/invoke-implementation.d.ts +33 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/invoke-implementation.js +173 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/limit-io.d.ts +24 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/limit-io.js +75 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/normalize.d.ts +11 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/normalize.js +51 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/protocol-handler-factory.d.ts +18 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/protocol-handler-factory.js +14 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/protocol-headers.d.ts +9 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/protocol-headers.js +64 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/run-call.d.ts +45 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/run-call.js +121 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/serialization.d.ts +104 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/serialization.js +141 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/signals.d.ts +36 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/signals.js +95 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/transport-options.d.ts +98 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/transport-options.js +14 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-fetch.d.ts +35 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-fetch.js +142 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-handler-client.d.ts +7 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-handler-client.js +85 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-handler.d.ts +167 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-handler.js +124 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal.d.ts +102 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal.js +74 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/code-string.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/code-string.js +48 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/content-type.d.ts +40 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/content-type.js +66 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/end-stream.d.ts +44 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/end-stream.js +131 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/error-json.d.ts +36 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/error-json.js +160 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/get-request.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/get-request.js +63 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/handler-factory.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/handler-factory.js +293 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/headers.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/headers.js +29 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/http-status.d.ts +15 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/http-status.js +86 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/index.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/index.js +33 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/parse-timeout.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/parse-timeout.js +41 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/query-params.d.ts +8 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/query-params.js +21 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/request-header.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/request-header.js +66 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/trailer-mux.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/trailer-mux.js +49 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/transport.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/transport.js +207 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/validate-response.d.ts +30 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/validate-response.js +67 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/version.d.ts +20 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/version.js +53 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/content-type.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/content-type.js +34 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/gen/status_pb.d.ts +91 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/gen/status_pb.js +24 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/handler-factory.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/handler-factory.js +121 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/headers.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/headers.js +26 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/http-status.d.ts +8 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/http-status.js +43 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/index.d.ts +10 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/index.js +28 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/parse-timeout.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/parse-timeout.js +50 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/request-header.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/request-header.js +52 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/trailer-status.d.ts +28 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/trailer-status.js +113 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/transport.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/transport.js +182 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/validate-response.d.ts +33 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/validate-response.js +71 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/validate-trailer.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/validate-trailer.js +41 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/content-type.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/content-type.js +37 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/handler-factory.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/handler-factory.js +127 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/headers.d.ts +20 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/headers.js +33 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/index.d.ts +8 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/index.js +26 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/request-header.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/request-header.js +55 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/trailer.d.ts +27 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/trailer.js +65 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/transport.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/transport.js +231 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/validate-response.d.ts +34 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/validate-response.js +69 -0
- package/node_modules/@connectrpc/connect/dist/esm/router-transport.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/esm/router-transport.js +29 -0
- package/node_modules/@connectrpc/connect/dist/esm/router.d.ts +81 -0
- package/node_modules/@connectrpc/connect/dist/esm/router.js +65 -0
- package/node_modules/@connectrpc/connect/dist/esm/transport.d.ts +20 -0
- package/node_modules/@connectrpc/connect/dist/esm/transport.js +14 -0
- package/node_modules/@connectrpc/connect/package.json +67 -0
- package/node_modules/@connectrpc/connect-node/README.md +144 -0
- package/node_modules/@connectrpc/connect-node/buf.gen.yaml +10 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/compression.d.ts +15 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/compression.js +96 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/connect-node-adapter.d.ts +42 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/connect-node-adapter.js +60 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/connect-transport.d.ts +100 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/connect-transport.js +25 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-transport.d.ts +95 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-transport.js +24 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-web-transport.d.ts +96 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-web-transport.js +25 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/http2-session-manager.d.ts +146 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/http2-session-manager.js +543 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/index.d.ts +14 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/index.js +34 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-error.d.ts +45 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-error.js +153 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-transport-options.d.ts +100 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-transport-options.js +58 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-client.d.ts +54 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-client.js +347 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-handler.d.ts +42 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-handler.js +225 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-header.d.ts +20 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-header.js +117 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/package.json +1 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/compression.d.ts +15 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/compression.js +93 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/connect-node-adapter.d.ts +42 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/connect-node-adapter.js +57 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/connect-transport.d.ts +100 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/connect-transport.js +22 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/grpc-transport.d.ts +95 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/grpc-transport.js +21 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/grpc-web-transport.d.ts +96 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/grpc-web-transport.js +22 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/http2-session-manager.d.ts +146 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/http2-session-manager.js +539 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/index.d.ts +14 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/index.js +21 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-error.d.ts +45 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-error.js +146 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-transport-options.d.ts +100 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-transport-options.js +55 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-client.d.ts +54 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-client.js +344 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-handler.d.ts +42 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-handler.js +221 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-header.d.ts +20 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-header.js +113 -0
- package/node_modules/@connectrpc/connect-node/package.json +44 -0
- package/node_modules/@nvidia/openshell-sdk/README.md +303 -0
- package/node_modules/@nvidia/openshell-sdk/dist/client.d.ts +1243 -0
- package/node_modules/@nvidia/openshell-sdk/dist/client.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/client.js +1321 -0
- package/node_modules/@nvidia/openshell-sdk/dist/client.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/errors.d.ts +35 -0
- package/node_modules/@nvidia/openshell-sdk/dist/errors.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/errors.js +79 -0
- package/node_modules/@nvidia/openshell-sdk/dist/errors.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/datamodel_pb.d.ts +301 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/datamodel_pb.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/datamodel_pb.js +69 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/datamodel_pb.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/google/rpc/error_details_pb.d.ts +581 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/google/rpc/error_details_pb.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/google/rpc/error_details_pb.js +90 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/google/rpc/error_details_pb.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/openshell_pb.d.ts +9131 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/openshell_pb.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/openshell_pb.js +1898 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/openshell_pb.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/options_pb.d.ts +58 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/options_pb.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/options_pb.js +24 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/options_pb.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/sandbox_pb.d.ts +1203 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/sandbox_pb.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/sandbox_pb.js +277 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/sandbox_pb.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/index.d.ts +7 -0
- package/node_modules/@nvidia/openshell-sdk/dist/index.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/index.js +6 -0
- package/node_modules/@nvidia/openshell-sdk/dist/index.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/oidc.d.ts +14 -0
- package/node_modules/@nvidia/openshell-sdk/dist/oidc.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/oidc.js +177 -0
- package/node_modules/@nvidia/openshell-sdk/dist/oidc.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/raw.d.ts +6 -0
- package/node_modules/@nvidia/openshell-sdk/dist/raw.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/raw.js +15 -0
- package/node_modules/@nvidia/openshell-sdk/dist/raw.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/ssh-validate.d.ts +11 -0
- package/node_modules/@nvidia/openshell-sdk/dist/ssh-validate.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/ssh-validate.js +58 -0
- package/node_modules/@nvidia/openshell-sdk/dist/ssh-validate.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/transport.d.ts +35 -0
- package/node_modules/@nvidia/openshell-sdk/dist/transport.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/transport.js +97 -0
- package/node_modules/@nvidia/openshell-sdk/dist/transport.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/package.json +58 -0
- package/package.json +93 -4
- package/server/activity-delivery.js +143 -0
- package/server/activity-store.js +168 -0
- package/server/agent-inventory.js +76 -0
- package/server/agent-resources.py +60 -0
- package/server/api.js +648 -0
- package/server/cli.js +168 -0
- package/server/cloud-connections.js +56 -0
- package/server/cloud-origin.js +11 -0
- package/server/cloud-proxy.js +122 -0
- package/server/cloud-ssh-proxy.cjs +73 -0
- package/server/cloud-ssh.js +135 -0
- package/server/cloud-transfer.js +221 -0
- package/server/compute.js +50 -0
- package/server/editor.js +114 -0
- package/server/egress.js +204 -0
- package/server/files.js +489 -0
- package/server/gateway-install.js +64 -0
- package/server/gateway.js +415 -0
- package/server/image-templates.js +393 -0
- package/server/ingress.js +185 -0
- package/server/launch-token.js +55 -0
- package/server/local-catalog.js +111 -0
- package/server/local-cloud-native.js +152 -0
- package/server/local-cloud.js +123 -0
- package/server/location-inventory.js +94 -0
- package/server/machines.js +84 -0
- package/server/openshell-cli.js +144 -0
- package/server/org.js +536 -0
- package/server/orphan-processes.js +42 -0
- package/server/paths.js +28 -0
- package/server/policy-template-store.js +92 -0
- package/server/policy.js +583 -0
- package/server/remote-gateway-state.js +123 -0
- package/server/remote-gateway.js +420 -0
- package/server/remote-hosts.js +354 -0
- package/server/remote-http.js +14 -0
- package/server/remote-image-engine.js +47 -0
- package/server/remote-runtime.js +65 -0
- package/server/remote-runtime.py +162 -0
- package/server/sandbox-identity.js +14 -0
- package/server/security.js +139 -0
- package/server/session-revocations.js +20 -0
- package/server/setup-artifact-installer.py +54 -0
- package/server/setup-artifacts.js +23 -0
- package/server/setup-auth-discovery.js +24 -0
- package/server/setup-credentials.js +54 -0
- package/server/setup-deployment.js +299 -0
- package/server/setup-discovery.js +289 -0
- package/server/setup-egress.js +133 -0
- package/server/setup-http.js +47 -0
- package/server/setup-installer.py +289 -0
- package/server/setup-json.py +8 -0
- package/server/setup-members.js +77 -0
- package/server/setup-packages.js +214 -0
- package/server/setup-preparation.js +144 -0
- package/server/setup-python.js +8 -0
- package/server/setup-remote-check.js +35 -0
- package/server/setup-transfer.js +17 -0
- package/server/setup-verifier.cjs +43 -0
- package/server/setups.js +172 -0
- package/server/ssh-hosts.js +184 -0
- package/server/ssh.js +153 -0
- package/server/start.js +71 -0
- package/server/terminal.js +173 -0
- package/server/worker-auth.js +18 -0
- package/shared/agent-access.js +103 -0
- package/shared/antigravity-network-guidance.js +9 -0
- package/shared/group-membership.js +33 -0
- package/shared/group-network.js +29 -0
- package/shared/policy-templates.js +79 -0
- package/shared/secret-fields.js +35 -0
- package/shared/setup-launch.js +25 -0
- package/shared/setup-targets.js +11 -0
- package/shared/setup-targets.json +12 -0
- package/src/lib/activity-export.js +52 -0
- package/src/lib/activity-inventory.js +45 -0
- package/src/lib/agents.js +41 -0
- package/src/lib/api.js +173 -0
- package/src/lib/cloud-machine.js +9 -0
- package/src/lib/cloud-origin.js +6 -0
- package/src/lib/cloud-transfer.js +22 -0
- package/src/lib/compute-target.js +46 -0
- package/src/lib/delete-network-policies.js +15 -0
- package/src/lib/egress-groups.js +24 -0
- package/src/lib/egress.js +28 -0
- package/src/lib/files.js +24 -0
- package/src/lib/fleet.js +100 -0
- package/src/lib/format.js +24 -0
- package/src/lib/groups.js +16 -0
- package/src/lib/image-templates.js +139 -0
- package/src/lib/import-setup.js +36 -0
- package/src/lib/local-cloud.js +118 -0
- package/src/lib/location-inventory.js +20 -0
- package/src/lib/locations.js +5 -0
- package/src/lib/placement.js +9 -0
- package/src/lib/policy-editor.js +58 -0
- package/src/lib/policy-sources.js +33 -0
- package/src/lib/quick-setup.js +110 -0
- package/src/lib/sandbox-creations.js +59 -0
- package/src/lib/sandbox-images.js +38 -0
- package/src/lib/sandbox-session.js +140 -0
- package/src/lib/sandboxes.js +78 -0
- package/src/lib/secret-inventory.js +26 -0
- package/src/lib/services.js +41 -0
- package/src/lib/setup-import-jobs.js +62 -0
- package/src/lib/setup-imports.js +4 -0
- package/src/lib/setup-network.js +39 -0
- package/src/lib/setup-template-build.js +17 -0
- package/src/lib/utils.js +6 -0
- package/vendor/OPENSHELL-LICENSE +203 -0
- package/vendor/nvidia-openshell-sdk-0.0.0.tgz +0 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { SETUP_TARGETS, validateSetupTargets } from '../shared/setup-targets.js'
|
|
2
|
+
import { setupPython } from './setup-python.js'
|
|
3
|
+
import fs from 'node:fs/promises'
|
|
4
|
+
import path from 'node:path'
|
|
5
|
+
import { randomUUID } from 'node:crypto'
|
|
6
|
+
import { gateway, sandboxView, contextKey, contextSelection, runWithContext, workspaceName } from './gateway.js'
|
|
7
|
+
import { getSetupStore, resolveSetups, usableSetup, SETUP_ID } from './setups.js'
|
|
8
|
+
import { fail, hash } from './setup-discovery.js'
|
|
9
|
+
import { hostMatches } from '../src/lib/egress.js'
|
|
10
|
+
import { readOrg, blockedBy, orgRoute, managedOpsFor, serializeOrgWrite, syncAll } from './org.js'
|
|
11
|
+
import { listPolicies, blockedByPolicy, compileFor } from './egress.js'
|
|
12
|
+
import { readSetupMembers, sandboxSetups, addSandboxSetups, removeSandboxSetups } from './setup-members.js'
|
|
13
|
+
import { setupPolicyFor } from './setup-egress.js'
|
|
14
|
+
|
|
15
|
+
import { withSandboxInput } from './setup-transfer.js'
|
|
16
|
+
import { installArtifacts } from './setup-artifacts.js'
|
|
17
|
+
const verifier = await fs.readFile(path.join(import.meta.dirname, 'setup-verifier.cjs'), 'utf8')
|
|
18
|
+
const installer = setupPython('./setup-installer.py')
|
|
19
|
+
const COMMAND = Object.fromEntries(SETUP_TARGETS.map(agent => [agent.id, agent.command]))
|
|
20
|
+
const stateKey = Symbol.for('openshell.console.setup-deployments.v2')
|
|
21
|
+
const contexts = globalThis[stateKey] ??= new Map()
|
|
22
|
+
function deploymentState() {
|
|
23
|
+
const key = contextKey()
|
|
24
|
+
if (!contexts.has(key)) contexts.set(key, { previews: new Map(), jobs: new Map(), locks: new Set() })
|
|
25
|
+
return contexts.get(key)
|
|
26
|
+
}
|
|
27
|
+
const keyFor = (sandbox, id) => `${sandbox.name}:${id}`
|
|
28
|
+
export const setupJobsForSandbox = (name, createdAt) => [...deploymentState().jobs.values()].filter(job => job.sandbox === name && (!createdAt || job.at >= createdAt))
|
|
29
|
+
// Protobuf maps have no ordering guarantee. Preserve array order and every
|
|
30
|
+
// value, but never treat a different object-key order as a permission change.
|
|
31
|
+
export function setupAccessIdentity(value) {
|
|
32
|
+
const canonical = value => Array.isArray(value) ? value.map(canonical)
|
|
33
|
+
: value && typeof value === 'object' ? Object.fromEntries(Object.keys(value).sort().map(key => [key, canonical(value[key])])) : value
|
|
34
|
+
return hash(JSON.stringify(canonical(value)))
|
|
35
|
+
}
|
|
36
|
+
export function launchSetupAccess(setups, recipe, review, includeTemplateAccess = false) {
|
|
37
|
+
const approved = {}
|
|
38
|
+
for (const setup of setups) {
|
|
39
|
+
const inherited = recipe?.setups?.includes(setup.id)
|
|
40
|
+
const pinned = inherited && recipe.setupRevisions?.[setup.id]
|
|
41
|
+
if (inherited && pinned !== setup.revision) throw fail('A Setup baked into this template changed. Rebuild the image template before launching its new revision.')
|
|
42
|
+
if (review && review[setup.id] !== setup.revision) throw fail('A selected Setup changed. Review its runtime access again.')
|
|
43
|
+
// Choosing a template includes its pinned tools and their scoped runtime
|
|
44
|
+
// requirements. Additional tools still require their own reviewed revision.
|
|
45
|
+
if ((inherited && includeTemplateAccess) || review?.[setup.id] === setup.revision) approved[setup.id] = setup.revision
|
|
46
|
+
}
|
|
47
|
+
return approved
|
|
48
|
+
}
|
|
49
|
+
const narrow = (endpoint) => endpoint.tls === 1 || endpoint.allowedIps?.length || endpoint.denyRules?.length || endpoint.rules?.length || (endpoint.path && endpoint.path !== '/' && endpoint.path !== '/**')
|
|
50
|
+
|
|
51
|
+
// This is deliberately a conservative policy preflight, not a reachability or
|
|
52
|
+
// MCP tool test. A hostname match on its own must never mean "Ready".
|
|
53
|
+
export function assessNetwork(requirement, policy, binaries, restrictions = []) {
|
|
54
|
+
if (!binaries.length) return { status: 'missing', reason: 'Target agent executable is missing.' }
|
|
55
|
+
if (restrictions.some((host) => hostMatches(host, requirement.host))) return { status: 'blocked', reason: 'Blocked by organization or scoped Egress policy.' }
|
|
56
|
+
const matches = Object.values(policy?.networkPolicies ?? {}).flatMap((rule) => (rule.endpoints ?? []).filter((e) => hostMatches(e.host, requirement.host) && (e.ports?.length ? e.ports : [e.port]).includes(requirement.port)).map((endpoint) => ({ endpoint, binaries: (rule.binaries ?? []).map((b) => b.path) })))
|
|
57
|
+
if (matches.some(({ endpoint }) => endpoint.denyRules?.length)) return { status: 'review', reason: 'A matching deny rule needs review in Egress.' }
|
|
58
|
+
const permitted = matches.find(({ endpoint: e, binaries: programs }) => binaries.every((binary) => programs.includes('/**') || programs.includes(binary)) && !narrow(e) && (!e.protocol || e.protocol === 'tcp' || (e.protocol === 'rest' && e.enforcement === 1 && [2, 3].includes(e.access))))
|
|
59
|
+
if (permitted) return { status: 'allowed', reason: 'Existing connection access matches. MCP tool access and sign-in are not verified.' }
|
|
60
|
+
if (matches.length) return { status: 'review', reason: 'Matching access is restricted by program, path, IP or protocol. Review the effective policy.' }
|
|
61
|
+
return { status: 'missing', reason: 'No matching runtime access. Add an approved, scoped rule in Egress, then check again.' }
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// A Setup's egress policy also covers Quick-setup snapshots prepared from it.
|
|
65
|
+
const memberIds = (setup) => [setup.id, setup.preparedFrom?.id].filter(Boolean)
|
|
66
|
+
// The Setup's egress policy, when it will let these callers reach the
|
|
67
|
+
// requirement once the sandbox joins it, on top of the sandbox's current rules.
|
|
68
|
+
export function setupPolicyCoverage(requirement, setup, policies, callers = ['/**'], current = null) {
|
|
69
|
+
const policy = setupPolicyFor(policies, setup, requirement)
|
|
70
|
+
return policy && assessNetwork(requirement, { networkPolicies: { ...current?.networkPolicies, ...compileFor({ name: '', groups: [], setups: memberIds(setup) }, [policy]) } }, callers).status === 'allowed' ? policy : null
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export async function executeInstaller(client, sandbox, setup, targets, operation) {
|
|
74
|
+
sandbox = { ...sandbox, workspace: sandbox.workspace || workspaceName() }
|
|
75
|
+
// A probe reads only names and launchers, so skill files (up to 64 MB) stay behind.
|
|
76
|
+
const data = Buffer.from(JSON.stringify({ setup: operation === 'probe' ? { ...setup, items: setup.items.map(({ files, ...item }) => item) } : setup, targets, operation }))
|
|
77
|
+
const result = await withSandboxInput(client, sandbox, data, file => client.sandbox.exec(sandbox.name, ['python3', '-c', `import sys;sys.stdin=open(sys.argv[1], 'r');\n${installer}`, file], { workspace: sandbox.workspace, noLoginShell: true, timeoutSecs: 60, signal: AbortSignal.timeout(65_000) }))
|
|
78
|
+
let output
|
|
79
|
+
try { output = JSON.parse(result.stdout.toString()) } catch { throw fail('The sandbox needs Python 3.11 or later and writable agent configuration folders.', 409) }
|
|
80
|
+
if (result.exitCode !== 0 || output.error) throw fail(output.error || 'Setup operation failed.', 409)
|
|
81
|
+
return output
|
|
82
|
+
}
|
|
83
|
+
function validateTargets(targets) { try { validateSetupTargets(targets) } catch (error) { throw fail(error.message) } }
|
|
84
|
+
export function accessPolicyIdentity(policy) {
|
|
85
|
+
// Attaching an endpointless credential profile adds an inert provider rule.
|
|
86
|
+
// Ignore only those empty rules; every actual permission stays in the hash.
|
|
87
|
+
return { ...policy, networkPolicies: Object.fromEntries(Object.entries(policy?.networkPolicies || {}).filter(([name, rule]) => !(name.startsWith('_provider_') && !rule.endpoints?.length && !rule.binaries?.length))) }
|
|
88
|
+
}
|
|
89
|
+
function assertSandboxIdentity(sandbox, endpoint, expected) {
|
|
90
|
+
if (expected && (sandbox.id !== expected.id || endpoint !== expected.gateway)) throw fail('Sandbox was replaced or its gateway changed. Review the Setup for the new sandbox.', 409)
|
|
91
|
+
}
|
|
92
|
+
async function assertCurrentSandbox(plan) {
|
|
93
|
+
const expected = { id: plan.sandbox.id, gateway: plan.gateway }
|
|
94
|
+
const { target } = await gateway()
|
|
95
|
+
assertSandboxIdentity(plan.sandbox, target.endpoint, expected)
|
|
96
|
+
const current = sandboxView((await plan.client.raw.getSandbox({ name: plan.sandbox.name, workspaceScope: plan.workspaceScope })).sandbox)
|
|
97
|
+
assertSandboxIdentity(current, target.endpoint, expected)
|
|
98
|
+
}
|
|
99
|
+
async function inspectTarget(name, id, targets, expected) {
|
|
100
|
+
validateTargets(targets)
|
|
101
|
+
const snapshot = await getSetupStore().get(id)
|
|
102
|
+
const setup = usableSetup(snapshot)
|
|
103
|
+
const inactive = snapshot.items.filter(i => !setup.items.some(a => a.id === i.id)).map(i => ({ name: i.name, issues: i.issues }))
|
|
104
|
+
const { client, target, workspace, workspaceScope } = await gateway()
|
|
105
|
+
const sandbox = { ...sandboxView((await client.raw.getSandbox({ name, workspaceScope })).sandbox), workspace }
|
|
106
|
+
assertSandboxIdentity(sandbox, target.endpoint, expected)
|
|
107
|
+
if (sandbox.phase !== 'ready') throw fail('Start the sandbox before enabling or removing a Setup.', 409)
|
|
108
|
+
const [config, org, scoped, fleet, status] = await Promise.all([client.raw.getSandboxConfig({ name, workspaceScope }), readOrg(), listPolicies(), orgRoute('GET', ['org']), client.raw.getSandboxPolicyStatus({ sandbox: name, workspaceScope })])
|
|
109
|
+
const problems = setup.items.length ? [] : ['This Setup has no prepared items. Open Prepare setup to resolve requirements.']
|
|
110
|
+
if (config.configurationAdmitted === false || (!status.revision || status.revision.status !== 2 || status.activeVersion !== status.revision.version)) problems.push('The effective sandbox policy has not loaded successfully. Resolve it before enabling a Setup.')
|
|
111
|
+
let probe = null
|
|
112
|
+
try { probe = await executeInstaller(client, sandbox, setup, targets, 'probe') } catch (e) { problems.push(e.message) }
|
|
113
|
+
if (probe?.installed && JSON.stringify([...probe.targets].sort()) !== JSON.stringify([...targets].sort())) problems.push(`This Setup is assigned to ${probe.targets.join(', ')}. Select those agents to reapply or remove it.`)
|
|
114
|
+
const binaries = targets.map((t) => probe?.networkExecutables?.[COMMAND[t]] || 'unverified-script-caller')
|
|
115
|
+
if (probe) for (const [command, found] of Object.entries(probe.executables)) if (!found) problems.push(`${command} is missing. Rebuild the image with this executable installed.`)
|
|
116
|
+
if (setup.items.some(i => i.config?.url) && binaries.includes('unverified-script-caller')) problems.push('A selected harness has an unrecognized network launcher. Use a supported native or Node.js harness image.')
|
|
117
|
+
const member = { name, groups: fleet.assignments?.[name] ?? [], setups: [...(fleet.setupMembers?.[name] ?? []), ...memberIds(setup)] }
|
|
118
|
+
const grants = []
|
|
119
|
+
const network = setup.items.flatMap((item) => item.requirements.filter((r) => ['runtime', 'auth'].includes(r.phase)).map((requirement, index) => {
|
|
120
|
+
const callers = requirement.phase === 'auth' ? [...new Set(binaries.filter(b => b !== 'unverified-script-caller'))] : item.config?.command ? [probe?.networkExecutables?.[item.config.command]].filter(Boolean) : [...new Set([...binaries.filter(b => b !== 'unverified-script-caller'), probe?.networkExecutables?.node].filter(Boolean))]
|
|
121
|
+
const blocked = blockedBy(org, [requirement.host]) || blockedByPolicy(scoped, member, [requirement.host], hostMatches)
|
|
122
|
+
let assessment = assessNetwork(requirement, config.policy, callers, blocked ? [requirement.host] : [])
|
|
123
|
+
const ruleName = `setup-${setup.id.slice(0, 8)}-${item.id.slice(0, 8)}-${index}`
|
|
124
|
+
const path = requirement.phase === 'runtime' && item.config?.url && new URL(item.config.url).hostname === requirement.host ? new URL(item.config.url).pathname : requirement.phase === 'auth' ? requirement.path : undefined
|
|
125
|
+
const provider = requirement.phase === 'runtime' ? item.credentialRef?.provider : undefined
|
|
126
|
+
const endpoint = { host: requirement.host, port: requirement.port, protocol: 'rest', enforcement: 1, access: 2, ...(path ? { path } : {}), ...(provider ? { credentialBinding: { provider } } : {}) }
|
|
127
|
+
const own = config.policy?.networkPolicies?.[ruleName]
|
|
128
|
+
if (own && !blocked && callers.length && own.binaries?.length === callers.length && callers.every(p => own.binaries.some(b => b.path === p)) && own.endpoints?.length === 1) {
|
|
129
|
+
const e = own.endpoints[0]
|
|
130
|
+
if (e.host === endpoint.host && e.port === endpoint.port && e.protocol === 'rest' && e.enforcement === 1 && e.access === 2 && (e.path || '') === (path || '') && !e.denyRules?.length && !e.rules?.length && !e.allowedIps?.length && (e.credentialBinding?.provider || '') === (provider || '')) assessment = { status: 'allowed', reason: 'Reviewed Setup access is active.' }
|
|
131
|
+
}
|
|
132
|
+
// The Setup's own egress policy opens this once the sandbox joins it; credentials still need a reviewed grant.
|
|
133
|
+
const covered = !blocked && !provider && assessment.status !== 'allowed' && setupPolicyCoverage(requirement, setup, scoped, callers, config.policy)
|
|
134
|
+
if (covered) assessment = { status: 'policy', reason: `Allowed by the egress policy “${covered.name}”.` }
|
|
135
|
+
else if (!blocked && config.policySource !== 2 && callers.length && (assessment.status === 'missing' || (assessment.status === 'allowed' && provider && !own))) {
|
|
136
|
+
if (own) assessment = { status: 'review', reason: 'Managed access changed. Review this rule in Egress before replacing it.' }
|
|
137
|
+
else {
|
|
138
|
+
grants.push({ ruleName, rule: { name: ruleName, binaries: callers.map(path => ({ path })), endpoints: [endpoint] } })
|
|
139
|
+
assessment = { status: 'proposed', reason: 'Approve this destination for the listed executable. Other destinations remain governed by existing policy.' }
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (config.policySource === 2 && assessment.status !== 'allowed') assessment = { status: 'blocked', reason: 'Gateway global policy is authoritative. An administrator must update it.' }
|
|
143
|
+
if (!callers.length) assessment = { status: 'review', reason: 'The actual network executable could not be established for this tool.' }
|
|
144
|
+
return { ...requirement, item: item.name, binaries: callers, credentialProvider: provider, ...assessment }
|
|
145
|
+
}))
|
|
146
|
+
const identity = setupAccessIdentity({ gateway: target.endpoint, workspace, id: sandbox.id, createdAt: sandbox.createdAt, policy: accessPolicyIdentity(config.policy), org, scoped, group: member.group, revision: setup.revision, targets, executables: probe?.networkExecutables, grants })
|
|
147
|
+
return { client, gateway: target.endpoint, workspaceScope, sandbox, setup, targets, problems, network, grants, inactive, identity, installed: probe?.installed ?? false }
|
|
148
|
+
}
|
|
149
|
+
const ENABLEABLE = ['allowed', 'proposed', 'policy']
|
|
150
|
+
function planView(plan) {
|
|
151
|
+
const notes = [
|
|
152
|
+
...(plan.network.some((r) => r.status === 'policy') ? ['Websites allowed by the setup’s egress policy open to any program in this sandbox.'] : []),
|
|
153
|
+
...(plan.grants.length ? ['Websites you approve here open only to the listed program.'] : []),
|
|
154
|
+
...(plan.setup.items.some((i) => i.kind === 'skill') ? ['Skills use the sandbox’s existing network access.'] : []),
|
|
155
|
+
]
|
|
156
|
+
return { name: plan.setup.name, sandbox: plan.sandbox.name, revision: plan.setup.revision, targets: plan.targets, problems: plan.problems, network: plan.network, inactive: plan.inactive, requiresApproval: plan.grants.length > 0, installed: plan.installed, canEnable: !plan.problems.length && plan.network.every((r) => ENABLEABLE.includes(r.status)), notes }
|
|
157
|
+
}
|
|
158
|
+
export async function deploymentRoute(method, parts, input, options = {}) {
|
|
159
|
+
return runWithContext(contextSelection(), () => runDeploymentRoute(method, parts, input, options))
|
|
160
|
+
}
|
|
161
|
+
async function runDeploymentRoute(method, parts, input, { expectedSandbox } = {}) {
|
|
162
|
+
const state = deploymentState()
|
|
163
|
+
if (parts[0] !== 'setups' || parts.length !== 3 || !SETUP_ID.test(parts[1])) return undefined
|
|
164
|
+
const [, id, action] = parts
|
|
165
|
+
if (method === 'GET' && action === 'jobs') return [...new Map([...state.jobs.values()].filter((j) => j.setup === id).map((j) => [j.sandbox, j])).values()]
|
|
166
|
+
if (method !== 'POST') return undefined
|
|
167
|
+
const name = String(input.sandbox ?? '')
|
|
168
|
+
if (!/^[a-z0-9][a-z0-9-]{0,62}$/.test(name)) throw fail('Choose a sandbox.')
|
|
169
|
+
if (action === 'preview') {
|
|
170
|
+
for (const [key, p] of state.previews) if (p.expires < Date.now()) state.previews.delete(key)
|
|
171
|
+
if (state.previews.size >= 100) throw fail('Too many previews. Wait for old previews to expire.', 429)
|
|
172
|
+
const plan = await inspectTarget(name, id, input.targets, expectedSandbox)
|
|
173
|
+
const pinnedSandbox = { id: plan.sandbox.id, gateway: plan.gateway }
|
|
174
|
+
const token = randomUUID(); state.previews.set(token, { id, name, targets: input.targets, expectedSandbox: pinnedSandbox, identity: plan.identity, expires: Date.now() + 5 * 60_000 })
|
|
175
|
+
return { ...planView(plan), token }
|
|
176
|
+
}
|
|
177
|
+
if (action === 'enable' || action === 'remove') {
|
|
178
|
+
const preview = state.previews.get(input.token)
|
|
179
|
+
if (!preview || preview.expires < Date.now() || preview.id !== id || preview.name !== name) throw fail('Preview expired. Check the sandbox again.', 409)
|
|
180
|
+
const lock = name
|
|
181
|
+
if (state.locks.has(lock)) throw fail('Another Setup operation is running for this sandbox.', 409)
|
|
182
|
+
state.locks.add(lock)
|
|
183
|
+
try {
|
|
184
|
+
const [plan, members] = await Promise.all([inspectTarget(name, id, preview.targets, preview.expectedSandbox || expectedSandbox), readSetupMembers()])
|
|
185
|
+
if (preview.identity !== plan.identity) throw fail('The sandbox or its policy changed. Review a fresh preview.', 409)
|
|
186
|
+
if (action === 'enable' && !planView(plan).canEnable) throw fail('Resolve the missing requirements before enabling.', 409)
|
|
187
|
+
if (action === 'enable' && plan.grants.length && input.approveAccess !== true) throw fail('Approve the listed runtime access before enabling.', 409)
|
|
188
|
+
if (action === 'enable') { await assertCurrentSandbox(plan); await installArtifacts(plan.client, plan.sandbox, plan.setup.items) }
|
|
189
|
+
const joined = memberIds(plan.setup).filter((setupId) => !sandboxSetups(members, plan.sandbox, plan.gateway).includes(setupId))
|
|
190
|
+
let result
|
|
191
|
+
try {
|
|
192
|
+
if (action === 'enable') await activateAccess(plan)
|
|
193
|
+
await assertCurrentSandbox(plan)
|
|
194
|
+
result = await executeInstaller(plan.client, plan.sandbox, plan.setup, preview.targets, action === 'enable' ? 'apply' : 'remove')
|
|
195
|
+
} catch (e) {
|
|
196
|
+
// A failed enable takes the sandbox back out of the Setup policies it had just joined.
|
|
197
|
+
if (action === 'enable' && joined.length) await leaveSetup(plan, joined)
|
|
198
|
+
throw e
|
|
199
|
+
}
|
|
200
|
+
if (action === 'enable') result.checks = await verifySetup(plan)
|
|
201
|
+
else await leaveSetup(plan, memberIds(plan.setup))
|
|
202
|
+
result.inactive = plan.inactive
|
|
203
|
+
state.previews.delete(input.token)
|
|
204
|
+
const job = { setup: id, sandbox: name, targets: preview.targets, ...result, at: new Date().toISOString() }
|
|
205
|
+
state.jobs.set(keyFor(plan.sandbox, id), job)
|
|
206
|
+
return job
|
|
207
|
+
} finally { state.locks.delete(lock) }
|
|
208
|
+
}
|
|
209
|
+
return undefined
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Start with a shell for Setup-bearing templates. Imported code is not invoked
|
|
213
|
+
// until after the operator opens/restarts the agent following reconciliation.
|
|
214
|
+
export async function startSetupInstall(name, ids, targets, expectedId, approvedRevisions = {}, expectedGateway) {
|
|
215
|
+
return runWithContext(contextSelection(), () => startInstall(name, ids, targets, expectedId, approvedRevisions, expectedGateway))
|
|
216
|
+
}
|
|
217
|
+
async function startInstall(name, ids, targets, expectedId, approvedRevisions, expectedGateway) {
|
|
218
|
+
const state = deploymentState()
|
|
219
|
+
const expectedSandbox = { id: expectedId, gateway: expectedGateway ?? (await gateway()).target.endpoint }
|
|
220
|
+
const setups = await resolveSetups(ids)
|
|
221
|
+
validateTargets(targets)
|
|
222
|
+
for (const setup of setups) state.jobs.set(`${name}:${setup.id}`, { setup: setup.id, sandbox: name, targets, status: 'waiting', at: new Date().toISOString() })
|
|
223
|
+
void (async () => {
|
|
224
|
+
const { client, workspaceScope } = await gateway()
|
|
225
|
+
let ready = false
|
|
226
|
+
for (let i = 0; i < 60; i++) {
|
|
227
|
+
const box = sandboxView((await client.raw.getSandbox({ name, workspaceScope })).sandbox)
|
|
228
|
+
assertSandboxIdentity(box, (await gateway()).target.endpoint, expectedSandbox)
|
|
229
|
+
if (box.phase === 'ready') { ready = true; break }
|
|
230
|
+
if (['error', 'deleting', 'stopped'].includes(box.phase)) break
|
|
231
|
+
await new Promise((resolve) => setTimeout(resolve, 2000))
|
|
232
|
+
}
|
|
233
|
+
for (const setup of setups) {
|
|
234
|
+
let result
|
|
235
|
+
try {
|
|
236
|
+
if (!ready) throw fail('Sandbox is not ready. Retry from its Setups tab.')
|
|
237
|
+
if ((await getSetupStore().get(setup.id)).revision !== setup.revision) throw fail('Setup changed after creation. Review the updated version before enabling.')
|
|
238
|
+
const preview = await deploymentRoute('POST', ['setups', setup.id, 'preview'], { sandbox: name, targets }, { expectedSandbox })
|
|
239
|
+
if (!preview.canEnable) result = { status: 'blocked', error: [...preview.problems, ...preview.network.filter((r) => !ENABLEABLE.includes(r.status)).map((r) => `${r.host}: ${r.reason}`)].join(' ') }
|
|
240
|
+
else result = await deploymentRoute('POST', ['setups', setup.id, 'enable'], { sandbox: name, token: preview.token, approveAccess: approvedRevisions[setup.id] === setup.revision }, { expectedSandbox })
|
|
241
|
+
} catch (e) { result = { status: 'failed', error: e.message } }
|
|
242
|
+
state.jobs.set(`${name}:${setup.id}`, { setup: setup.id, sandbox: name, targets, ...result, at: new Date().toISOString() })
|
|
243
|
+
}
|
|
244
|
+
})().catch(() => { for (const setup of setups) state.jobs.set(`${name}:${setup.id}`, { setup: setup.id, sandbox: name, status: 'failed', error: 'Could not reach the sandbox. Retry from its Setups tab.' }) })
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Leaving takes the Setup's egress policy out of the sandbox now rather than on the next sweep.
|
|
248
|
+
async function leaveSetup({ sandbox, gateway: endpoint }, ids) {
|
|
249
|
+
await removeSandboxSetups({ ...sandbox, gateway: endpoint }, ids)
|
|
250
|
+
try { await syncAll({ only: (s) => s.id === sandbox.id, force: false }) } catch { /* stored revocation is applied by the next policy sync */ }
|
|
251
|
+
}
|
|
252
|
+
async function activateAccess(plan) {
|
|
253
|
+
const { client, workspaceScope, sandbox, setup } = plan
|
|
254
|
+
const expected = { id: sandbox.id, gateway: plan.gateway }
|
|
255
|
+
// Policy snapshots and their gateway effects share the mutation queue, so
|
|
256
|
+
// a concurrent revocation cannot be overwritten by this enable.
|
|
257
|
+
await serializeOrgWrite(async () => {
|
|
258
|
+
await assertCurrentSandbox(plan)
|
|
259
|
+
for (const provider of new Set(setup.items.map(i => i.credentialRef?.provider).filter(Boolean))) {
|
|
260
|
+
// Recheck the profile: attaching a changed profile must not introduce grants.
|
|
261
|
+
const found = (await client.raw.getProvider({ name: provider, workspaceScope })).provider
|
|
262
|
+
const profile = (await client.raw.getProviderProfile({ id: found.type, workspaceScope })).profile
|
|
263
|
+
if (!profile || profile.endpoints?.length) throw fail('The credential profile changed. Reconnect a dedicated MCP secret.', 409)
|
|
264
|
+
await client.raw.attachSandboxProvider({ sandbox: sandbox.name, provider, workspaceScope, requestId: randomUUID() })
|
|
265
|
+
}
|
|
266
|
+
const resource = (await client.raw.getSandbox({ name: sandbox.name, workspaceScope })).sandbox
|
|
267
|
+
const fresh = await inspectTarget(sandbox.name, setup.id, plan.targets, expected)
|
|
268
|
+
if (fresh.identity !== plan.identity) throw fail('Sandbox access changed while preparing. Review a fresh preview before enabling.',409)
|
|
269
|
+
// Joined only after that check: the 15-second policy sync would otherwise apply the Setup's policy mid-review.
|
|
270
|
+
await addSandboxSetups({ ...sandbox, gateway: plan.gateway }, memberIds(setup))
|
|
271
|
+
if (plan.grants.length || plan.network.some((r) => r.status === 'policy')) {
|
|
272
|
+
const managed = await managedOpsFor(client, workspaceScope, sandbox.name, plan.grants.flatMap(g => g.rule.endpoints.map(e => e.port)), plan.gateway)
|
|
273
|
+
await client.raw.updateConfig({ sandbox: sandbox.name, workspaceScope, global: false, expectedResourceVersion: resource.metadata?.resourceVersion, mergeOperations: [...plan.grants.map(g => ({ operation: { case: 'addRule', value: g } })), ...managed], annotations: { 'openshell.console/setup-revision': setup.revision }, requestId: randomUUID() })
|
|
274
|
+
}
|
|
275
|
+
})
|
|
276
|
+
for (let i = 0; i < 20; i++) {
|
|
277
|
+
const status = await client.raw.getSandboxPolicyStatus({ sandbox: sandbox.name, workspaceScope })
|
|
278
|
+
if (status.revision?.status === 2 && status.activeVersion === status.revision.version) {
|
|
279
|
+
const applied = await inspectTarget(sandbox.name, setup.id, plan.targets, expected)
|
|
280
|
+
if (applied.problems.length || applied.network.some(r => r.status !== 'allowed')) throw fail('Effective access no longer matches the reviewed Setup. Check requirements again.',409)
|
|
281
|
+
return
|
|
282
|
+
}
|
|
283
|
+
await new Promise(resolve => setTimeout(resolve, 500))
|
|
284
|
+
}
|
|
285
|
+
throw fail('Access was submitted but has not loaded. Check requirements again; configuration was not installed.', 409)
|
|
286
|
+
}
|
|
287
|
+
async function verifySetup({ client, sandbox, setup }) {
|
|
288
|
+
const checks = []
|
|
289
|
+
for (const item of setup.items) {
|
|
290
|
+
if (item.kind === 'skill') { checks.push({ item: item.name, status: 'files-verified', reason: 'Scripts were not executed.' }); continue }
|
|
291
|
+
if (item.auth?.mode === 'agent-session') { checks.push({item:item.name,status:'sign-in-in-agent',reason:'Configuration installed. Authenticate and check tool availability in the selected agent; the console does not read its OAuth session.'}); continue }
|
|
292
|
+
try {
|
|
293
|
+
const result = await client.sandbox.exec(sandbox.name, ['node', '-e', verifier], { workspace: sandbox.workspace, noLoginShell: true, stdin: Buffer.from(JSON.stringify({ config: item.config })), timeoutSecs: 35 })
|
|
294
|
+
const check = JSON.parse(result.stdout.toString())
|
|
295
|
+
checks.push({ item: item.name, ...check })
|
|
296
|
+
} catch { checks.push({ item: item.name, status: 'unverified', reason: 'Check needs Node.js 22 or later and compatible runtime access. Files are installed.' }) }
|
|
297
|
+
}
|
|
298
|
+
return checks
|
|
299
|
+
}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import fs from 'node:fs/promises'
|
|
2
|
+
import { constants } from 'node:fs'
|
|
3
|
+
import path from 'node:path'
|
|
4
|
+
import os from 'node:os'
|
|
5
|
+
import { unzipSync } from 'fflate'
|
|
6
|
+
import { createHash, randomUUID } from 'node:crypto'
|
|
7
|
+
import { parse } from 'smol-toml'
|
|
8
|
+
import { packageLaunch, packageRuntimeRequirements } from './setup-packages.js'
|
|
9
|
+
import { PACKAGE_PENDING } from '../shared/setup-launch.js'
|
|
10
|
+
|
|
11
|
+
export const SOURCES = ['codex', 'claude', 'cursor']
|
|
12
|
+
export const hash = (value) => createHash('sha256').update(value).digest('hex')
|
|
13
|
+
export const fail = (message, status = 400) => Object.assign(new Error(message), { status })
|
|
14
|
+
const MAX_FILE = 512 * 1024
|
|
15
|
+
// Agent config files (notably ~/.claude.json) also hold history and grow over time.
|
|
16
|
+
const MAX_CONFIG = 4 * 1024 * 1024
|
|
17
|
+
const MAX_BUNDLE = 4 * 1024 * 1024
|
|
18
|
+
const ID = /^[a-zA-Z0-9][a-zA-Z0-9_.-]{0,100}$/
|
|
19
|
+
const secret = /(?:-----BEGIN [\w ]*PRIVATE KEY-----|\b(?:sk-[A-Za-z0-9_-]{16,}|gh[pousr]_[A-Za-z0-9]{20,}|github_pat_[A-Za-z0-9_]{20,}|AKIA[A-Z0-9]{16})|(?:api[_-]?key|token|password|secret|authorization)\s*[:=]\s*["']?(?!\$|<|\{|YOUR_|your_|example|placeholder|process\.env|os\.environ)[A-Za-z0-9_+/.=-]{16,})/i
|
|
20
|
+
const textExtensions = new Set(['.md', '.txt', '.json', '.yaml', '.yml', '.toml', '.py', '.js', '.mjs', '.cjs', '.ts', '.tsx', '.jsx', '.sh', '.bash', '.css', '.html', '.csv', '.svg', '.xml'])
|
|
21
|
+
const inside = (root, file) => file === root || file.startsWith(root + path.sep)
|
|
22
|
+
// Source MCP keys are display names, not paths or destination identifiers.
|
|
23
|
+
// The installer generates its own collision-safe IDs for each harness.
|
|
24
|
+
const validMcpName = value => typeof value === 'string' && value.trim().length > 0 && value.length <= 200 && !/[\p{C}]/u.test(value) && !secret.test(value)
|
|
25
|
+
const safeLabel = value => validMcpName(value) ? value : 'Unrecognized item'
|
|
26
|
+
|
|
27
|
+
async function readBounded(file, limit = MAX_FILE) {
|
|
28
|
+
const handle = await fs.open(file, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK)
|
|
29
|
+
const size = limit % (1024 * 1024) ? `${limit / 1024} KB` : `${limit / 1024 / 1024} MB`
|
|
30
|
+
try {
|
|
31
|
+
const stat = await handle.stat()
|
|
32
|
+
if (!stat.isFile() || stat.size > limit) throw fail(`File is not a regular file or exceeds ${size}.`)
|
|
33
|
+
const data = await handle.readFile()
|
|
34
|
+
if (data.length > limit) throw fail(`File exceeds ${size}.`)
|
|
35
|
+
return data
|
|
36
|
+
} finally { await handle.close() }
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Plain-text guidance (no markdown). Echo only a short basename that cannot carry a secret.
|
|
40
|
+
const commandLabel = command => { const base = path.basename(command); return /^[A-Za-z0-9._+ -]{1,60}$/.test(base) && !secret.test(base) ? `“${base}”` : null }
|
|
41
|
+
const SCRIPT_EXTENSIONS = new Set(['.sh', '.bash', '.zsh', '.py', '.js', '.mjs', '.cjs', '.ts', '.rb', '.pl'])
|
|
42
|
+
function launcherIssue(command) {
|
|
43
|
+
const base = path.basename(command), name = commandLabel(command) ?? 'This command', is = (...names) => names.includes(base)
|
|
44
|
+
if (!command.trim()) return 'No command or URL is set for this MCP, so there’s nothing to import.'
|
|
45
|
+
if (command.includes('.app/')) return `${name} belongs to a desktop app on this computer. Sandboxes run Linux, so this MCP can’t be imported.`
|
|
46
|
+
if (is('npx', 'npm')) return `This “${base}” command can’t be imported: it points to a local path, includes something that looks like a secret, or doesn’t name an npm package. Use “npx -y <package>@<version>” with plain arguments.`
|
|
47
|
+
if (is('sh', 'bash', 'zsh', 'fish', 'cmd', 'powershell')) return `This MCP starts through “${base}”, which runs a script on this computer. Sandboxes can’t run local scripts. To import it, change its command to start the npm package directly, like “npx -y <package>@<version>”.`
|
|
48
|
+
if (is('node', 'python', 'python3', 'ruby', 'perl')) return `This MCP runs a file from this computer with “${base}”. Local files aren’t copied into sandboxes. If the MCP is published on npm, change its command to “npx -y <package>@<version>”.`
|
|
49
|
+
if (is('uv', 'uvx', 'pip')) return `Python launchers like “${base}” aren’t supported yet. Only npm packages started with npx, and remote MCPs, can be imported.`
|
|
50
|
+
if (is('docker')) return '“docker” isn’t available inside sandboxes. If this MCP is published on npm, change its command to “npx -y <package>@<version>”.'
|
|
51
|
+
if (is('curl', 'wget')) return `This MCP downloads code with “${base}” when it starts, which isn’t allowed. Use a published npm package instead.`
|
|
52
|
+
if (SCRIPT_EXTENSIONS.has(path.extname(base).toLowerCase())) return `${name} is a script on this computer. Sandboxes can’t run local scripts. To import this MCP, change its command in your agent settings to start the npm package directly, like “npx -y <package>@<version>”.`
|
|
53
|
+
return `${name} is a program on this computer, not an npm package, so it can’t be copied into a sandbox. If it’s published on npm, change the command to “npx -y <package>@<version>”.`
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Never return values of env, headers, tokens or arbitrary configuration fields.
|
|
57
|
+
export function normalizeMcp(name, raw, source) {
|
|
58
|
+
const item = { kind: 'mcp', name: safeLabel(name), sources: [source], transport: raw?.url ? 'http' : 'stdio', requirements: [], issues: [], credentialFields: [], credentialBindings: {}, config: null }
|
|
59
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw) || !validMcpName(name)) { item.issues.push('Unsupported configuration or server name.'); return item }
|
|
60
|
+
if (raw.enabled === false || raw.disabled === true) { item.disabled = true; item.issues.push('Disabled in the source harness. Enable it there before importing.') }
|
|
61
|
+
const values = {}, environment = {}, ordinaryHeaders = {}, localPaths = []
|
|
62
|
+
for (const [key, value] of Object.entries(raw.env || {})) {
|
|
63
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]{0,100}$/.test(key) || typeof value !== 'string') { item.issues.push('Unsupported environment setting.'); continue }
|
|
64
|
+
if (/token|password|secret|api.?key|authorization|credential|session|cookie|bearer/i.test(key) || secret.test(value)) { item.credentialFields.push(key); if (!/^\$\{|^openshell:resolve:env:/.test(value)) values[key] = value }
|
|
65
|
+
else if (/^(?:\/|~\/)|\/Users\/|\/Applications\//.test(value) || /(?:PATH|DIR|HOME|SOCKET|TRUSTED)/i.test(key)) localPaths.push(key)
|
|
66
|
+
else if (value.length <= 2048 && !/[\x00-\x1f]/.test(value)) environment[key] = value
|
|
67
|
+
}
|
|
68
|
+
for (const [key, value] of Object.entries(raw.http_headers || raw.headers || {})) {
|
|
69
|
+
if (typeof value !== 'string' || !/^[A-Za-z0-9_-]{1,80}$/.test(key)) { item.issues.push('Unsupported HTTP header.'); continue }
|
|
70
|
+
if (/^(host|connection|content-length|transfer-encoding|proxy-authorization)$/i.test(key)) { item.issues.push('Unsupported transport-control header was not copied.'); continue }
|
|
71
|
+
if (/^(accept|content-type|user-agent|x-api-version|mcp-protocol-version)$/i.test(key) && !secret.test(value) && !/[\r\n\x00]/.test(value) && value.length <= 512) { ordinaryHeaders[key] = value; continue }
|
|
72
|
+
const field = key.replace(/-/g, '_').toUpperCase()
|
|
73
|
+
item.credentialFields.push(field)
|
|
74
|
+
const prefix = /^Bearer /i.test(value) ? 'Bearer ' : ''
|
|
75
|
+
item.credentialBindings[field] = { header: key, prefix }; values[field] = prefix ? value.slice(7) : value
|
|
76
|
+
}
|
|
77
|
+
for (const [header, envName] of Object.entries(raw.env_http_headers || {})) {
|
|
78
|
+
if (!/^[A-Za-z0-9_-]{1,80}$/.test(header) || typeof envName !== 'string' || !/^[A-Za-z_][A-Za-z0-9_]{0,100}$/.test(envName)) { item.issues.push('Unsupported credential mapping.'); continue }
|
|
79
|
+
item.credentialFields.push(envName); item.credentialBindings[envName] = { header, prefix: '' }
|
|
80
|
+
// Do not consult the console process environment or shell profiles.
|
|
81
|
+
}
|
|
82
|
+
if (raw.bearer_token_env_var) {
|
|
83
|
+
const key = raw.bearer_token_env_var
|
|
84
|
+
if (typeof key === 'string' && /^[A-Za-z_][A-Za-z0-9_]{0,100}$/.test(key)) { item.credentialFields.push(key); item.credentialBindings[key] = { header: 'Authorization', prefix: 'Bearer ' } }
|
|
85
|
+
}
|
|
86
|
+
if (raw.oauth || raw.bearer_token) item.auth = {mode:'agent-session',status:'sign-in-required'}
|
|
87
|
+
item.credentialFields = [...new Set(item.credentialFields)]
|
|
88
|
+
if (item.credentialFields.length) item.issues.push(`Connect credentials (${item.credentialFields.join(', ')}) to use this MCP. They’re kept in the gateway, never in the setup.`)
|
|
89
|
+
if (Object.keys(values).length) item._sourceCredentials = values
|
|
90
|
+
if (raw.cwd || raw.envFile || raw.env_file) item.issues.push('Working directories and environment files need manual packaging. They were not imported.')
|
|
91
|
+
if (raw.url) {
|
|
92
|
+
try {
|
|
93
|
+
const url = new URL(raw.url)
|
|
94
|
+
if (url.protocol !== 'https:' || url.username || url.password || url.search || url.hash || secret.test(raw.url) || !url.hostname.includes('.') || /^(localhost|127\.|10\.|192\.168\.|169\.254\.|172\.(1[6-9]|2\d|3[01])\.)/.test(url.hostname)) throw Error()
|
|
95
|
+
item.requirements.push({ phase: 'runtime', host: url.hostname, port: Number(url.port || 443), path: url.pathname, reason: 'The MCP server.' })
|
|
96
|
+
if (raw.type && !['http', 'streamable-http'].includes(raw.type)) item.issues.push('Only Streamable HTTP is supported for remote MCPs.')
|
|
97
|
+
item.config = { url: url.href }
|
|
98
|
+
} catch { item.issues.push('Endpoint needs review: use a public HTTPS URL without embedded credentials. Local and private services require a dedicated connection adapter.') }
|
|
99
|
+
} else {
|
|
100
|
+
const command = typeof raw.command === 'string' ? raw.command : ''
|
|
101
|
+
const args = raw.args ?? []
|
|
102
|
+
const dependency = packageLaunch(command, args)
|
|
103
|
+
if (dependency) {
|
|
104
|
+
item.package = dependency
|
|
105
|
+
item.requirements.push(...packageRuntimeRequirements(dependency))
|
|
106
|
+
item.requirements.push({ phase: 'build', host: 'registry.npmjs.org', port: 443, reason: 'Downloads the npm package during import, in a temporary sandbox with install scripts off. Your sandboxes don’t get this access.' })
|
|
107
|
+
item.issues.push(PACKAGE_PENDING)
|
|
108
|
+
} else if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,60}$/.test(command) || ['sh','bash','zsh','fish','cmd','powershell','node','python','python3','ruby','perl','npx','npm','uv','uvx','pip','docker','curl','wget'].includes(command)) {
|
|
109
|
+
item.issues.push(launcherIssue(command))
|
|
110
|
+
} else if (!Array.isArray(args) || args.length > 32 || args.some((arg) => typeof arg !== 'string' || !/^[a-zA-Z0-9_.=-]{1,128}$/.test(arg) || /token|password|secret|key|eval|exec/i.test(arg) || secret.test(arg))) item.issues.push(`Some arguments for ${commandLabel(command) ?? 'this command'} can’t be copied. Arguments may only contain letters, numbers and . _ = - (no paths, quotes or secrets).`)
|
|
111
|
+
else item.config = { command, args }
|
|
112
|
+
}
|
|
113
|
+
// Unrunnable items keep only their launcher message; path settings matter once the MCP can start.
|
|
114
|
+
if (localPaths.length && (item.config || item.package)) item.issues.push(localPaths.length === 1 ? `Local setting ${localPaths[0]} points to a folder on this computer and wasn’t copied. Set a sandbox path for it if the MCP needs it.` : `Local settings ${localPaths.join(', ')} point to folders on this computer and weren’t copied. Set sandbox paths for them if the MCP needs them.`)
|
|
115
|
+
if (item.config?.url && Object.keys(ordinaryHeaders).length) item.config.headers = ordinaryHeaders
|
|
116
|
+
if (item.config && Object.keys(environment).length) item.config.env = environment
|
|
117
|
+
else if (Object.keys(environment).length) item.environment = environment
|
|
118
|
+
return item
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Inspect archive contents in memory; never extract or execute imported files.
|
|
122
|
+
// Keep the original bytes so scripts referencing the ZIP still work.
|
|
123
|
+
function inspectSkillZip(content, archivePath) {
|
|
124
|
+
let expandedBytes = 0, entries = 0
|
|
125
|
+
const names = new Set()
|
|
126
|
+
let unpacked
|
|
127
|
+
try {
|
|
128
|
+
unpacked = unzipSync(content, { filter: ({ name, originalSize }) => {
|
|
129
|
+
if (++entries > 200) throw fail(`ZIP ${archivePath} exceeds the 200 entry limit.`)
|
|
130
|
+
const parts = name.replace(/\/$/, '').split('/')
|
|
131
|
+
if (!name || name.startsWith('/') || name.includes('\\') || parts.some(p => !p || p === '..' || p === '.') || !/^[a-zA-Z0-9_ ./@+-]+$/.test(name) || name.length > 200 || names.has(name)) throw fail(`ZIP ${archivePath} contains an unsafe or duplicate path.`)
|
|
132
|
+
names.add(name)
|
|
133
|
+
expandedBytes += originalSize
|
|
134
|
+
if (originalSize > MAX_FILE || expandedBytes > MAX_BUNDLE) throw fail(`ZIP ${archivePath} exceeds the 512 KB per file / 4 MB expanded limit.`)
|
|
135
|
+
return true
|
|
136
|
+
} })
|
|
137
|
+
} catch (error) {
|
|
138
|
+
if (error.status) throw error
|
|
139
|
+
throw fail(`ZIP ${archivePath} could not be read. Use an unencrypted, valid ZIP.`)
|
|
140
|
+
}
|
|
141
|
+
const archiveEntries = []
|
|
142
|
+
for (const [name, data] of Object.entries(unpacked)) {
|
|
143
|
+
if (name.endsWith('/')) continue
|
|
144
|
+
// Finder resource forks are packaging metadata, not skill source files.
|
|
145
|
+
if (name.startsWith('__MACOSX/')) continue
|
|
146
|
+
if (!textExtensions.has(path.extname(name).toLowerCase())) throw fail(`ZIP ${archivePath} contains an unsupported file: ${name}.`)
|
|
147
|
+
const buffer = Buffer.from(data), text = buffer.toString('utf8')
|
|
148
|
+
if (!buffer.equals(Buffer.from(text)) || buffer.includes(0) || secret.test(text)) throw fail(`Potential credentials or binary content in ZIP ${archivePath}. Nothing from this skill was imported.`)
|
|
149
|
+
archiveEntries.push({ path: name, bytes: data.length })
|
|
150
|
+
}
|
|
151
|
+
return { archiveEntries, expandedBytes, entries }
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export async function readSkill(root, home = os.homedir()) {
|
|
155
|
+
const resolved = await fs.realpath(root)
|
|
156
|
+
if (resolved !== root || !inside(await fs.realpath(home), resolved)) throw fail('Skill location changed. Discover it again.')
|
|
157
|
+
const files = []; let bytes = 0, inspectedEntries = 0
|
|
158
|
+
async function visit(dir, prefix = '') {
|
|
159
|
+
const entries = await fs.readdir(dir, { withFileTypes: true })
|
|
160
|
+
if (entries.length > 200) throw fail('Skill has too many files.')
|
|
161
|
+
for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
162
|
+
if (entry.name.startsWith('.') || ['node_modules', '__pycache__'].includes(entry.name)) continue
|
|
163
|
+
const relative = prefix + entry.name
|
|
164
|
+
if (!/^[a-zA-Z0-9_ ./@+-]+$/.test(relative) || relative.length > 200) throw fail('Skill has an unsupported filename.')
|
|
165
|
+
const file = path.join(dir, entry.name)
|
|
166
|
+
const stat = await fs.lstat(file)
|
|
167
|
+
if (stat.isSymbolicLink() || !inside(resolved, await fs.realpath(file))) throw fail('Skill contains a link outside its reviewed bundle. Links are not copied.')
|
|
168
|
+
if (stat.isDirectory()) { if (prefix.split('/').length > 8) throw fail('Skill is nested too deeply.'); await visit(file, relative + '/'); continue }
|
|
169
|
+
const isZip = path.extname(entry.name).toLowerCase() === '.zip'
|
|
170
|
+
if (!isZip && !textExtensions.has(path.extname(entry.name).toLowerCase())) throw fail(`Unsupported skill file: ${relative}.`)
|
|
171
|
+
const content = await readBounded(file)
|
|
172
|
+
bytes += content.length
|
|
173
|
+
if (bytes > MAX_BUNDLE || ++inspectedEntries > 200) throw fail('Skill exceeds the 4 MB / 200 file limit.')
|
|
174
|
+
if (isZip) {
|
|
175
|
+
const { archiveEntries, expandedBytes, entries } = inspectSkillZip(content, relative)
|
|
176
|
+
bytes += expandedBytes; inspectedEntries += entries
|
|
177
|
+
if (bytes > MAX_BUNDLE || inspectedEntries > 200) throw fail('Skill exceeds the 4 MB / 200 file limit including ZIP contents.')
|
|
178
|
+
files.push({ path: relative, content: content.toString('base64'), encoding: 'base64', archiveEntries, executable: false })
|
|
179
|
+
continue
|
|
180
|
+
}
|
|
181
|
+
const text = content.toString('utf8')
|
|
182
|
+
if (!content.equals(Buffer.from(text)) || content.includes(0) || secret.test(text)) throw fail('Potential credentials or binary content found. Nothing from this skill was imported.')
|
|
183
|
+
files.push({ path: relative, content: text, executable: Boolean(stat.mode & 0o111) })
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
await visit(resolved)
|
|
187
|
+
if (!files.some((f) => f.path === 'SKILL.md')) throw fail('SKILL.md is missing.')
|
|
188
|
+
files.sort((a, b) => a.path.localeCompare(b.path))
|
|
189
|
+
return { files, bytes, digest: hash(JSON.stringify(files)) }
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Resolve npm-installed executables from metadata only. Never run the local
|
|
193
|
+
// command or copy its platform-specific files into a Linux sandbox.
|
|
194
|
+
export async function portableMcpConfig(raw, home) {
|
|
195
|
+
if (!raw || raw.url || typeof raw.command !== 'string' || !path.isAbsolute(raw.command) || packageLaunch(raw.command, raw.args)) return raw
|
|
196
|
+
try {
|
|
197
|
+
const root = await fs.realpath(home)
|
|
198
|
+
const executable = await fs.realpath(raw.command)
|
|
199
|
+
if (!inside(root, executable) || !(await fs.stat(executable)).isFile()) return raw
|
|
200
|
+
let directory = path.dirname(executable)
|
|
201
|
+
for (let depth = 0; depth < 12 && inside(root, directory) && directory !== root; depth++, directory = path.dirname(directory)) {
|
|
202
|
+
const parent = path.dirname(directory)
|
|
203
|
+
const isPackage = path.basename(parent) === 'node_modules' || (path.basename(parent).startsWith('@') && path.basename(path.dirname(parent)) === 'node_modules')
|
|
204
|
+
if (!isPackage) continue
|
|
205
|
+
const metadata = JSON.parse((await readBounded(path.join(directory, 'package.json'))).toString())
|
|
206
|
+
if (!/^\d+\.\d+\.\d+(?:-[a-zA-Z0-9.-]+)?(?:\+[a-zA-Z0-9.-]+)?$/.test(metadata.version || '')) return raw
|
|
207
|
+
const plan = packageLaunch('npx', [`${metadata.name}@${metadata.version}`, ...(raw.args ?? [])])
|
|
208
|
+
if (!plan || path.relative(path.basename(parent) === 'node_modules' ? parent : path.dirname(parent), directory) !== plan.name) return raw
|
|
209
|
+
const bins = typeof metadata.bin === 'string' ? { [plan.name.split('/').pop()]: metadata.bin } : metadata.bin || {}
|
|
210
|
+
const preferred = plan.name.split('/').pop()
|
|
211
|
+
const bin = bins[preferred] || (Object.keys(bins).length === 1 ? Object.values(bins)[0] : null)
|
|
212
|
+
if (typeof bin !== 'string' || !inside(directory, path.resolve(directory, bin)) || await fs.realpath(path.resolve(directory, bin)) !== executable) return raw
|
|
213
|
+
return { ...raw, command: 'npx', args: [`${plan.name}@${plan.requested}`, ...plan.args] }
|
|
214
|
+
}
|
|
215
|
+
} catch { /* Unverifiable local commands retain their actionable import issue. */ }
|
|
216
|
+
return raw
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const canonical = value => Array.isArray(value) ? value.map(canonical)
|
|
220
|
+
: value && typeof value === 'object' ? Object.fromEntries(Object.keys(value).sort().map(key => [key, canonical(value[key])])) : value
|
|
221
|
+
|
|
222
|
+
// Discovery is opt-in and restricted to standard user-owned locations. No
|
|
223
|
+
// project recursion, plugin code, shell profiles, credentials stores or network.
|
|
224
|
+
export async function discover({ sources, home = os.homedir() }) {
|
|
225
|
+
if (!Array.isArray(sources) || !sources.length || sources.some((s) => !SOURCES.includes(s))) throw fail('Select Codex, Claude Code or Cursor.')
|
|
226
|
+
const items = [], warnings = [], seen = new Map(), skillDigests = new Map()
|
|
227
|
+
const skillDigest = async root => {
|
|
228
|
+
if (!skillDigests.has(root)) skillDigests.set(root, readSkill(root, home).then(value => value.digest).catch(() => null))
|
|
229
|
+
return skillDigests.get(root)
|
|
230
|
+
}
|
|
231
|
+
const configPaths = { codex: '.codex/config.toml', claude: '.claude.json', cursor: '.cursor/mcp.json' }, labels = { codex: 'Codex', claude: 'Claude Code', cursor: 'Cursor' }
|
|
232
|
+
for (const source of [...new Set(sources)]) {
|
|
233
|
+
try {
|
|
234
|
+
const file = path.join(home, configPaths[source])
|
|
235
|
+
const resolved = await fs.realpath(file)
|
|
236
|
+
if (!inside(await fs.realpath(home), resolved)) throw fail('Configuration links outside the home directory are not read.')
|
|
237
|
+
const raw = await readBounded(resolved, MAX_CONFIG)
|
|
238
|
+
const data = source === 'codex' ? parse(raw.toString()) : JSON.parse(raw)
|
|
239
|
+
const entries = Object.entries(data[source === 'codex' ? 'mcp_servers' : 'mcpServers'] ?? {})
|
|
240
|
+
if (entries.length > 200) throw fail('More than 200 MCP configurations; narrow the source first.')
|
|
241
|
+
for (const [name, cfg] of entries) {
|
|
242
|
+
const item = normalizeMcp(name, await portableMcpConfig(cfg, home), source)
|
|
243
|
+
const digest = hash(JSON.stringify(canonical({ config: item.config, issues: [...item.issues].sort(), credentialFields: [...item.credentialFields].sort(), credentialBindings: item.credentialBindings, package: item.package, environment: item.environment, auth: item.auth, disabled: item.disabled })))
|
|
244
|
+
// Account values participate only in the private comparison key, never
|
|
245
|
+
// in the digest returned to the browser. Unresolved launchers must not
|
|
246
|
+
// collapse merely because they have the same generic error.
|
|
247
|
+
const key = 'mcp:' + digest + ':' + hash(JSON.stringify(canonical({ credentials: item._sourceCredentials, unresolved: !item.config && !item.package ? cfg : undefined })))
|
|
248
|
+
const existing = seen.get(key)
|
|
249
|
+
if (existing) { if (!existing.sources.includes(source)) existing.sources.push(source); continue }
|
|
250
|
+
const record = { ...item, id: randomUUID(), digest }
|
|
251
|
+
seen.set(key, record); items.push(record)
|
|
252
|
+
}
|
|
253
|
+
} catch (error) { warnings.push(`${labels[source]}: ${error.code === 'ENOENT' ? `no MCP config found at ~/${configPaths[source]}.` : error.status ? error.message : `couldn’t read ~/${configPaths[source]}. Check that it’s valid ${source === 'codex' ? 'TOML' : 'JSON'}.`}`) }
|
|
254
|
+
const roots = [path.join(home, source === 'claude' ? '.claude/skills' : `.${source}/skills`), ...(source === 'codex' ? [path.join(home, '.agents/skills')] : [])]
|
|
255
|
+
for (const root of roots) {
|
|
256
|
+
const entries = await fs.readdir(root, { withFileTypes: true }).catch(() => [])
|
|
257
|
+
for (const entry of entries.slice(0, 500)) {
|
|
258
|
+
if (entry.name.startsWith('.') || !ID.test(entry.name)) continue
|
|
259
|
+
const dir = path.join(root, entry.name)
|
|
260
|
+
let resolved
|
|
261
|
+
try { resolved = await fs.realpath(dir); if (!inside(await fs.realpath(home), resolved)) continue; if (!(await fs.stat(path.join(resolved, 'SKILL.md'))).isFile()) continue } catch { continue }
|
|
262
|
+
const key = 'skill:' + resolved
|
|
263
|
+
if (seen.has(key)) { const item = seen.get(key); if (!item.sources.includes(source)) item.sources.push(source); continue }
|
|
264
|
+
// Compare complete contents only for same-name copies in different
|
|
265
|
+
// locations. Different versions stay separate; review reads them again.
|
|
266
|
+
const candidates = items.filter(item => item.kind === 'skill' && item.name === entry.name)
|
|
267
|
+
let duplicate = null
|
|
268
|
+
if (candidates.length) {
|
|
269
|
+
const digest = await skillDigest(resolved)
|
|
270
|
+
if (digest) for (const candidate of candidates) {
|
|
271
|
+
if (await skillDigest(candidate.root) === digest) { duplicate = candidate; break }
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
if (duplicate) {
|
|
275
|
+
if (!duplicate.sources.includes(source)) duplicate.sources.push(source)
|
|
276
|
+
seen.set(key, duplicate); continue
|
|
277
|
+
}
|
|
278
|
+
const record = { id: randomUUID(), kind: 'skill', name: entry.name, sources: [source], root: resolved, issues: [], requirements: [], credentialFields: [] }
|
|
279
|
+
seen.set(key, record); items.push(record)
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return { items, warnings: [...warnings, 'Only your personal MCPs and skills are listed. Project-level MCPs and plugin skills aren’t included.'] }
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
export function publicItem(item) {
|
|
287
|
+
const { root, config, files, _sourceCredentials, ...rest } = item
|
|
288
|
+
return { ...rest, sourceCredentialFields: item.sourceCredentialFields || Object.keys(_sourceCredentials || {}), ...(config ? { configuration: config.url ? { endpoint: config.url } : { command: config.command, args: config.args } } : {}), ...(files ? { files: files.map(({ path, content, encoding, archiveEntries }) => ({ path, bytes: Buffer.byteLength(content, encoding === 'base64' ? 'base64' : 'utf8'), ...(encoding ? { encoding, archiveEntries } : {}) })) } : {}) }
|
|
289
|
+
}
|