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.
Files changed (898) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +8 -0
  3. package/README.md +58 -2
  4. package/SETUPS.md +75 -0
  5. package/THIRD_PARTY_NOTICES.md +15823 -0
  6. package/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  7. package/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  8. package/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  9. package/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  10. package/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  11. package/dist/assets/index-CEZ0R3YS.js +522 -0
  12. package/dist/assets/index-DYjVZRjW.css +1 -0
  13. package/dist/assets/index.esm-BVqeoYDn.js +376 -0
  14. package/dist/assets/index.esm-CXAOoF3i.js +16 -0
  15. package/dist/assets/index.esm-D0s8MSqt.js +1666 -0
  16. package/dist/assets/pixelify-sans-cyrillic-wght-normal-BfQLqnEI.woff2 +0 -0
  17. package/dist/assets/pixelify-sans-latin-ext-wght-normal-CsF3XSp0.woff2 +0 -0
  18. package/dist/assets/pixelify-sans-latin-wght-normal-Cbhn5ptY.woff2 +0 -0
  19. package/dist/assets/terminal-view-6GBZ9nXN.css +32 -0
  20. package/dist/assets/terminal-view-CkPFNoXi.js +40 -0
  21. package/dist/favicon.png +0 -0
  22. package/dist/index.html +16 -0
  23. package/dist/logos/SOURCES.md +133 -0
  24. package/dist/logos/agents/aider.svg +1 -0
  25. package/dist/logos/agents/antigravity.svg +1 -0
  26. package/dist/logos/agents/claudecode.svg +1 -0
  27. package/dist/logos/agents/codex.svg +1 -0
  28. package/dist/logos/agents/copilot.svg +1 -0
  29. package/dist/logos/agents/cursor.svg +1 -0
  30. package/dist/logos/agents/factory.svg +1 -0
  31. package/dist/logos/agents/gemini.svg +1 -0
  32. package/dist/logos/agents/kiro.svg +1 -0
  33. package/dist/logos/agents/openclaw-color.svg +1 -0
  34. package/dist/logos/agents/opencode.svg +1 -0
  35. package/dist/logos/agents/pi.svg +1 -0
  36. package/dist/logos/anthropic.svg +1 -0
  37. package/dist/logos/aws-bedrock.svg +1 -0
  38. package/dist/logos/aws-s3.svg +1 -0
  39. package/dist/logos/aws.svg +1 -0
  40. package/dist/logos/claude-code.svg +1 -0
  41. package/dist/logos/codex.svg +1 -0
  42. package/dist/logos/copilot.svg +1 -0
  43. package/dist/logos/cursor.svg +1 -0
  44. package/dist/logos/deepinfra.svg +1 -0
  45. package/dist/logos/github.svg +1 -0
  46. package/dist/logos/google-cloud.svg +1 -0
  47. package/dist/logos/google-vertex-ai.svg +1 -0
  48. package/dist/logos/nvidia.svg +1 -0
  49. package/dist/logos/openai.svg +1 -0
  50. package/dist/logos/openrouter.svg +1 -0
  51. package/dist/logos/pypi.svg +1 -0
  52. package/dist/logos/templates/debian.svg +1 -0
  53. package/dist/logos/templates/nodejs.svg +1 -0
  54. package/dist/logos/templates/python.svg +1 -0
  55. package/dist/logos/templates/ubuntu.svg +1 -0
  56. package/dist/logos/vscode.svg +1 -0
  57. package/dist/openrod.png +0 -0
  58. package/node_modules/@bufbuild/protobuf/README.md +41 -0
  59. package/node_modules/@bufbuild/protobuf/dist/commonjs/clone.d.ts +6 -0
  60. package/node_modules/@bufbuild/protobuf/dist/commonjs/clone.js +66 -0
  61. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/boot.d.ts +1 -0
  62. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/boot.js +18 -0
  63. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/enum.d.ts +10 -0
  64. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/enum.js +31 -0
  65. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/extension.d.ts +9 -0
  66. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/extension.js +28 -0
  67. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/file.d.ts +1 -0
  68. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/file.js +18 -0
  69. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/index.d.ts +10 -0
  70. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/index.js +39 -0
  71. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/message.d.ts +10 -0
  72. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/message.js +24 -0
  73. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/service.d.ts +8 -0
  74. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/service.js +27 -0
  75. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/symbols.d.ts +140 -0
  76. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/symbols.js +43 -0
  77. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/types.d.ts +79 -0
  78. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/types.js +15 -0
  79. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/boot.d.ts +63 -0
  80. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/boot.js +105 -0
  81. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/embed.d.ts +43 -0
  82. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/embed.js +244 -0
  83. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/enum.d.ts +29 -0
  84. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/enum.js +58 -0
  85. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/extension.d.ts +9 -0
  86. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/extension.js +28 -0
  87. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/file.d.ts +7 -0
  88. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/file.js +35 -0
  89. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/index.d.ts +10 -0
  90. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/index.js +39 -0
  91. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/message.d.ts +15 -0
  92. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/message.js +24 -0
  93. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/restore-json-names.d.ts +5 -0
  94. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/restore-json-names.js +29 -0
  95. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/scalar.d.ts +9 -0
  96. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/scalar.js +67 -0
  97. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/service.d.ts +8 -0
  98. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/service.js +27 -0
  99. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/symbols.d.ts +145 -0
  100. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/symbols.js +74 -0
  101. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/types.d.ts +85 -0
  102. package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/types.js +15 -0
  103. package/node_modules/@bufbuild/protobuf/dist/commonjs/create.d.ts +9 -0
  104. package/node_modules/@bufbuild/protobuf/dist/commonjs/create.js +296 -0
  105. package/node_modules/@bufbuild/protobuf/dist/commonjs/descriptors.d.ts +634 -0
  106. package/node_modules/@bufbuild/protobuf/dist/commonjs/descriptors.js +53 -0
  107. package/node_modules/@bufbuild/protobuf/dist/commonjs/equals.d.ts +46 -0
  108. package/node_modules/@bufbuild/protobuf/dist/commonjs/equals.js +209 -0
  109. package/node_modules/@bufbuild/protobuf/dist/commonjs/extensions.d.ts +60 -0
  110. package/node_modules/@bufbuild/protobuf/dist/commonjs/extensions.js +168 -0
  111. package/node_modules/@bufbuild/protobuf/dist/commonjs/fields.d.ts +23 -0
  112. package/node_modules/@bufbuild/protobuf/dist/commonjs/fields.js +45 -0
  113. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-binary.d.ts +48 -0
  114. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-binary.js +415 -0
  115. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-json.d.ts +73 -0
  116. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-json.js +1037 -0
  117. package/node_modules/@bufbuild/protobuf/dist/commonjs/index.d.ts +19 -0
  118. package/node_modules/@bufbuild/protobuf/dist/commonjs/index.js +55 -0
  119. package/node_modules/@bufbuild/protobuf/dist/commonjs/is-message.d.ts +7 -0
  120. package/node_modules/@bufbuild/protobuf/dist/commonjs/is-message.js +33 -0
  121. package/node_modules/@bufbuild/protobuf/dist/commonjs/json-value.d.ts +16 -0
  122. package/node_modules/@bufbuild/protobuf/dist/commonjs/json-value.js +15 -0
  123. package/node_modules/@bufbuild/protobuf/dist/commonjs/merge.d.ts +13 -0
  124. package/node_modules/@bufbuild/protobuf/dist/commonjs/merge.js +70 -0
  125. package/node_modules/@bufbuild/protobuf/dist/commonjs/package.json +4 -0
  126. package/node_modules/@bufbuild/protobuf/dist/commonjs/proto-int64.d.ts +98 -0
  127. package/node_modules/@bufbuild/protobuf/dist/commonjs/proto-int64.js +131 -0
  128. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/error.d.ts +9 -0
  129. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/error.js +36 -0
  130. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/guard.d.ts +20 -0
  131. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/guard.js +78 -0
  132. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/index.d.ts +8 -0
  133. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/index.js +41 -0
  134. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/message.d.ts +49 -0
  135. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/message.js +157 -0
  136. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/names.d.ts +30 -0
  137. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/names.js +115 -0
  138. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/nested-types.d.ts +35 -0
  139. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/nested-types.js +110 -0
  140. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/path.d.ts +107 -0
  141. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/path.js +376 -0
  142. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-check.d.ts +45 -0
  143. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-check.js +292 -0
  144. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-types.d.ts +217 -0
  145. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-types.js +16 -0
  146. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect.d.ts +43 -0
  147. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect.js +469 -0
  148. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/scalar.d.ts +43 -0
  149. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/scalar.js +129 -0
  150. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/unsafe.d.ts +39 -0
  151. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/unsafe.js +149 -0
  152. package/node_modules/@bufbuild/protobuf/dist/commonjs/registry.d.ts +98 -0
  153. package/node_modules/@bufbuild/protobuf/dist/commonjs/registry.js +954 -0
  154. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-binary.d.ts +28 -0
  155. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-binary.js +437 -0
  156. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-json.d.ts +67 -0
  157. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-json.js +625 -0
  158. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/from-text.d.ts +35 -0
  159. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/from-text.js +684 -0
  160. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/index.d.ts +4 -0
  161. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/index.js +21 -0
  162. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/is-group-like.d.ts +19 -0
  163. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/is-group-like.js +47 -0
  164. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/reader.d.ts +91 -0
  165. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/reader.js +481 -0
  166. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/to-text.d.ts +34 -0
  167. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/to-text.js +358 -0
  168. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/writer.d.ts +76 -0
  169. package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/writer.js +220 -0
  170. package/node_modules/@bufbuild/protobuf/dist/commonjs/types.d.ts +135 -0
  171. package/node_modules/@bufbuild/protobuf/dist/commonjs/types.js +15 -0
  172. package/node_modules/@bufbuild/protobuf/dist/commonjs/unknown-enum.d.ts +10 -0
  173. package/node_modules/@bufbuild/protobuf/dist/commonjs/unknown-enum.js +26 -0
  174. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/base64-encoding.d.ts +25 -0
  175. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/base64-encoding.js +188 -0
  176. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/binary-encoding.d.ts +286 -0
  177. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/binary-encoding.js +726 -0
  178. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/index.d.ts +5 -0
  179. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/index.js +37 -0
  180. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/size-delimited.d.ts +69 -0
  181. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/size-delimited.js +191 -0
  182. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-encoding.d.ts +53 -0
  183. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-encoding.js +106 -0
  184. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-format.d.ts +13 -0
  185. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-format.js +199 -0
  186. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/varint.d.ts +70 -0
  187. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/varint.js +334 -0
  188. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/any.d.ts +38 -0
  189. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/any.js +75 -0
  190. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/duration.d.ts +9 -0
  191. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/duration.js +39 -0
  192. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/any_pb.d.ts +238 -0
  193. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/any_pb.js +27 -0
  194. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/api_pb.d.ts +537 -0
  195. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/api_pb.js +39 -0
  196. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +490 -0
  197. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +68 -0
  198. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/cpp_features_pb.d.ts +91 -0
  199. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/cpp_features_pb.js +60 -0
  200. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +4143 -0
  201. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/descriptor_pb.js +892 -0
  202. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/duration_pb.d.ts +161 -0
  203. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/duration_pb.js +27 -0
  204. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/empty_pb.d.ts +39 -0
  205. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/empty_pb.js +27 -0
  206. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +424 -0
  207. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/field_mask_pb.js +27 -0
  208. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/go_features_pb.d.ts +189 -0
  209. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/go_features_pb.js +126 -0
  210. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/java_features_pb.d.ts +194 -0
  211. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/java_features_pb.js +106 -0
  212. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/source_context_pb.d.ts +43 -0
  213. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/source_context_pb.js +27 -0
  214. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/struct_pb.d.ts +195 -0
  215. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/struct_pb.js +59 -0
  216. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +222 -0
  217. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/timestamp_pb.js +27 -0
  218. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/type_pb.d.ts +722 -0
  219. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/type_pb.js +242 -0
  220. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +330 -0
  221. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/wrappers_pb.js +67 -0
  222. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/index.d.ts +19 -0
  223. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/index.js +48 -0
  224. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/json.d.ts +28 -0
  225. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/json.js +44 -0
  226. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/timestamp.d.ts +21 -0
  227. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/timestamp.js +57 -0
  228. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/wrappers.d.ts +25 -0
  229. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/wrappers.js +66 -0
  230. package/node_modules/@bufbuild/protobuf/dist/esm/clone.d.ts +6 -0
  231. package/node_modules/@bufbuild/protobuf/dist/esm/clone.js +63 -0
  232. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/boot.d.ts +1 -0
  233. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/boot.js +14 -0
  234. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/enum.d.ts +10 -0
  235. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/enum.js +26 -0
  236. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/extension.d.ts +9 -0
  237. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/extension.js +25 -0
  238. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/file.d.ts +1 -0
  239. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/file.js +14 -0
  240. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/index.d.ts +10 -0
  241. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/index.js +23 -0
  242. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/message.d.ts +10 -0
  243. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/message.js +21 -0
  244. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/service.d.ts +8 -0
  245. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/service.js +24 -0
  246. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/symbols.d.ts +140 -0
  247. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/symbols.js +40 -0
  248. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/types.d.ts +79 -0
  249. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/types.js +14 -0
  250. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.d.ts +63 -0
  251. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.js +101 -0
  252. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/embed.d.ts +43 -0
  253. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/embed.js +239 -0
  254. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/enum.d.ts +29 -0
  255. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/enum.js +53 -0
  256. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/extension.d.ts +9 -0
  257. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/extension.js +25 -0
  258. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.d.ts +7 -0
  259. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.js +32 -0
  260. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/index.d.ts +10 -0
  261. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/index.js +23 -0
  262. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.d.ts +15 -0
  263. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.js +21 -0
  264. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.d.ts +5 -0
  265. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.js +26 -0
  266. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/scalar.d.ts +9 -0
  267. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/scalar.js +63 -0
  268. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/service.d.ts +8 -0
  269. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/service.js +24 -0
  270. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/symbols.d.ts +145 -0
  271. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/symbols.js +71 -0
  272. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/types.d.ts +85 -0
  273. package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/types.js +14 -0
  274. package/node_modules/@bufbuild/protobuf/dist/esm/create.d.ts +9 -0
  275. package/node_modules/@bufbuild/protobuf/dist/esm/create.js +293 -0
  276. package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.d.ts +634 -0
  277. package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.js +50 -0
  278. package/node_modules/@bufbuild/protobuf/dist/esm/equals.d.ts +46 -0
  279. package/node_modules/@bufbuild/protobuf/dist/esm/equals.js +206 -0
  280. package/node_modules/@bufbuild/protobuf/dist/esm/extensions.d.ts +60 -0
  281. package/node_modules/@bufbuild/protobuf/dist/esm/extensions.js +159 -0
  282. package/node_modules/@bufbuild/protobuf/dist/esm/fields.d.ts +23 -0
  283. package/node_modules/@bufbuild/protobuf/dist/esm/fields.js +41 -0
  284. package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.d.ts +48 -0
  285. package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.js +409 -0
  286. package/node_modules/@bufbuild/protobuf/dist/esm/from-json.d.ts +73 -0
  287. package/node_modules/@bufbuild/protobuf/dist/esm/from-json.js +1029 -0
  288. package/node_modules/@bufbuild/protobuf/dist/esm/index.d.ts +19 -0
  289. package/node_modules/@bufbuild/protobuf/dist/esm/index.js +29 -0
  290. package/node_modules/@bufbuild/protobuf/dist/esm/is-message.d.ts +7 -0
  291. package/node_modules/@bufbuild/protobuf/dist/esm/is-message.js +30 -0
  292. package/node_modules/@bufbuild/protobuf/dist/esm/json-value.d.ts +16 -0
  293. package/node_modules/@bufbuild/protobuf/dist/esm/json-value.js +14 -0
  294. package/node_modules/@bufbuild/protobuf/dist/esm/merge.d.ts +13 -0
  295. package/node_modules/@bufbuild/protobuf/dist/esm/merge.js +67 -0
  296. package/node_modules/@bufbuild/protobuf/dist/esm/package.json +4 -0
  297. package/node_modules/@bufbuild/protobuf/dist/esm/proto-int64.d.ts +98 -0
  298. package/node_modules/@bufbuild/protobuf/dist/esm/proto-int64.js +128 -0
  299. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/error.d.ts +9 -0
  300. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/error.js +31 -0
  301. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.d.ts +20 -0
  302. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.js +71 -0
  303. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/index.d.ts +8 -0
  304. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/index.js +21 -0
  305. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/message.d.ts +49 -0
  306. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/message.js +152 -0
  307. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/names.d.ts +30 -0
  308. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/names.js +109 -0
  309. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.d.ts +35 -0
  310. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.js +105 -0
  311. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.d.ts +107 -0
  312. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.js +369 -0
  313. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.d.ts +45 -0
  314. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.js +284 -0
  315. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-types.d.ts +217 -0
  316. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-types.js +14 -0
  317. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.d.ts +43 -0
  318. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.js +464 -0
  319. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.d.ts +43 -0
  320. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.js +124 -0
  321. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.d.ts +39 -0
  322. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.js +140 -0
  323. package/node_modules/@bufbuild/protobuf/dist/esm/registry.d.ts +98 -0
  324. package/node_modules/@bufbuild/protobuf/dist/esm/registry.js +948 -0
  325. package/node_modules/@bufbuild/protobuf/dist/esm/to-binary.d.ts +28 -0
  326. package/node_modules/@bufbuild/protobuf/dist/esm/to-binary.js +433 -0
  327. package/node_modules/@bufbuild/protobuf/dist/esm/to-json.d.ts +67 -0
  328. package/node_modules/@bufbuild/protobuf/dist/esm/to-json.js +620 -0
  329. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/from-text.d.ts +35 -0
  330. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/from-text.js +680 -0
  331. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/index.d.ts +4 -0
  332. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/index.js +15 -0
  333. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/is-group-like.d.ts +19 -0
  334. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/is-group-like.js +44 -0
  335. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/reader.d.ts +91 -0
  336. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/reader.js +477 -0
  337. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/to-text.d.ts +34 -0
  338. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/to-text.js +355 -0
  339. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/writer.d.ts +76 -0
  340. package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/writer.js +214 -0
  341. package/node_modules/@bufbuild/protobuf/dist/esm/types.d.ts +135 -0
  342. package/node_modules/@bufbuild/protobuf/dist/esm/types.js +14 -0
  343. package/node_modules/@bufbuild/protobuf/dist/esm/unknown-enum.d.ts +10 -0
  344. package/node_modules/@bufbuild/protobuf/dist/esm/unknown-enum.js +23 -0
  345. package/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.d.ts +25 -0
  346. package/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.js +184 -0
  347. package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.d.ts +286 -0
  348. package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js +721 -0
  349. package/node_modules/@bufbuild/protobuf/dist/esm/wire/index.d.ts +5 -0
  350. package/node_modules/@bufbuild/protobuf/dist/esm/wire/index.js +18 -0
  351. package/node_modules/@bufbuild/protobuf/dist/esm/wire/size-delimited.d.ts +69 -0
  352. package/node_modules/@bufbuild/protobuf/dist/esm/wire/size-delimited.js +186 -0
  353. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.d.ts +53 -0
  354. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js +101 -0
  355. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.d.ts +13 -0
  356. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.js +195 -0
  357. package/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.d.ts +70 -0
  358. package/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.js +325 -0
  359. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/any.d.ts +38 -0
  360. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/any.js +69 -0
  361. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/duration.d.ts +9 -0
  362. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/duration.js +35 -0
  363. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +238 -0
  364. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/any_pb.js +24 -0
  365. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +537 -0
  366. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.js +36 -0
  367. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +490 -0
  368. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +65 -0
  369. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/cpp_features_pb.d.ts +91 -0
  370. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/cpp_features_pb.js +57 -0
  371. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +4143 -0
  372. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +888 -0
  373. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +161 -0
  374. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/duration_pb.js +24 -0
  375. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +39 -0
  376. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/empty_pb.js +24 -0
  377. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +424 -0
  378. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +24 -0
  379. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.d.ts +189 -0
  380. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.js +123 -0
  381. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/java_features_pb.d.ts +194 -0
  382. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/java_features_pb.js +103 -0
  383. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +43 -0
  384. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +24 -0
  385. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +195 -0
  386. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/struct_pb.js +56 -0
  387. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +222 -0
  388. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +24 -0
  389. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +722 -0
  390. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.js +239 -0
  391. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +330 -0
  392. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +64 -0
  393. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/index.d.ts +19 -0
  394. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/index.js +32 -0
  395. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/json.d.ts +28 -0
  396. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/json.js +41 -0
  397. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/timestamp.d.ts +21 -0
  398. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/timestamp.js +50 -0
  399. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.d.ts +25 -0
  400. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.js +61 -0
  401. package/node_modules/@bufbuild/protobuf/package.json +147 -0
  402. package/node_modules/@connectrpc/connect/README.md +62 -0
  403. package/node_modules/@connectrpc/connect/dist/cjs/any-client.d.ts +19 -0
  404. package/node_modules/@connectrpc/connect/dist/cjs/any-client.js +33 -0
  405. package/node_modules/@connectrpc/connect/dist/cjs/call-options.d.ts +34 -0
  406. package/node_modules/@connectrpc/connect/dist/cjs/call-options.js +15 -0
  407. package/node_modules/@connectrpc/connect/dist/cjs/callback-client.d.ts +31 -0
  408. package/node_modules/@connectrpc/connect/dist/cjs/callback-client.js +116 -0
  409. package/node_modules/@connectrpc/connect/dist/cjs/code.d.ts +75 -0
  410. package/node_modules/@connectrpc/connect/dist/cjs/code.js +92 -0
  411. package/node_modules/@connectrpc/connect/dist/cjs/connect-error.d.ts +104 -0
  412. package/node_modules/@connectrpc/connect/dist/cjs/connect-error.js +141 -0
  413. package/node_modules/@connectrpc/connect/dist/cjs/context-values.d.ts +34 -0
  414. package/node_modules/@connectrpc/connect/dist/cjs/context-values.js +41 -0
  415. package/node_modules/@connectrpc/connect/dist/cjs/cors.d.ts +45 -0
  416. package/node_modules/@connectrpc/connect/dist/cjs/cors.js +82 -0
  417. package/node_modules/@connectrpc/connect/dist/cjs/http-headers.d.ts +37 -0
  418. package/node_modules/@connectrpc/connect/dist/cjs/http-headers.js +63 -0
  419. package/node_modules/@connectrpc/connect/dist/cjs/implementation.d.ts +159 -0
  420. package/node_modules/@connectrpc/connect/dist/cjs/implementation.js +78 -0
  421. package/node_modules/@connectrpc/connect/dist/cjs/index.d.ts +22 -0
  422. package/node_modules/@connectrpc/connect/dist/cjs/index.js +46 -0
  423. package/node_modules/@connectrpc/connect/dist/cjs/interceptor.d.ts +170 -0
  424. package/node_modules/@connectrpc/connect/dist/cjs/interceptor.js +30 -0
  425. package/node_modules/@connectrpc/connect/dist/cjs/package.json +1 -0
  426. package/node_modules/@connectrpc/connect/dist/cjs/promise-client.d.ts +40 -0
  427. package/node_modules/@connectrpc/connect/dist/cjs/promise-client.js +135 -0
  428. package/node_modules/@connectrpc/connect/dist/cjs/protocol/async-iterable.d.ts +527 -0
  429. package/node_modules/@connectrpc/connect/dist/cjs/protocol/async-iterable.js +913 -0
  430. package/node_modules/@connectrpc/connect/dist/cjs/protocol/compression.d.ts +48 -0
  431. package/node_modules/@connectrpc/connect/dist/cjs/protocol/compression.js +75 -0
  432. package/node_modules/@connectrpc/connect/dist/cjs/protocol/content-type-matcher.d.ts +16 -0
  433. package/node_modules/@connectrpc/connect/dist/cjs/protocol/content-type-matcher.js +43 -0
  434. package/node_modules/@connectrpc/connect/dist/cjs/protocol/create-method-url.d.ts +17 -0
  435. package/node_modules/@connectrpc/connect/dist/cjs/protocol/create-method-url.js +36 -0
  436. package/node_modules/@connectrpc/connect/dist/cjs/protocol/envelope.d.ts +90 -0
  437. package/node_modules/@connectrpc/connect/dist/cjs/protocol/envelope.js +214 -0
  438. package/node_modules/@connectrpc/connect/dist/cjs/protocol/index.d.ts +25 -0
  439. package/node_modules/@connectrpc/connect/dist/cjs/protocol/index.js +95 -0
  440. package/node_modules/@connectrpc/connect/dist/cjs/protocol/invoke-implementation.d.ts +33 -0
  441. package/node_modules/@connectrpc/connect/dist/cjs/protocol/invoke-implementation.js +178 -0
  442. package/node_modules/@connectrpc/connect/dist/cjs/protocol/limit-io.d.ts +24 -0
  443. package/node_modules/@connectrpc/connect/dist/cjs/protocol/limit-io.js +80 -0
  444. package/node_modules/@connectrpc/connect/dist/cjs/protocol/normalize.d.ts +11 -0
  445. package/node_modules/@connectrpc/connect/dist/cjs/protocol/normalize.js +55 -0
  446. package/node_modules/@connectrpc/connect/dist/cjs/protocol/protocol-handler-factory.d.ts +18 -0
  447. package/node_modules/@connectrpc/connect/dist/cjs/protocol/protocol-handler-factory.js +15 -0
  448. package/node_modules/@connectrpc/connect/dist/cjs/protocol/protocol-headers.d.ts +9 -0
  449. package/node_modules/@connectrpc/connect/dist/cjs/protocol/protocol-headers.js +67 -0
  450. package/node_modules/@connectrpc/connect/dist/cjs/protocol/run-call.d.ts +45 -0
  451. package/node_modules/@connectrpc/connect/dist/cjs/protocol/run-call.js +125 -0
  452. package/node_modules/@connectrpc/connect/dist/cjs/protocol/serialization.d.ts +104 -0
  453. package/node_modules/@connectrpc/connect/dist/cjs/protocol/serialization.js +149 -0
  454. package/node_modules/@connectrpc/connect/dist/cjs/protocol/signals.d.ts +36 -0
  455. package/node_modules/@connectrpc/connect/dist/cjs/protocol/signals.js +100 -0
  456. package/node_modules/@connectrpc/connect/dist/cjs/protocol/transport-options.d.ts +98 -0
  457. package/node_modules/@connectrpc/connect/dist/cjs/protocol/transport-options.js +15 -0
  458. package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-fetch.d.ts +35 -0
  459. package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-fetch.js +150 -0
  460. package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-handler-client.d.ts +7 -0
  461. package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-handler-client.js +88 -0
  462. package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-handler.d.ts +167 -0
  463. package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-handler.js +130 -0
  464. package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal.d.ts +102 -0
  465. package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal.js +78 -0
  466. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/code-string.d.ts +16 -0
  467. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/code-string.js +52 -0
  468. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/content-type.d.ts +40 -0
  469. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/content-type.js +71 -0
  470. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/end-stream.d.ts +44 -0
  471. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/end-stream.js +137 -0
  472. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/error-json.d.ts +36 -0
  473. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/error-json.js +166 -0
  474. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/get-request.d.ts +6 -0
  475. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/get-request.js +66 -0
  476. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/handler-factory.d.ts +6 -0
  477. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/handler-factory.js +296 -0
  478. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/headers.d.ts +16 -0
  479. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/headers.js +32 -0
  480. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/http-status.d.ts +15 -0
  481. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/http-status.js +90 -0
  482. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/index.d.ts +16 -0
  483. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/index.js +81 -0
  484. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/parse-timeout.d.ts +13 -0
  485. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/parse-timeout.js +44 -0
  486. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/query-params.d.ts +8 -0
  487. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/query-params.js +24 -0
  488. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/request-header.d.ts +19 -0
  489. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/request-header.js +70 -0
  490. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/trailer-mux.d.ts +19 -0
  491. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/trailer-mux.js +53 -0
  492. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/transport.d.ts +6 -0
  493. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/transport.js +210 -0
  494. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/validate-response.d.ts +30 -0
  495. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/validate-response.js +71 -0
  496. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/version.d.ts +20 -0
  497. package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/version.js +58 -0
  498. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/content-type.d.ts +16 -0
  499. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/content-type.js +38 -0
  500. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/gen/status_pb.d.ts +91 -0
  501. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/gen/status_pb.js +27 -0
  502. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/handler-factory.d.ts +6 -0
  503. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/handler-factory.js +124 -0
  504. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/headers.d.ts +13 -0
  505. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/headers.js +29 -0
  506. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/http-status.d.ts +8 -0
  507. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/http-status.js +46 -0
  508. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/index.d.ts +10 -0
  509. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/index.js +61 -0
  510. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/parse-timeout.d.ts +13 -0
  511. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/parse-timeout.js +53 -0
  512. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/request-header.d.ts +13 -0
  513. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/request-header.js +56 -0
  514. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/trailer-status.d.ts +28 -0
  515. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/trailer-status.js +118 -0
  516. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/transport.d.ts +6 -0
  517. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/transport.js +185 -0
  518. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/validate-response.d.ts +33 -0
  519. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/validate-response.js +75 -0
  520. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/validate-trailer.d.ts +13 -0
  521. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/validate-trailer.js +44 -0
  522. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/content-type.d.ts +19 -0
  523. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/content-type.js +41 -0
  524. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/handler-factory.d.ts +6 -0
  525. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/handler-factory.js +130 -0
  526. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/headers.d.ts +20 -0
  527. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/headers.js +44 -0
  528. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/index.d.ts +8 -0
  529. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/index.js +61 -0
  530. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/request-header.d.ts +13 -0
  531. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/request-header.js +59 -0
  532. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/trailer.d.ts +27 -0
  533. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/trailer.js +71 -0
  534. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/transport.d.ts +6 -0
  535. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/transport.js +234 -0
  536. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/validate-response.d.ts +34 -0
  537. package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/validate-response.js +73 -0
  538. package/node_modules/@connectrpc/connect/dist/cjs/router-transport.d.ts +13 -0
  539. package/node_modules/@connectrpc/connect/dist/cjs/router-transport.js +32 -0
  540. package/node_modules/@connectrpc/connect/dist/cjs/router.d.ts +81 -0
  541. package/node_modules/@connectrpc/connect/dist/cjs/router.js +68 -0
  542. package/node_modules/@connectrpc/connect/dist/cjs/transport.d.ts +20 -0
  543. package/node_modules/@connectrpc/connect/dist/cjs/transport.js +15 -0
  544. package/node_modules/@connectrpc/connect/dist/esm/any-client.d.ts +19 -0
  545. package/node_modules/@connectrpc/connect/dist/esm/any-client.js +30 -0
  546. package/node_modules/@connectrpc/connect/dist/esm/call-options.d.ts +34 -0
  547. package/node_modules/@connectrpc/connect/dist/esm/call-options.js +14 -0
  548. package/node_modules/@connectrpc/connect/dist/esm/callback-client.d.ts +31 -0
  549. package/node_modules/@connectrpc/connect/dist/esm/callback-client.js +113 -0
  550. package/node_modules/@connectrpc/connect/dist/esm/code.d.ts +75 -0
  551. package/node_modules/@connectrpc/connect/dist/esm/code.js +89 -0
  552. package/node_modules/@connectrpc/connect/dist/esm/connect-error.d.ts +104 -0
  553. package/node_modules/@connectrpc/connect/dist/esm/connect-error.js +137 -0
  554. package/node_modules/@connectrpc/connect/dist/esm/context-values.d.ts +34 -0
  555. package/node_modules/@connectrpc/connect/dist/esm/context-values.js +37 -0
  556. package/node_modules/@connectrpc/connect/dist/esm/cors.d.ts +45 -0
  557. package/node_modules/@connectrpc/connect/dist/esm/cors.js +79 -0
  558. package/node_modules/@connectrpc/connect/dist/esm/http-headers.d.ts +37 -0
  559. package/node_modules/@connectrpc/connect/dist/esm/http-headers.js +58 -0
  560. package/node_modules/@connectrpc/connect/dist/esm/implementation.d.ts +159 -0
  561. package/node_modules/@connectrpc/connect/dist/esm/implementation.js +73 -0
  562. package/node_modules/@connectrpc/connect/dist/esm/index.d.ts +22 -0
  563. package/node_modules/@connectrpc/connect/dist/esm/index.js +27 -0
  564. package/node_modules/@connectrpc/connect/dist/esm/interceptor.d.ts +170 -0
  565. package/node_modules/@connectrpc/connect/dist/esm/interceptor.js +27 -0
  566. package/node_modules/@connectrpc/connect/dist/esm/promise-client.d.ts +40 -0
  567. package/node_modules/@connectrpc/connect/dist/esm/promise-client.js +128 -0
  568. package/node_modules/@connectrpc/connect/dist/esm/protocol/async-iterable.d.ts +527 -0
  569. package/node_modules/@connectrpc/connect/dist/esm/protocol/async-iterable.js +891 -0
  570. package/node_modules/@connectrpc/connect/dist/esm/protocol/compression.d.ts +48 -0
  571. package/node_modules/@connectrpc/connect/dist/esm/protocol/compression.js +71 -0
  572. package/node_modules/@connectrpc/connect/dist/esm/protocol/content-type-matcher.d.ts +16 -0
  573. package/node_modules/@connectrpc/connect/dist/esm/protocol/content-type-matcher.js +40 -0
  574. package/node_modules/@connectrpc/connect/dist/esm/protocol/create-method-url.d.ts +17 -0
  575. package/node_modules/@connectrpc/connect/dist/esm/protocol/create-method-url.js +33 -0
  576. package/node_modules/@connectrpc/connect/dist/esm/protocol/envelope.d.ts +90 -0
  577. package/node_modules/@connectrpc/connect/dist/esm/protocol/envelope.js +206 -0
  578. package/node_modules/@connectrpc/connect/dist/esm/protocol/index.d.ts +25 -0
  579. package/node_modules/@connectrpc/connect/dist/esm/protocol/index.js +33 -0
  580. package/node_modules/@connectrpc/connect/dist/esm/protocol/invoke-implementation.d.ts +33 -0
  581. package/node_modules/@connectrpc/connect/dist/esm/protocol/invoke-implementation.js +173 -0
  582. package/node_modules/@connectrpc/connect/dist/esm/protocol/limit-io.d.ts +24 -0
  583. package/node_modules/@connectrpc/connect/dist/esm/protocol/limit-io.js +75 -0
  584. package/node_modules/@connectrpc/connect/dist/esm/protocol/normalize.d.ts +11 -0
  585. package/node_modules/@connectrpc/connect/dist/esm/protocol/normalize.js +51 -0
  586. package/node_modules/@connectrpc/connect/dist/esm/protocol/protocol-handler-factory.d.ts +18 -0
  587. package/node_modules/@connectrpc/connect/dist/esm/protocol/protocol-handler-factory.js +14 -0
  588. package/node_modules/@connectrpc/connect/dist/esm/protocol/protocol-headers.d.ts +9 -0
  589. package/node_modules/@connectrpc/connect/dist/esm/protocol/protocol-headers.js +64 -0
  590. package/node_modules/@connectrpc/connect/dist/esm/protocol/run-call.d.ts +45 -0
  591. package/node_modules/@connectrpc/connect/dist/esm/protocol/run-call.js +121 -0
  592. package/node_modules/@connectrpc/connect/dist/esm/protocol/serialization.d.ts +104 -0
  593. package/node_modules/@connectrpc/connect/dist/esm/protocol/serialization.js +141 -0
  594. package/node_modules/@connectrpc/connect/dist/esm/protocol/signals.d.ts +36 -0
  595. package/node_modules/@connectrpc/connect/dist/esm/protocol/signals.js +95 -0
  596. package/node_modules/@connectrpc/connect/dist/esm/protocol/transport-options.d.ts +98 -0
  597. package/node_modules/@connectrpc/connect/dist/esm/protocol/transport-options.js +14 -0
  598. package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-fetch.d.ts +35 -0
  599. package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-fetch.js +142 -0
  600. package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-handler-client.d.ts +7 -0
  601. package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-handler-client.js +85 -0
  602. package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-handler.d.ts +167 -0
  603. package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-handler.js +124 -0
  604. package/node_modules/@connectrpc/connect/dist/esm/protocol/universal.d.ts +102 -0
  605. package/node_modules/@connectrpc/connect/dist/esm/protocol/universal.js +74 -0
  606. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/code-string.d.ts +16 -0
  607. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/code-string.js +48 -0
  608. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/content-type.d.ts +40 -0
  609. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/content-type.js +66 -0
  610. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/end-stream.d.ts +44 -0
  611. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/end-stream.js +131 -0
  612. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/error-json.d.ts +36 -0
  613. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/error-json.js +160 -0
  614. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/get-request.d.ts +6 -0
  615. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/get-request.js +63 -0
  616. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/handler-factory.d.ts +6 -0
  617. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/handler-factory.js +293 -0
  618. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/headers.d.ts +16 -0
  619. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/headers.js +29 -0
  620. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/http-status.d.ts +15 -0
  621. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/http-status.js +86 -0
  622. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/index.d.ts +16 -0
  623. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/index.js +33 -0
  624. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/parse-timeout.d.ts +13 -0
  625. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/parse-timeout.js +41 -0
  626. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/query-params.d.ts +8 -0
  627. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/query-params.js +21 -0
  628. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/request-header.d.ts +19 -0
  629. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/request-header.js +66 -0
  630. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/trailer-mux.d.ts +19 -0
  631. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/trailer-mux.js +49 -0
  632. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/transport.d.ts +6 -0
  633. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/transport.js +207 -0
  634. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/validate-response.d.ts +30 -0
  635. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/validate-response.js +67 -0
  636. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/version.d.ts +20 -0
  637. package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/version.js +53 -0
  638. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/content-type.d.ts +16 -0
  639. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/content-type.js +34 -0
  640. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/gen/status_pb.d.ts +91 -0
  641. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/gen/status_pb.js +24 -0
  642. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/handler-factory.d.ts +6 -0
  643. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/handler-factory.js +121 -0
  644. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/headers.d.ts +13 -0
  645. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/headers.js +26 -0
  646. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/http-status.d.ts +8 -0
  647. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/http-status.js +43 -0
  648. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/index.d.ts +10 -0
  649. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/index.js +28 -0
  650. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/parse-timeout.d.ts +13 -0
  651. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/parse-timeout.js +50 -0
  652. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/request-header.d.ts +13 -0
  653. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/request-header.js +52 -0
  654. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/trailer-status.d.ts +28 -0
  655. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/trailer-status.js +113 -0
  656. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/transport.d.ts +6 -0
  657. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/transport.js +182 -0
  658. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/validate-response.d.ts +33 -0
  659. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/validate-response.js +71 -0
  660. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/validate-trailer.d.ts +13 -0
  661. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/validate-trailer.js +41 -0
  662. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/content-type.d.ts +19 -0
  663. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/content-type.js +37 -0
  664. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/handler-factory.d.ts +6 -0
  665. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/handler-factory.js +127 -0
  666. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/headers.d.ts +20 -0
  667. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/headers.js +33 -0
  668. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/index.d.ts +8 -0
  669. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/index.js +26 -0
  670. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/request-header.d.ts +13 -0
  671. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/request-header.js +55 -0
  672. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/trailer.d.ts +27 -0
  673. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/trailer.js +65 -0
  674. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/transport.d.ts +6 -0
  675. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/transport.js +231 -0
  676. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/validate-response.d.ts +34 -0
  677. package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/validate-response.js +69 -0
  678. package/node_modules/@connectrpc/connect/dist/esm/router-transport.d.ts +13 -0
  679. package/node_modules/@connectrpc/connect/dist/esm/router-transport.js +29 -0
  680. package/node_modules/@connectrpc/connect/dist/esm/router.d.ts +81 -0
  681. package/node_modules/@connectrpc/connect/dist/esm/router.js +65 -0
  682. package/node_modules/@connectrpc/connect/dist/esm/transport.d.ts +20 -0
  683. package/node_modules/@connectrpc/connect/dist/esm/transport.js +14 -0
  684. package/node_modules/@connectrpc/connect/package.json +67 -0
  685. package/node_modules/@connectrpc/connect-node/README.md +144 -0
  686. package/node_modules/@connectrpc/connect-node/buf.gen.yaml +10 -0
  687. package/node_modules/@connectrpc/connect-node/dist/cjs/compression.d.ts +15 -0
  688. package/node_modules/@connectrpc/connect-node/dist/cjs/compression.js +96 -0
  689. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-node-adapter.d.ts +42 -0
  690. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-node-adapter.js +60 -0
  691. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-transport.d.ts +100 -0
  692. package/node_modules/@connectrpc/connect-node/dist/cjs/connect-transport.js +25 -0
  693. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-transport.d.ts +95 -0
  694. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-transport.js +24 -0
  695. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-web-transport.d.ts +96 -0
  696. package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-web-transport.js +25 -0
  697. package/node_modules/@connectrpc/connect-node/dist/cjs/http2-session-manager.d.ts +146 -0
  698. package/node_modules/@connectrpc/connect-node/dist/cjs/http2-session-manager.js +543 -0
  699. package/node_modules/@connectrpc/connect-node/dist/cjs/index.d.ts +14 -0
  700. package/node_modules/@connectrpc/connect-node/dist/cjs/index.js +34 -0
  701. package/node_modules/@connectrpc/connect-node/dist/cjs/node-error.d.ts +45 -0
  702. package/node_modules/@connectrpc/connect-node/dist/cjs/node-error.js +153 -0
  703. package/node_modules/@connectrpc/connect-node/dist/cjs/node-transport-options.d.ts +100 -0
  704. package/node_modules/@connectrpc/connect-node/dist/cjs/node-transport-options.js +58 -0
  705. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-client.d.ts +54 -0
  706. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-client.js +347 -0
  707. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-handler.d.ts +42 -0
  708. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-handler.js +225 -0
  709. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-header.d.ts +20 -0
  710. package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-header.js +117 -0
  711. package/node_modules/@connectrpc/connect-node/dist/cjs/package.json +1 -0
  712. package/node_modules/@connectrpc/connect-node/dist/esm/compression.d.ts +15 -0
  713. package/node_modules/@connectrpc/connect-node/dist/esm/compression.js +93 -0
  714. package/node_modules/@connectrpc/connect-node/dist/esm/connect-node-adapter.d.ts +42 -0
  715. package/node_modules/@connectrpc/connect-node/dist/esm/connect-node-adapter.js +57 -0
  716. package/node_modules/@connectrpc/connect-node/dist/esm/connect-transport.d.ts +100 -0
  717. package/node_modules/@connectrpc/connect-node/dist/esm/connect-transport.js +22 -0
  718. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-transport.d.ts +95 -0
  719. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-transport.js +21 -0
  720. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-web-transport.d.ts +96 -0
  721. package/node_modules/@connectrpc/connect-node/dist/esm/grpc-web-transport.js +22 -0
  722. package/node_modules/@connectrpc/connect-node/dist/esm/http2-session-manager.d.ts +146 -0
  723. package/node_modules/@connectrpc/connect-node/dist/esm/http2-session-manager.js +539 -0
  724. package/node_modules/@connectrpc/connect-node/dist/esm/index.d.ts +14 -0
  725. package/node_modules/@connectrpc/connect-node/dist/esm/index.js +21 -0
  726. package/node_modules/@connectrpc/connect-node/dist/esm/node-error.d.ts +45 -0
  727. package/node_modules/@connectrpc/connect-node/dist/esm/node-error.js +146 -0
  728. package/node_modules/@connectrpc/connect-node/dist/esm/node-transport-options.d.ts +100 -0
  729. package/node_modules/@connectrpc/connect-node/dist/esm/node-transport-options.js +55 -0
  730. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-client.d.ts +54 -0
  731. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-client.js +344 -0
  732. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-handler.d.ts +42 -0
  733. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-handler.js +221 -0
  734. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-header.d.ts +20 -0
  735. package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-header.js +113 -0
  736. package/node_modules/@connectrpc/connect-node/package.json +44 -0
  737. package/node_modules/@nvidia/openshell-sdk/README.md +303 -0
  738. package/node_modules/@nvidia/openshell-sdk/dist/client.d.ts +1243 -0
  739. package/node_modules/@nvidia/openshell-sdk/dist/client.d.ts.map +1 -0
  740. package/node_modules/@nvidia/openshell-sdk/dist/client.js +1321 -0
  741. package/node_modules/@nvidia/openshell-sdk/dist/client.js.map +1 -0
  742. package/node_modules/@nvidia/openshell-sdk/dist/errors.d.ts +35 -0
  743. package/node_modules/@nvidia/openshell-sdk/dist/errors.d.ts.map +1 -0
  744. package/node_modules/@nvidia/openshell-sdk/dist/errors.js +79 -0
  745. package/node_modules/@nvidia/openshell-sdk/dist/errors.js.map +1 -0
  746. package/node_modules/@nvidia/openshell-sdk/dist/gen/datamodel_pb.d.ts +301 -0
  747. package/node_modules/@nvidia/openshell-sdk/dist/gen/datamodel_pb.d.ts.map +1 -0
  748. package/node_modules/@nvidia/openshell-sdk/dist/gen/datamodel_pb.js +69 -0
  749. package/node_modules/@nvidia/openshell-sdk/dist/gen/datamodel_pb.js.map +1 -0
  750. package/node_modules/@nvidia/openshell-sdk/dist/gen/google/rpc/error_details_pb.d.ts +581 -0
  751. package/node_modules/@nvidia/openshell-sdk/dist/gen/google/rpc/error_details_pb.d.ts.map +1 -0
  752. package/node_modules/@nvidia/openshell-sdk/dist/gen/google/rpc/error_details_pb.js +90 -0
  753. package/node_modules/@nvidia/openshell-sdk/dist/gen/google/rpc/error_details_pb.js.map +1 -0
  754. package/node_modules/@nvidia/openshell-sdk/dist/gen/openshell_pb.d.ts +9131 -0
  755. package/node_modules/@nvidia/openshell-sdk/dist/gen/openshell_pb.d.ts.map +1 -0
  756. package/node_modules/@nvidia/openshell-sdk/dist/gen/openshell_pb.js +1898 -0
  757. package/node_modules/@nvidia/openshell-sdk/dist/gen/openshell_pb.js.map +1 -0
  758. package/node_modules/@nvidia/openshell-sdk/dist/gen/options_pb.d.ts +58 -0
  759. package/node_modules/@nvidia/openshell-sdk/dist/gen/options_pb.d.ts.map +1 -0
  760. package/node_modules/@nvidia/openshell-sdk/dist/gen/options_pb.js +24 -0
  761. package/node_modules/@nvidia/openshell-sdk/dist/gen/options_pb.js.map +1 -0
  762. package/node_modules/@nvidia/openshell-sdk/dist/gen/sandbox_pb.d.ts +1203 -0
  763. package/node_modules/@nvidia/openshell-sdk/dist/gen/sandbox_pb.d.ts.map +1 -0
  764. package/node_modules/@nvidia/openshell-sdk/dist/gen/sandbox_pb.js +277 -0
  765. package/node_modules/@nvidia/openshell-sdk/dist/gen/sandbox_pb.js.map +1 -0
  766. package/node_modules/@nvidia/openshell-sdk/dist/index.d.ts +7 -0
  767. package/node_modules/@nvidia/openshell-sdk/dist/index.d.ts.map +1 -0
  768. package/node_modules/@nvidia/openshell-sdk/dist/index.js +6 -0
  769. package/node_modules/@nvidia/openshell-sdk/dist/index.js.map +1 -0
  770. package/node_modules/@nvidia/openshell-sdk/dist/oidc.d.ts +14 -0
  771. package/node_modules/@nvidia/openshell-sdk/dist/oidc.d.ts.map +1 -0
  772. package/node_modules/@nvidia/openshell-sdk/dist/oidc.js +177 -0
  773. package/node_modules/@nvidia/openshell-sdk/dist/oidc.js.map +1 -0
  774. package/node_modules/@nvidia/openshell-sdk/dist/raw.d.ts +6 -0
  775. package/node_modules/@nvidia/openshell-sdk/dist/raw.d.ts.map +1 -0
  776. package/node_modules/@nvidia/openshell-sdk/dist/raw.js +15 -0
  777. package/node_modules/@nvidia/openshell-sdk/dist/raw.js.map +1 -0
  778. package/node_modules/@nvidia/openshell-sdk/dist/ssh-validate.d.ts +11 -0
  779. package/node_modules/@nvidia/openshell-sdk/dist/ssh-validate.d.ts.map +1 -0
  780. package/node_modules/@nvidia/openshell-sdk/dist/ssh-validate.js +58 -0
  781. package/node_modules/@nvidia/openshell-sdk/dist/ssh-validate.js.map +1 -0
  782. package/node_modules/@nvidia/openshell-sdk/dist/transport.d.ts +35 -0
  783. package/node_modules/@nvidia/openshell-sdk/dist/transport.d.ts.map +1 -0
  784. package/node_modules/@nvidia/openshell-sdk/dist/transport.js +97 -0
  785. package/node_modules/@nvidia/openshell-sdk/dist/transport.js.map +1 -0
  786. package/node_modules/@nvidia/openshell-sdk/package.json +58 -0
  787. package/package.json +93 -4
  788. package/server/activity-delivery.js +143 -0
  789. package/server/activity-store.js +168 -0
  790. package/server/agent-inventory.js +76 -0
  791. package/server/agent-resources.py +60 -0
  792. package/server/api.js +648 -0
  793. package/server/cli.js +168 -0
  794. package/server/cloud-connections.js +56 -0
  795. package/server/cloud-origin.js +11 -0
  796. package/server/cloud-proxy.js +122 -0
  797. package/server/cloud-ssh-proxy.cjs +73 -0
  798. package/server/cloud-ssh.js +135 -0
  799. package/server/cloud-transfer.js +221 -0
  800. package/server/compute.js +50 -0
  801. package/server/editor.js +114 -0
  802. package/server/egress.js +204 -0
  803. package/server/files.js +489 -0
  804. package/server/gateway-install.js +64 -0
  805. package/server/gateway.js +415 -0
  806. package/server/image-templates.js +393 -0
  807. package/server/ingress.js +185 -0
  808. package/server/launch-token.js +55 -0
  809. package/server/local-catalog.js +111 -0
  810. package/server/local-cloud-native.js +152 -0
  811. package/server/local-cloud.js +123 -0
  812. package/server/location-inventory.js +94 -0
  813. package/server/machines.js +84 -0
  814. package/server/openshell-cli.js +144 -0
  815. package/server/org.js +536 -0
  816. package/server/orphan-processes.js +42 -0
  817. package/server/paths.js +28 -0
  818. package/server/policy-template-store.js +92 -0
  819. package/server/policy.js +583 -0
  820. package/server/remote-gateway-state.js +123 -0
  821. package/server/remote-gateway.js +420 -0
  822. package/server/remote-hosts.js +354 -0
  823. package/server/remote-http.js +14 -0
  824. package/server/remote-image-engine.js +47 -0
  825. package/server/remote-runtime.js +65 -0
  826. package/server/remote-runtime.py +162 -0
  827. package/server/sandbox-identity.js +14 -0
  828. package/server/security.js +139 -0
  829. package/server/session-revocations.js +20 -0
  830. package/server/setup-artifact-installer.py +54 -0
  831. package/server/setup-artifacts.js +23 -0
  832. package/server/setup-auth-discovery.js +24 -0
  833. package/server/setup-credentials.js +54 -0
  834. package/server/setup-deployment.js +299 -0
  835. package/server/setup-discovery.js +289 -0
  836. package/server/setup-egress.js +133 -0
  837. package/server/setup-http.js +47 -0
  838. package/server/setup-installer.py +289 -0
  839. package/server/setup-json.py +8 -0
  840. package/server/setup-members.js +77 -0
  841. package/server/setup-packages.js +214 -0
  842. package/server/setup-preparation.js +144 -0
  843. package/server/setup-python.js +8 -0
  844. package/server/setup-remote-check.js +35 -0
  845. package/server/setup-transfer.js +17 -0
  846. package/server/setup-verifier.cjs +43 -0
  847. package/server/setups.js +172 -0
  848. package/server/ssh-hosts.js +184 -0
  849. package/server/ssh.js +153 -0
  850. package/server/start.js +71 -0
  851. package/server/terminal.js +173 -0
  852. package/server/worker-auth.js +18 -0
  853. package/shared/agent-access.js +103 -0
  854. package/shared/antigravity-network-guidance.js +9 -0
  855. package/shared/group-membership.js +33 -0
  856. package/shared/group-network.js +29 -0
  857. package/shared/policy-templates.js +79 -0
  858. package/shared/secret-fields.js +35 -0
  859. package/shared/setup-launch.js +25 -0
  860. package/shared/setup-targets.js +11 -0
  861. package/shared/setup-targets.json +12 -0
  862. package/src/lib/activity-export.js +52 -0
  863. package/src/lib/activity-inventory.js +45 -0
  864. package/src/lib/agents.js +41 -0
  865. package/src/lib/api.js +173 -0
  866. package/src/lib/cloud-machine.js +9 -0
  867. package/src/lib/cloud-origin.js +6 -0
  868. package/src/lib/cloud-transfer.js +22 -0
  869. package/src/lib/compute-target.js +46 -0
  870. package/src/lib/delete-network-policies.js +15 -0
  871. package/src/lib/egress-groups.js +24 -0
  872. package/src/lib/egress.js +28 -0
  873. package/src/lib/files.js +24 -0
  874. package/src/lib/fleet.js +100 -0
  875. package/src/lib/format.js +24 -0
  876. package/src/lib/groups.js +16 -0
  877. package/src/lib/image-templates.js +139 -0
  878. package/src/lib/import-setup.js +36 -0
  879. package/src/lib/local-cloud.js +118 -0
  880. package/src/lib/location-inventory.js +20 -0
  881. package/src/lib/locations.js +5 -0
  882. package/src/lib/placement.js +9 -0
  883. package/src/lib/policy-editor.js +58 -0
  884. package/src/lib/policy-sources.js +33 -0
  885. package/src/lib/quick-setup.js +110 -0
  886. package/src/lib/sandbox-creations.js +59 -0
  887. package/src/lib/sandbox-images.js +38 -0
  888. package/src/lib/sandbox-session.js +140 -0
  889. package/src/lib/sandboxes.js +78 -0
  890. package/src/lib/secret-inventory.js +26 -0
  891. package/src/lib/services.js +41 -0
  892. package/src/lib/setup-import-jobs.js +62 -0
  893. package/src/lib/setup-imports.js +4 -0
  894. package/src/lib/setup-network.js +39 -0
  895. package/src/lib/setup-template-build.js +17 -0
  896. package/src/lib/utils.js +6 -0
  897. package/vendor/OPENSHELL-LICENSE +203 -0
  898. package/vendor/nvidia-openshell-sdk-0.0.0.tgz +0 -0
@@ -0,0 +1,139 @@
1
+ import { AGENTS as AGENT_CATALOG } from './agents.js'
2
+ import { ANTIGRAVITY_NETWORK_GUIDANCE } from '../../shared/antigravity-network-guidance.js'
3
+
4
+ // Shared recipe model. Image recipes declare installed agents; their reviewed
5
+ // network access is composed at launch. Recipes never carry policy themselves.
6
+ export const BASES = [
7
+ { id: 'ubuntu:24.04', name: 'Ubuntu 24.04' },
8
+ { id: 'debian:12-slim', name: 'Debian 12 slim' },
9
+ ]
10
+ export const DEFAULT_PACKAGES = ['git', 'curl', 'ripgrep']
11
+ const installer = (url, shell = 'bash') => `curl -fsSL ${url} -o /tmp/install-agent.sh && ${shell} /tmp/install-agent.sh && rm /tmp/install-agent.sh`
12
+ const choices = [
13
+ { id: 'claude', command: 'claude', featured: true },
14
+ { id: 'codex', command: 'codex', featured: true, npm: '@openai/codex' },
15
+ { id: 'opencode', command: 'opencode', featured: true, npm: 'opencode-ai' },
16
+ // Pi downloads fd and rg from GitHub Releases when they are missing, which its
17
+ // egress rule denies, so the image ships them.
18
+ { id: 'pi', command: 'pi', npm: '@earendil-works/pi-coding-agent', ignoreScripts: true, packages: ['fd-find', 'ripgrep'] },
19
+ { id: 'cursor', command: 'cursor-agent', featured: true, install: installer('https://cursor.com/install') },
20
+ { id: 'antigravity', command: 'agy', install: installer('https://antigravity.google/cli/install.sh') },
21
+ { id: 'copilot', command: 'copilot', npm: '@github/copilot' },
22
+ { id: 'kiro', command: 'kiro-cli', packages: ['unzip'], install: installer('https://cli.kiro.dev/install') },
23
+ { id: 'droid', command: 'droid', install: installer('https://app.factory.ai/cli', 'sh') },
24
+ { id: 'aider', command: 'aider', python: true },
25
+ ]
26
+ export const AGENTS = choices.map((choice) => {
27
+ const agent = AGENT_CATALOG.find((agent) => agent.commands.includes(choice.command))
28
+ return { ...choice, name: agent.name, logo: `/logos/agents/${agent.logo}.svg` }
29
+ })
30
+ export const selectedAgents = (recipe) => AGENTS.filter((a) => recipe.agents.includes(a.id))
31
+ export const RUNTIMES = [
32
+ { id: 'node', name: 'Node.js 22', logo: '/logos/templates/nodejs.svg' },
33
+ { id: 'python', name: 'Python 3', logo: '/logos/templates/python.svg' },
34
+ // Open in VS Code needs this: its network rule lives in shared/agent-access.js.
35
+ { id: 'vscode', name: 'VS Code Server', logo: '/logos/vscode.svg' },
36
+ ]
37
+ // OpenShell intercepts TLS with its own CA. curl and the VS Code CLI read it
38
+ // from CURL_CA_BUNDLE and SSL_CERT_FILE; GNU wget, which Remote-SSH tries
39
+ // first, needs it in wgetrc.
40
+ export const OPENSHELL_CA_BUNDLE = '/run/openshell-supervisor-ca/material/ca-bundle.crt'
41
+ // What a sandbox runs first. Agents and the shell open as sessions; anything
42
+ // else is a custom command.
43
+ export const STARTS = [...AGENTS.map((a) => ({ id: a.command, name: a.name })), { id: '', name: 'Shell' }]
44
+ // OpenShell template names follow its sandbox-name rule: a DNS label of at
45
+ // most 19 characters.
46
+ export const NAME_PATTERN = /^[a-z0-9]([a-z0-9-]{0,17}[a-z0-9])?$/
47
+ // The recipe travels with the OpenShell template as one annotation value,
48
+ // which the gateway caps at 8 KB.
49
+ export const MAX_RECIPE_BYTES = 8000
50
+ export const RECIPE_ANNOTATION = 'openshell.console/recipe'
51
+
52
+ export const requiresShell = (recipe) => recipe.source === 'build' && Array.isArray(recipe.agents) && (new Set(recipe.agents).size + (Array.isArray(recipe.customAgents) ? recipe.customAgents.length : 0)) > 1
53
+
54
+ export function newRecipe(values = {}) {
55
+ const recipe = { name: '', source: 'build', agents: ['claude'], customAgents: [], repository: '', runtimes: [], base: BASES[0].id, packages: [...DEFAULT_PACKAGES], setup: '', image: '', environment: [], command: 'claude', setups: [], setupRevisions: {}, ...values }
56
+ if (requiresShell(recipe)) recipe.command = ''
57
+ return recipe
58
+ }
59
+ export const splitPackages = (text) => text.split(/[\s,]+/).filter(Boolean)
60
+ export const pendingRecipeKey = (context) => `openshell-image-recipe-v3:${context}`
61
+ export function pendingRecipe(key) {
62
+ try {
63
+ const saved = JSON.parse(sessionStorage.getItem(key))
64
+ return saved?.recipe && typeof saved.recipe.name === 'string' ? saved : null
65
+ } catch { return null }
66
+ }
67
+ // The part of a recipe stored in the annotation; environment lives in the
68
+ // template's own environment map.
69
+ export function storedRecipe(r) {
70
+ return r.source === 'image'
71
+ ? { source: 'image', image: r.image, command: r.command, ...(r.setups?.length ? { setups: r.setups, setupRevisions: r.setupRevisions || {} } : {}) }
72
+ : { source: 'build', agents: r.agents, ...(r.setups?.length ? { setups: r.setups, setupRevisions: r.setupRevisions || {} } : {}), ...(r.customAgents?.length ? { customAgents: r.customAgents } : {}), repository: r.repository, runtimes: r.runtimes, base: r.base, packages: r.packages, setup: r.setup, command: r.command }
73
+ }
74
+ // Identifies what a recipe builds today, so a cached image is not reused after
75
+ // the console changes how an agent is installed. FNV-1a keeps it synchronous.
76
+ export function buildFingerprint(recipe) {
77
+ let hash = 0x811c9dc5
78
+ for (const char of dockerfileFor(recipe)) hash = Math.imul(hash ^ char.charCodeAt(0), 0x01000193)
79
+ return (hash >>> 0).toString(16).padStart(8, '0')
80
+ }
81
+ const quote = (value) => "'" + value.replaceAll("'", "'\\''") + "'"
82
+ const imagePattern = /^[a-zA-Z0-9][a-zA-Z0-9._/:@-]{0,255}$/
83
+ export function recipeErrors(recipe) {
84
+ const errors = {}
85
+ if (!Array.isArray(recipe.setups) || recipe.setups.length > 8 || recipe.setups.some((id) => typeof id !== 'string' || !/^[a-f0-9]{24}$/.test(id)) || new Set(recipe.setups).size !== recipe.setups.length) errors.setups = 'Choose up to eight unique saved Setups.'
86
+ if (recipe.setupRevisions && (typeof recipe.setupRevisions !== 'object' || Array.isArray(recipe.setupRevisions) || Object.entries(recipe.setupRevisions).some(([id, rev]) => !recipe.setups?.includes(id) || !/^[a-f0-9]{64}$/.test(rev)))) errors.setups = 'Invalid pinned Setup revision.'
87
+ if (!NAME_PATTERN.test(recipe.name || '')) errors.name = 'Use lowercase letters, digits and dashes for the name, up to 19 characters.'
88
+ if (recipe.source === 'build') {
89
+ if (!Array.isArray(recipe.agents) || recipe.agents.some((r) => !AGENTS.some((a) => a.id === r))) errors.agents = 'Choose a supported agent.'
90
+ if (!Array.isArray(recipe.runtimes) || recipe.runtimes.some((r) => !RUNTIMES.some((x) => x.id === r))) errors.runtimes = 'Choose a supported runtime.'
91
+ if (typeof recipe.repository !== 'string') errors.repository = 'Invalid repository.'
92
+ else if (recipe.repository) {
93
+ try { const u = new URL(recipe.repository); if (/[\r\n\0]/.test(recipe.repository) || u.protocol !== 'https:' || u.username || u.password || u.search || u.hash) throw new Error() } catch { errors.repository = 'Use a public HTTPS repository URL without credentials or query parameters.' }
94
+ }
95
+ if (!BASES.some((b) => b.id === recipe.base)) errors.base = 'Choose a supported base image.'
96
+ if (!Array.isArray(recipe.packages) || recipe.packages.length > 80 || recipe.packages.some((p) => typeof p !== 'string' || !/^[a-z0-9][a-z0-9+.-]*(=[a-zA-Z0-9:.+~_-]+)?$/.test(p))) errors.packages = 'Add up to 80 valid apt package names, such as jq or build-essential.'
97
+ if (!Array.isArray(recipe.customAgents) || recipe.customAgents.length > 10 || recipe.customAgents.some((a) => !a || typeof a.name !== 'string' || !a.name.trim() || a.name.length > 80 || /[\x00-\x1f\x7f]/.test(a.name) || typeof a.install !== 'string' || !a.install.trim() || a.install.length > 6000 || /[\x00\r]/.test(a.install))) errors.customAgents = 'Enter valid custom agent install commands, up to 6,000 characters.'
98
+ if (typeof recipe.setup !== 'string' || recipe.setup.length > 6000) errors.setup = 'Setup commands must be under 6 KB.'
99
+ } else if (recipe.source === 'image') {
100
+ if (!imagePattern.test(recipe.image || '')) errors.image = 'Enter a valid image reference, such as team/workspace:latest.'
101
+ } else errors.source = 'Choose an image source.'
102
+ // The gateway's own rules come first, so a template never fails after its build.
103
+ if (!Array.isArray(recipe.environment) || recipe.environment.length > 40 || recipe.environment.some((e) => !e || typeof e.name !== 'string' || typeof e.value !== 'string' || e.name.length > 128 || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(e.name) || /[\x00-\x1f\x7f]/.test(e.value) || e.value.length > 1000)) errors.environment = 'Use variable names of letters, digits and underscores (up to 128) and single-line values (up to 1,000 characters).'
104
+ else if (recipe.environment.some((e) => e.name.startsWith('OPENSHELL_'))) errors.environment = 'Variable names starting with OPENSHELL_ are reserved by OpenShell.'
105
+ else if (recipe.environment.some((e) => /secret|token|password|api_?key|credential|auth/i.test(e.name))) errors.environment = 'Keep credentials out of templates. Attach them through Secrets when you launch.'
106
+ else if (new Set(recipe.environment.map((e) => e.name)).size !== recipe.environment.length) errors.environment = 'Environment variable names must be unique.'
107
+ if (typeof recipe.command !== 'string' || recipe.command.length > 512 || /[\r\n\0]/.test(recipe.command)) errors.command = 'Use a single-line start command, up to 512 characters.'
108
+ if (requiresShell(recipe) && recipe.command !== '') errors.command = 'Templates with multiple agents must start in Shell.'
109
+ if (!Object.keys(errors).length && new TextEncoder().encode(JSON.stringify(storedRecipe(recipe))).length > MAX_RECIPE_BYTES) errors.setup = 'This recipe is too large to store with the template. Shorten the setup commands or package list.'
110
+ return errors
111
+ }
112
+
113
+ export function dockerfileFor(recipe) {
114
+ const agents = selectedAgents(recipe)
115
+ const hasNode = Boolean(recipe.setups?.length) || recipe.runtimes.includes('node') || agents.some((a) => a.npm)
116
+ const hasPython = Boolean(recipe.setups?.length) || recipe.runtimes.includes('python') || agents.some((a) => a.python)
117
+ const packages = [...new Set(['ca-certificates', 'curl', 'iproute2', 'tmux', ...recipe.packages, ...agents.flatMap((a) => a.packages ?? []), ...(recipe.repository ? ['git'] : []), ...(hasPython ? ['python3', 'python3-venv'] : [])])]
118
+ const lines = [`FROM ${recipe.base}`, '', 'USER root', 'ENV DEBIAN_FRONTEND=noninteractive', `RUN apt-get update --error-on=any && apt-get install -y --no-install-recommends ${packages.map(quote).join(' ')} && rm -rf /var/lib/apt/lists/*`, 'RUN if getent passwd 1000 >/dev/null; then usermod --login sandbox --home /sandbox --move-home --shell /bin/bash "$(getent passwd 1000 | cut -d: -f1)"; else useradd --uid 1000 --create-home --home-dir /sandbox --shell /bin/bash sandbox; fi && chown -R 1000:1000 /sandbox']
119
+ if (hasNode) lines.push('', 'COPY --from=node:22-bookworm-slim /usr/local/ /usr/local/')
120
+ if (hasPython) lines.push('', 'RUN python3 -m venv /usr/local/venv', 'ENV PATH="/usr/local/venv/bin:${PATH}"')
121
+ // VS Code Remote-SSH downloads its version-matched server with curl or wget
122
+ // (curl is always installed above).
123
+ if (recipe.runtimes.includes('vscode')) lines.push(`RUN echo 'ca_certificate = ${OPENSHELL_CA_BUNDLE}' >> /etc/wgetrc`)
124
+ for (const agent of agents.filter((a) => a.npm)) lines.push(`RUN npm install --global ${agent.ignoreScripts ? '--ignore-scripts ' : ''}${agent.npm}`)
125
+ // Debian and Ubuntu install fd as fdfind; Pi looks for fd.
126
+ if (recipe.agents.includes('pi')) lines.push('RUN ln -sf /usr/bin/fdfind /usr/local/bin/fd')
127
+ if (recipe.agents.includes('aider')) lines.push('RUN python3 -m venv /opt/aider && /opt/aider/bin/pip install --no-cache-dir aider-chat && ln -s /opt/aider/bin/aider /usr/local/bin/aider')
128
+ if (recipe.agents.includes('claude')) lines.push('RUN curl -fsSL https://claude.ai/install.sh -o /tmp/install-claude.sh && bash /tmp/install-claude.sh && cp -L /root/.local/bin/claude /usr/local/bin/claude && chmod 0755 /usr/local/bin/claude && rm -rf /root/.local /root/.claude* /tmp/install-claude.sh')
129
+ lines.push('', 'ENV HOME=/sandbox', 'ENV PATH="/sandbox/.local/bin:/sandbox/.npm-global/bin:/sandbox/.opencode/bin:${PATH}"', 'ENV NPM_CONFIG_PREFIX=/sandbox/.npm-global', 'USER sandbox', 'WORKDIR /sandbox')
130
+ for (const agent of agents.filter((a) => a.install)) lines.push(`RUN ${agent.install} && command -v ${agent.command}`)
131
+ for (const agent of recipe.customAgents ?? []) lines.push(`RUN ${JSON.stringify(['/bin/bash', '-euo', 'pipefail', '-c', agent.install])}`)
132
+ if (recipe.repository) lines.push(`RUN git clone -- ${quote(recipe.repository)} /sandbox/project`, 'WORKDIR /sandbox/project')
133
+ if (recipe.setup.trim()) lines.push('COPY --chown=1000:1000 setup.sh /tmp/template-setup.sh', 'RUN bash -eu /tmp/template-setup.sh')
134
+ if (recipe.agents.includes('antigravity')) lines.push(`RUN printf '%s\\n' ${ANTIGRAVITY_NETWORK_GUIDANCE.split('\n').map(quote).join(' ')} >> ${recipe.repository ? '/sandbox/project' : '/sandbox'}/GEMINI.md`)
135
+ if (recipe.setups?.length) lines.push('COPY --chown=1000:1000 setup-bundles/ /sandbox/.openshell/bundles/')
136
+ // Environment and the start command live in the OpenShell template, not in image layers.
137
+ lines.push('', 'CMD ["/bin/bash"]', '')
138
+ return lines.join('\n')
139
+ }
@@ -0,0 +1,36 @@
1
+ import { isPackagePending } from '../../shared/setup-launch.js'
2
+
3
+ export const importNeedsAttention = review => review.items.some(item => !item.disabled && item.issues.length > 0)
4
+ export const providedCredentials = choice => Boolean(choice?.useSourceSecrets || choice?.provider || Object.values(choice?.secrets || {}).some(Boolean))
5
+ // Import installs pending packages, retries failed preparation and connects
6
+ // provided credentials. Every other issue was visible before Import was pressed.
7
+ const expectedIssues = (item, choice) => item.issues.filter(issue => !isPackagePending(issue) && !item.preparationIssues?.includes(issue) && !(issue.startsWith('Connect credentials') && providedCredentials(choice)))
8
+ export const knownIssues = (review, choices = {}) => new Map(review.items.map(item => [item.id, new Set(expectedIssues(item, choices[item.id]))]))
9
+ export const inactiveItems = (review, choices = {}) => review.items.filter(item => !item.disabled && expectedIssues(item, choices[item.id]).length > 0)
10
+ export const newIssues = (known, review) => review.items.some(item => !item.disabled && item.issues.some(issue => !known.get(item.id)?.has(issue)))
11
+
12
+ // Import owns preparation and saving so a successful check never needs another
13
+ // confirmation. Known issues save as inactive items; new ones keep the review open.
14
+ export async function importSetup(api, review, name, choices, {
15
+ onProgress = () => {}, onReview = () => {}, isCancelled = () => false,
16
+ resumeJob,
17
+ wait = ms => new Promise(resolve => setTimeout(resolve, ms)),
18
+ } = {}) {
19
+ const known = knownIssues(review, choices)
20
+ let job = resumeJob || await api.prepareSetup(review.token, choices)
21
+ onProgress(job)
22
+ let failures = 0
23
+ while (job.status === 'running') {
24
+ await wait(1500 * Math.min(failures + 1, 4))
25
+ // Polling survives a console restart; the preparation keeps running server-side.
26
+ try { job = await api.setupPreparation(job.id); failures = 0 } catch (error) { if (++failures >= 20) throw error; continue }
27
+ onProgress(job)
28
+ }
29
+ if (job.review) onReview(job.review)
30
+ if (job.status === 'cancelled' || isCancelled()) return { status: 'cancelled', review: job.review }
31
+ if (job.status !== 'complete' || !job.review) throw new Error(job.message || 'Import could not finish. Try again.')
32
+ if (newIssues(known, job.review)) return { status: 'needs-attention', review: job.review }
33
+ onProgress({ ...job, message: 'Saving your setup…' })
34
+ const setup = await api.saveSetup(job.review.token, name, true)
35
+ return { status: 'saved', setup, inactive: job.review.items.filter(item => !item.disabled && item.issues.length).map(item => item.name) }
36
+ }
@@ -0,0 +1,118 @@
1
+ import { currentCloudOwner } from './compute-target.js'
2
+ import { CLOUD_ORIGIN } from './cloud-origin.js'
3
+ export { CLOUD_ORIGIN }
4
+ export function isLoopbackOrigin(value) {
5
+ try {
6
+ const url = new URL(value)
7
+ return url.origin === value && url.protocol === 'http:' && ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname) && Boolean(url.port) && Number(url.port) > 0 && !url.username && !url.password
8
+ } catch { return false }
9
+ }
10
+ export function localConnectFromHash(hash) {
11
+ try {
12
+ const encoded = /^#local-connect=([A-Za-z0-9_-]+)$/.exec(hash)?.[1]
13
+ if (!encoded || encoded.length > 2048) return null
14
+ const value = JSON.parse(atob(encoded.replaceAll('-', '+').replaceAll('_', '/')))
15
+ if (!isLoopbackOrigin(value.origin) || !/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/.test(value.nonce ?? '') || !/^[a-f0-9]{64}$/.test(value.challenge ?? '')) return null
16
+ return { origin: value.origin, nonce: value.nonce, challenge: value.challenge }
17
+ } catch { return null }
18
+ }
19
+ export function isLocalConnectedMessage(event, popup, nonce, cloud = CLOUD_ORIGIN) {
20
+ return Boolean(cloud && popup && event.source === popup && event.origin === cloud && event.data?.type === 'openrod-local-connected' && event.data.nonce === nonce && typeof event.data.code === 'string' && /^[a-f0-9]{64}\.[a-f0-9]{64}$/.test(event.data.code))
21
+ }
22
+ export async function localCloudRequest(path, body, {signal} = {}) {
23
+ const response = await fetch(`/api/local-cloud/${path}`, {
24
+ signal,
25
+ method: body === undefined ? 'GET' : 'POST',
26
+ headers: { ...(currentCloudOwner() ? { 'x-openrod-local-owner': currentCloudOwner() } : {}), ...(body === undefined ? {} : { 'content-type': 'application/json', 'x-openshell-console': '1' }) },
27
+ body: body === undefined ? undefined : JSON.stringify(body),
28
+ })
29
+ const value = await response.json().catch(() => ({}))
30
+ if (value.code === 'CLOUD_OWNER_CHANGED') window.dispatchEvent(new Event('openrod-session-expired'))
31
+ if (!response.ok) throw Object.assign(new Error(value.error ?? 'Cloud connection unavailable'), {status:response.status})
32
+ return value
33
+ }
34
+
35
+ const pause = (ms, signal) => new Promise((resolve, reject) => {
36
+ const cancel = () => { clearTimeout(timer); reject(new DOMException('Cloud preparation cancelled.', 'AbortError')) }
37
+ const timer = setTimeout(() => { signal?.removeEventListener('abort', cancel); resolve() }, ms)
38
+ signal?.addEventListener('abort', cancel, { once: true })
39
+ if (signal?.aborted) cancel()
40
+ })
41
+ export async function waitForCloudReady(statusRequest, { signal, onProgress = () => {}, wait = pause, attempts = 120 } = {}) {
42
+ for (let attempt = 0; attempt < attempts; attempt++) {
43
+ signal?.throwIfAborted()
44
+ const value = await statusRequest()
45
+ signal?.throwIfAborted()
46
+ if (!value.connected) throw new Error('Your cloud connection expired. Connect again to continue.')
47
+ if (value.error) throw new Error(value.error)
48
+ onProgress(value)
49
+ if (value.machine?.status === 'ready') return value
50
+ if (value.machine?.status === 'error' || value.machine?.error) throw new Error(value.machine.error ?? 'Your cloud machine could not start.')
51
+ if (attempt < attempts - 1) await wait(5000, signal)
52
+ }
53
+ throw new Error('Your private machine is still preparing. Check its status before trying again.')
54
+ }
55
+ export async function copyLocalSandbox(local, cloud, name, destinationGroups) {
56
+ const exported = await local.cloudExport(name)
57
+ const result = await cloud.importCloud(destinationGroups ? { ...exported.bundle, destinationGroups } : exported.bundle)
58
+ return { ...result, warning: result.warning || exported.warning }
59
+ }
60
+ export async function copyCloudSandboxToLocal(cloud, local, name, destinationGroups) {
61
+ if (local.target !== 'local') throw Error('Choose a local destination for this workspace.')
62
+ return copyLocalSandbox(cloud, local, name, destinationGroups)
63
+ }
64
+
65
+ export async function authorizeLocalConnection(handoff, request = fetch) {
66
+ const response = await request('/api/cloud/local-connect/authorize', {
67
+ method: 'POST', headers: { 'content-type': 'application/json', 'x-openshell-console': '1' }, body: JSON.stringify(handoff),
68
+ })
69
+ const result = await response.json().catch(() => ({}))
70
+ if (!response.ok) throw new Error(result.error ?? 'Could not finish sign-in.')
71
+ if (typeof result.code !== 'string' || !/^[a-f0-9]{64}\.[a-f0-9]{64}$/.test(result.code)) throw new Error('Invalid sign-in response.')
72
+ return result
73
+ }
74
+ export function createLocalSignInAttempt({ popup, origin, cloud = CLOUD_ORIGIN, request = localCloudRequest, events = window, focus = () => window.focus(), setTimer = setInterval, clearTimer = clearInterval, now = Date.now }) {
75
+ let nonce, accepted = false, finished = false, resolve, reject
76
+ const promise = new Promise((yes, no) => { resolve = yes; reject = no })
77
+ const cancelNonce = async () => {
78
+ if (!nonce) return
79
+ // Cancellation belongs to this attempt, including a response arriving after
80
+ // a newer sign-in. It must never revoke another attempt's connection.
81
+ await request('cancel', { nonce }).catch(() => {})
82
+ }
83
+ const cleanup = () => { clearTimer(timer); events.removeEventListener('message', receive) }
84
+ function cancel(message = 'Cloud sign-in was cancelled.') {
85
+ if (finished) return Promise.resolve()
86
+ finished = true
87
+ cleanup(); popup.close(); reject(new Error(message))
88
+ return cancelNonce()
89
+ }
90
+ const receive = async event => {
91
+ if (finished || accepted || !nonce || !isLocalConnectedMessage(event, popup, nonce, cloud)) return
92
+ accepted = true
93
+ try {
94
+ const value = await request('finish', { nonce, code: event.data.code })
95
+ if (finished) { await cancelNonce(); return }
96
+ if (!value.connected || !value.user) throw new Error('Sign-in did not finish. Try again.')
97
+ finished = true
98
+ cleanup(); popup.close(); focus(); resolve(value)
99
+ } catch (error) {
100
+ if (finished) { await cancelNonce(); return }
101
+ await cancel(error.message)
102
+ }
103
+ }
104
+ const deadline = now() + 15 * 60_000
105
+ const timer = setTimer(() => {
106
+ if (popup.closed || now() > deadline) cancel(popup.closed ? 'Cloud sign-in was cancelled.' : 'Cloud sign-in timed out. Try again.')
107
+ }, 500)
108
+ events.addEventListener('message', receive)
109
+ // The caller owns the attempt before the first asynchronous start request.
110
+ Promise.resolve().then(async () => {
111
+ if (finished) return
112
+ const started = await request('start', { origin })
113
+ nonce = started.nonce
114
+ if (finished) { await cancelNonce(); return }
115
+ popup.location.href = started.url
116
+ }).catch(error => { if (!finished) cancel(error.message) })
117
+ return { promise, cancel }
118
+ }
@@ -0,0 +1,20 @@
1
+ // A gateway context may have the same name on separate machines. Include the
2
+ // compute target when merging inventories and use the original context for API
3
+ // calls; the server remains the authority for location availability.
4
+ export function mergeLocationInventories(sources) {
5
+ const result = { locations: [], sandboxes: [], templates: [] }
6
+ for (const { target, inventory, cloud = target === 'cloud' } of sources) {
7
+ const owners = new Map((inventory.locations ?? []).map(location => {
8
+ const owner = { ...location, target, cloud, id: JSON.stringify([target, location.context]), ...(cloud ? { label: 'Cloud' } : {}) }
9
+ result.locations.push(owner)
10
+ return [location.context, owner]
11
+ }))
12
+ for (const kind of ['sandboxes', 'templates']) {
13
+ for (const record of inventory[kind] ?? []) {
14
+ const location = owners.get(record.location?.context)
15
+ if (location) result[kind].push({ ...record, location })
16
+ }
17
+ }
18
+ }
19
+ return result
20
+ }
@@ -0,0 +1,5 @@
1
+ export const locationLabel = (location) => location?.label ?? (location?.target === 'cloud' ? 'Cloud' : location?.remote ? `SSH · ${location.host ?? location.gateway}` : 'Local')
2
+
3
+ // Gateway/workspace identity is part of every resource key: names and even ids
4
+ // can coincide on independent gateways.
5
+ export const resourceKey = (record) => JSON.stringify([[record.location?.target ?? 'local', record.location?.context ?? ''], record.id ?? record.name])
@@ -0,0 +1,9 @@
1
+ // Where a sandbox runs, as a person thinks of it. Gateways report SSH hosts as
2
+ // `remote`; a cloud gateway will report `placement: "cloud"` once it ships.
3
+ export const PLACEMENTS = {
4
+ local: { id: 'local', label: 'Local', hint: 'Runs on this computer' },
5
+ remote: { id: 'remote', label: 'Remote', hint: 'Runs on an SSH host' },
6
+ cloud: { id: 'cloud', label: 'Cloud', hint: 'Runs on a cloud machine' },
7
+ }
8
+
9
+ export const placementOf = (location) => PLACEMENTS[location?.placement]?.id ?? (location?.remote ? 'remote' : 'local')
@@ -0,0 +1,58 @@
1
+ import { BUILTIN_TEMPLATES } from '../../shared/policy-templates.js'
2
+
3
+ export const FILESYSTEM_CHOICES = [
4
+ { id: 'standard', name: 'Standard', description: 'Agents can work in /sandbox and use temporary files. System folders are read-only.' },
5
+ { id: 'read-only', name: 'Read-only workspace', description: 'Agents can inspect /sandbox but cannot change it. Temporary files stay writable. Some agents need workspace writes to operate.' },
6
+ { id: 'custom', name: 'Custom folders', description: 'Choose which folders can be read or changed.' },
7
+ ]
8
+ export const COMMON_FOLDERS = [
9
+ ['/sandbox', 'Workspace'], ['/tmp', 'Temporary files'], ['/workspace', 'Mounted workspace'],
10
+ ['/data', 'Data'], ['/opt', 'Optional software'], ['/usr', 'System software'], ['/etc', 'System configuration'],
11
+ ]
12
+ export function filesystemPreset(id) {
13
+ const fs = structuredClone(BUILTIN_TEMPLATES[0].filesystem)
14
+ if (id === 'read-only') { fs.workdir = false; fs.readOnly.push('/sandbox') }
15
+ return fs
16
+ }
17
+ export function filesystemChoice(fs) {
18
+ const samePaths = (a, b) => JSON.stringify([...a].sort()) === JSON.stringify([...b].sort())
19
+ for (const id of ['standard', 'read-only']) {
20
+ const preset = filesystemPreset(id)
21
+ if (fs.workdir === preset.workdir && samePaths(fs.readOnly, preset.readOnly) && samePaths(fs.readWrite, preset.readWrite)) return id
22
+ }
23
+ return 'custom'
24
+ }
25
+ export function availablePolicyId(name, templates) {
26
+ const stem = name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '').slice(0, 43).replace(/-$/, '') || 'policy'
27
+ const taken = new Set([...BUILTIN_TEMPLATES.map(template => template.id), 'claude-subscription', 'claude-github-readonly', ...templates.map(template => template.id)])
28
+ let id = stem, suffix = 2
29
+ while (taken.has(id)) id = `${stem}-${suffix++}`
30
+ return id
31
+ }
32
+ export const DESTINATION_PROGRAMS = [
33
+ { id: 'curl', name: 'Web requests (curl)', binaries: ['/usr/bin/curl', '/usr/local/bin/curl'] },
34
+ { id: 'node', name: 'Node.js programs', binaries: ['/usr/bin/node', '/usr/local/bin/node'] },
35
+ { id: 'python', name: 'Python programs', binaries: ['/usr/bin/python3*', '/usr/local/bin/python3*', '/usr/local/venv/bin/python*'] },
36
+ ]
37
+ export function destinationRule({ host, access, program }, rules = []) {
38
+ host = host.trim().toLowerCase()
39
+ if (!/^(\*\*?\.)?[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/.test(host)) throw new Error('Enter a hostname, such as docs.example.com, without https:// or a path.')
40
+ if (!['read-only', 'read-write'].includes(access)) throw new Error('Choose read or read and write access.')
41
+ const programs = DESTINATION_PROGRAMS.find(item => item.id === program)
42
+ if (!programs) throw new Error('Choose which programs can connect.')
43
+ const name = availablePolicyId(`destination-${host}`, rules.map(rule => ({ id: rule.name })))
44
+ return { name, binaries: [...programs.binaries], endpoints: [{ host, ports: [443], protocol: 'rest', access, enforcement: 'enforce' }] }
45
+ }
46
+
47
+ // Landlock permissions are additive: a writable ancestor also makes children writable.
48
+ export function folderAccess(filesystem, path) {
49
+ const covers = parent => parent === path || parent === '/' || path.startsWith(`${parent.replace(/\/$/, '')}/`)
50
+ if ((path === '/sandbox' && filesystem.workdir) || filesystem.readWrite.some(covers)) return 'readWrite'
51
+ return filesystem.readOnly.some(covers) ? 'readOnly' : 'none'
52
+ }
53
+ export function setFolderAccess(filesystem, path, access) {
54
+ const next = { ...filesystem, readOnly: filesystem.readOnly.filter(item => item !== path), readWrite: filesystem.readWrite.filter(item => item !== path) }
55
+ if (path === '/sandbox') next.workdir = access === 'readWrite'
56
+ if (access !== 'none' && !(path === '/sandbox' && access === 'readWrite')) next[access].push(path)
57
+ return next
58
+ }
@@ -0,0 +1,33 @@
1
+ // Where an egress rule comes from decides who may change it. The prefixes are
2
+ // written by the gateway (_provider_), by network rules (egress_), for the
3
+ // shared blocked hosts (org_; group_ is from before network rules) and for
4
+ // an agent's own destinations at launch (agent-).
5
+ export const SOURCE = {
6
+ own: { label: "Sandbox", swatch: "bg-stone-700", beam: ["#a8a29e", "#44403c"] },
7
+ agent: { label: "Agent defaults", swatch: "bg-indigo-500", beam: ["#a5b4fc", "#6366f1"] },
8
+ org: { label: "Shared", swatch: "bg-[#4a5568]", beam: ["#94a3b8", "#4a5568"] },
9
+ group: { label: "Inherited", swatch: "bg-teal-600", beam: ["#5eead4", "#0f766e"] },
10
+ policy: { label: "Network rule", swatch: "bg-indigo-600", beam: ["#a5b4fc", "#4338ca"] },
11
+ secret: { label: "Secret", swatch: "bg-amber-600", beam: ["#fcd34d", "#b45309"] },
12
+ }
13
+ export const SOURCE_ORDER = ["org", "policy", "group", "agent", "own", "secret"]
14
+
15
+ export const sourceOf = (key) => (key.startsWith("_provider_") ? "secret" : key.startsWith("egress_") ? "policy" : key.startsWith("org_") ? "org" : key.startsWith("group_") ? "group" : key.startsWith("agent-") ? "agent" : "own")
16
+ export const displayName = (key) => key.replace(/^_provider_/, "").replace(/^(org|group|egress)_/, "").replace(/_/g, "-")
17
+
18
+ export function hostOf(d) {
19
+ if (!d) return null
20
+ try { return new URL(d.includes('://') ? d : `https://${d}`).hostname } catch { return d.split('/')[0].replace(/:\d+$/, '') }
21
+ }
22
+ export function portOf(d) {
23
+ try { const url = new URL(d.includes('://') ? d : `https://${d}`); return Number(url.port) || (url.protocol === 'http:' ? 80 : 443) } catch { return 443 }
24
+ }
25
+ export const program = (path) => path.split("/").pop()
26
+ export const isIp = (host) => /^\d+\.\d+\.\d+\.\d+$/.test(host)
27
+
28
+ // The part of a host a person recognises: api.github.com → github.
29
+ export function brandOf(host) {
30
+ const parts = String(host).replace(/^\*\*?\./, "").split(".")
31
+ const core = parts.length >= 3 && ["co", "com", "org", "net", "ac", "gov"].includes(parts.at(-2)) ? parts.at(-3) : parts.at(-2) ?? parts[0]
32
+ return core ?? host
33
+ }
@@ -0,0 +1,110 @@
1
+ import { AGENTS, RUNTIMES, newRecipe, buildFingerprint } from './image-templates.js'
2
+ import { agentAccessFor, TOOL_ACCESS } from '../../shared/agent-access.js'
3
+
4
+ export const QUICK_AGENTS = AGENTS.filter((agent) => !agentAccessFor({ source: 'build', agents: [agent.id] }).unsupported.length)
5
+ export function normalizeQuickAgents(value) {
6
+ const ids = Array.isArray(value) ? value : value === 'terminal' ? [] : [value]
7
+ if (ids.some((id) => !QUICK_AGENTS.some((agent) => agent.id === id))) throw new Error('Choose a supported agent.')
8
+ return QUICK_AGENTS.filter((agent) => ids.includes(agent.id)).map((agent) => agent.id)
9
+ }
10
+
11
+ export function quickSession(ids, openIn) {
12
+ const selected = normalizeQuickAgents(ids)
13
+ if (selected.length !== 1 || openIn === 'shell') return 'shell'
14
+ const agent = QUICK_AGENTS.find((agent) => agent.id === openIn && selected.includes(agent.id))
15
+ if (!agent) throw new Error('Choose Shell or a selected agent.')
16
+ return agent.command
17
+ }
18
+
19
+ export const QUICK_TOOLS = RUNTIMES.filter((tool) => TOOL_ACCESS[tool.id])
20
+ export function quickRecipe(agentId, name = '', openIn = 'agent', withSetups = false, setups = [], tools = []) {
21
+ if (!['agent', 'shell'].includes(openIn)) throw new Error('Choose Shell or the selected agent.')
22
+ if (tools.some((id) => !TOOL_ACCESS[id])) throw new Error('Choose a supported tool.')
23
+ const runtimes = [...((withSetups || setups.length) ? ['python', 'node'] : []), ...QUICK_TOOLS.filter((tool) => tools.includes(tool.id)).map((tool) => tool.id)]
24
+ const agents = normalizeQuickAgents(agentId)
25
+ const agent = QUICK_AGENTS.find((item) => item.id === agents[0])
26
+ // Composed images are independent of which session opens on connection.
27
+ return newRecipe({ name, agents, runtimes, setups: setups.map(s => s.id), setupRevisions: Object.fromEntries(setups.map(s => [s.id, s.revision])), command: Array.isArray(agentId) || openIn === 'shell' ? '' : agent?.command || '' })
28
+ }
29
+
30
+ export function matchingQuickTemplate(items, agentId, openIn = 'agent', withSetups = false, setups = [], tools = []) {
31
+ const expected = quickRecipe(agentId, '', openIn, withSetups, setups, tools)
32
+ return items.find((item) => item.managed && item.status === 'ready' && item.image && item.build === buildFingerprint(expected) &&
33
+ JSON.stringify(newRecipe({ ...item.recipe, name: '' })) === JSON.stringify(expected))
34
+ }
35
+
36
+ export function compatibleProviders(providers, agentId) {
37
+ // Match credential integrations explicitly; a generic network profile is not sign-in.
38
+ const types = { claude: ['claude-code'], codex: ['codex'] }[agentId] || []
39
+ return providers.filter((provider) => types.includes(provider.type))
40
+ }
41
+
42
+ const pause = (ms, signal) => new Promise((resolve, reject) => {
43
+ const cancel = () => { clearTimeout(timer); reject(new DOMException('Preparation cancelled.', 'AbortError')) }
44
+ const timer = setTimeout(() => { signal?.removeEventListener('abort', cancel); resolve() }, ms)
45
+ signal?.addEventListener('abort', cancel, { once: true })
46
+ if (signal?.aborted) cancel()
47
+ })
48
+
49
+ export async function prepareQuickTemplate(api, agentId, { openIn = 'agent', withSetups = false, setups = [], tools = [], signal, onProgress = () => {}, onBuild = () => {}, onBuildUpdate = () => {}, wait = pause } = {}) {
50
+ const check = () => { if (signal?.aborted) throw new DOMException('Preparation cancelled.', 'AbortError') }
51
+ check()
52
+ const items = await api.imageTemplates()
53
+ check()
54
+ const existing = matchingQuickTemplate(items, agentId, openIn, withSetups, setups, tools)
55
+ if (existing) { onBuildUpdate(existing); return existing }
56
+ const ids = normalizeQuickAgents(agentId)
57
+ const label = ids.length > 1 ? 'agents' : ids[0] || 'terminal'
58
+ const name = `q-${label.slice(0, 9)}-${crypto.randomUUID().slice(0, 6)}`
59
+ onProgress('Preparing environment… First-time setup can take a few minutes.')
60
+ const job = await api.buildImageTemplate(quickRecipe(agentId, name, openIn, withSetups, setups, tools))
61
+ onBuild(name)
62
+ onBuildUpdate({ ...job, name })
63
+ check()
64
+ if (job.status === 'failed') throw new Error(job.error || 'Environment build failed.')
65
+ for (let attempt = 0; attempt < 900; attempt++) {
66
+ await wait(2000, signal)
67
+ check()
68
+ const current = (await api.imageTemplates()).find((item) => item.name === name)
69
+ check()
70
+ if (!current) throw new Error('The environment build disappeared. Check Templates and try again.')
71
+ onBuildUpdate(current)
72
+ if (current.status === 'failed') throw new Error(current.error || 'Environment build failed.')
73
+ if (current.status === 'ready') return current
74
+ }
75
+ throw new Error('The build is still running. Check Templates before trying again.')
76
+ }
77
+
78
+ export async function prepareQuickSetups(api, ids, accessReview, { signal, expectedRevisions = {}, onProgress = () => {}, wait = pause } = {}) {
79
+ const check = () => { if (signal?.aborted) throw new DOMException('Preparation cancelled.', 'AbortError') }
80
+ check()
81
+ if (!ids.length) return { setups: [], accessReview: null }
82
+ const saved = await api.setups()
83
+ const setups = []
84
+ const review = accessReview ? {} : null
85
+ for (const id of ids) {
86
+ check()
87
+ const source = saved.find(s => s.id === id)
88
+ if (!source || (accessReview && accessReview[id] !== source.revision) || (expectedRevisions[id] && expectedRevisions[id] !== source.revision)) throw new Error('A selected Setup changed. Reopen the dialog and review it again.')
89
+ onProgress(`Preparing MCP packages for ${source.name}…`)
90
+ let job
91
+ try {
92
+ job = await api.prepareLaunchSetup(id, source.revision)
93
+ for (let attempt = 0; job.status === 'running' && attempt < 900; attempt++) {
94
+ check()
95
+ onProgress(job.message || `Preparing ${source.name}…`)
96
+ await wait(2000, signal)
97
+ check()
98
+ job = await api.setupPreparation(job.id)
99
+ }
100
+ check()
101
+ if (job.status !== 'complete' || !job.setup) throw new Error(job.message || 'Package preparation did not finish. Retry creation.')
102
+ setups.push(job.setup)
103
+ if (review) review[job.setup.id] = job.setup.revision
104
+ } catch (error) {
105
+ if (job?.id && job.status === 'running') await api.cancelSetupPreparation(job.id).catch(() => {})
106
+ throw error
107
+ }
108
+ }
109
+ return { setups, accessReview: review }
110
+ }
@@ -0,0 +1,59 @@
1
+ // Sandbox creations that outlive the dialog that started them. Preparing a
2
+ // Quick-setup environment can take minutes, so the dialog hands the work here
3
+ // and closes; progress, build logs and the result follow the user around the
4
+ // console as a notification.
5
+ export function createSandboxCreations() {
6
+ let snapshot = []
7
+ const listeners = new Set()
8
+ const runs = new Map()
9
+ const emit = () => listeners.forEach((listener) => listener())
10
+ const update = (id, patch) => {
11
+ snapshot = snapshot.map((job) => job.id === id ? { ...job, ...(typeof patch === "function" ? patch(job) : patch) } : job)
12
+ emit()
13
+ }
14
+
15
+ function run(id) {
16
+ const job = snapshot.find((item) => item.id === id)
17
+ const { task } = runs.get(id)
18
+ const controller = new AbortController()
19
+ runs.set(id, { task, controller })
20
+ update(id, { status: "preparing", message: "Preparing environment…", error: null, build: null })
21
+ const report = {
22
+ signal: controller.signal,
23
+ progress: (message) => update(id, { message }),
24
+ build: (build) => update(id, (current) => ({ build: { ...build, logs: build.logs ?? current.build?.logs } })),
25
+ creating: () => update(id, { status: "creating", message: "Creating sandbox…" }),
26
+ }
27
+ task(report).then((sandbox) => {
28
+ if (controller.signal.aborted) return update(id, { status: "cancelled", message: "Creation cancelled." })
29
+ update(id, { status: "created", sandbox: { ...sandbox, location: sandbox.location ?? job.location }, message: "" })
30
+ }).catch((error) => {
31
+ if (controller.signal.aborted || error.name === "AbortError") update(id, { status: "cancelled", message: "Creation cancelled." })
32
+ else update(id, { status: "failed", error: error.message, message: "" })
33
+ })
34
+ }
35
+
36
+ return {
37
+ subscribe: (listener) => { listeners.add(listener); return () => listeners.delete(listener) },
38
+ getSnapshot: () => snapshot,
39
+ // `task` receives { signal, progress, build, creating } and resolves to the created sandbox.
40
+ start({ name, location, task }) {
41
+ const id = crypto.randomUUID()
42
+ snapshot = [...snapshot, { id, name, location, status: "preparing" }]
43
+ runs.set(id, { task })
44
+ run(id)
45
+ return id
46
+ },
47
+ retry(id) { if (runs.has(id)) run(id) },
48
+ cancel(id) {
49
+ const job = snapshot.find((item) => item.id === id)
50
+ if (job?.status !== "preparing") return
51
+ runs.get(id)?.controller?.abort()
52
+ update(id, { message: "Cancelling…" })
53
+ },
54
+ update,
55
+ dismiss(id) { runs.delete(id); snapshot = snapshot.filter((job) => job.id !== id); emit() },
56
+ }
57
+ }
58
+
59
+ export const sandboxCreations = createSandboxCreations()