nimbus-dev-sdk 0.1.0__py3-none-any.whl

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 (189) hide show
  1. nimbus_dev_sdk-0.1.0.dist-info/METADATA +54 -0
  2. nimbus_dev_sdk-0.1.0.dist-info/RECORD +189 -0
  3. nimbus_dev_sdk-0.1.0.dist-info/WHEEL +4 -0
  4. nimbus_dev_sdk-0.1.0.dist-info/licenses/LICENSE +21 -0
  5. nimbus_sdk/__init__.py +46 -0
  6. nimbus_sdk/_data/spec/conformance/v1/framing/case.schema.json +160 -0
  7. nimbus_sdk/_data/spec/conformance/v1/framing/cases/blank-frames-dropped-mid-stream.json +8 -0
  8. nimbus_sdk/_data/spec/conformance/v1/framing/cases/blank-remainder-dropped-at-eof.json +8 -0
  9. nimbus_sdk/_data/spec/conformance/v1/framing/cases/bom-at-stream-start-ignored.json +8 -0
  10. nimbus_sdk/_data/spec/conformance/v1/framing/cases/cr-inside-frame-preserved.json +8 -0
  11. nimbus_sdk/_data/spec/conformance/v1/framing/cases/emoji-split-1-3.json +8 -0
  12. nimbus_sdk/_data/spec/conformance/v1/framing/cases/emoji-split-2-2.json +8 -0
  13. nimbus_sdk/_data/spec/conformance/v1/framing/cases/emoji-split-3-1.json +8 -0
  14. nimbus_sdk/_data/spec/conformance/v1/framing/cases/empty-stream.json +8 -0
  15. nimbus_sdk/_data/spec/conformance/v1/framing/cases/frame-exactly-at-limit.json +10 -0
  16. nimbus_sdk/_data/spec/conformance/v1/framing/cases/frame-one-octet-over-limit.json +10 -0
  17. nimbus_sdk/_data/spec/conformance/v1/framing/cases/frame-split-across-three-chunks.json +8 -0
  18. nimbus_sdk/_data/spec/conformance/v1/framing/cases/frame-split-across-two-chunks.json +8 -0
  19. nimbus_sdk/_data/spec/conformance/v1/framing/cases/incomplete-sequence-at-eof.json +8 -0
  20. nimbus_sdk/_data/spec/conformance/v1/framing/cases/invalid-utf8-becomes-replacement.json +8 -0
  21. nimbus_sdk/_data/spec/conformance/v1/framing/cases/limit-counts-octets-not-characters.json +8 -0
  22. nimbus_sdk/_data/spec/conformance/v1/framing/cases/limit-violation-latches.json +17 -0
  23. nimbus_sdk/_data/spec/conformance/v1/framing/cases/lone-continuation-byte.json +8 -0
  24. nimbus_sdk/_data/spec/conformance/v1/framing/cases/pending-over-limit-without-newline.json +8 -0
  25. nimbus_sdk/_data/spec/conformance/v1/framing/cases/several-frames-in-one-chunk.json +8 -0
  26. nimbus_sdk/_data/spec/conformance/v1/framing/cases/single-frame-crlf.json +8 -0
  27. nimbus_sdk/_data/spec/conformance/v1/framing/cases/single-frame-lf.json +8 -0
  28. nimbus_sdk/_data/spec/conformance/v1/framing/cases/two-byte-sequence-split.json +8 -0
  29. nimbus_sdk/_data/spec/conformance/v1/framing/cases/unterminated-final-frame.json +8 -0
  30. nimbus_sdk/_data/spec/conformance/v1/framing/cases/whitespace-only-frame-delivered.json +8 -0
  31. nimbus_sdk/_data/spec/conformance/v1/framing/index.json +125 -0
  32. nimbus_sdk/_data/spec/conformance/v1/framing/index.schema.json +37 -0
  33. nimbus_sdk/_data/spec/conformance/v1/index.json +298 -0
  34. nimbus_sdk/_data/spec/conformance/v1/index.schema.json +82 -0
  35. nimbus_sdk/_data/spec/conformance/v1/item/invalid-missing-name.json +5 -0
  36. nimbus_sdk/_data/spec/conformance/v1/item/invalid-size-bytes-type.json +7 -0
  37. nimbus_sdk/_data/spec/conformance/v1/item/valid-maximal.json +13 -0
  38. nimbus_sdk/_data/spec/conformance/v1/item/valid-minimal.json +6 -0
  39. nimbus_sdk/_data/spec/conformance/v1/item/valid-unknown-extra-key.json +7 -0
  40. nimbus_sdk/_data/spec/conformance/v1/item/valid-unknown-item-type.json +6 -0
  41. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-contract-versions-duplicate.json +13 -0
  42. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-contract-versions-empty.json +13 -0
  43. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-contract-versions-entry.json +13 -0
  44. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-contract-versions-not-array.json +13 -0
  45. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-hitl-required-not-array.json +14 -0
  46. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-hitl-required.json +12 -0
  47. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-many-violations.json +4 -0
  48. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-missing-author.json +13 -0
  49. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-missing-description.json +13 -0
  50. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-missing-display-name.json +13 -0
  51. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-missing-entrypoint.json +13 -0
  52. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-missing-id.json +11 -0
  53. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-missing-min-version.json +13 -0
  54. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-missing-version.json +13 -0
  55. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-nel-only-id.json +14 -0
  56. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-non-ascii-min-version.json +14 -0
  57. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-permission.json +12 -0
  58. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-permissions-not-array.json +12 -0
  59. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-runtime.json +12 -0
  60. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-short-min-version.json +12 -0
  61. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-two-permissions.json +16 -0
  62. nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-whitespace-id.json +12 -0
  63. nimbus_sdk/_data/spec/conformance/v1/manifest/schema-only-bad-sync-interval.json +13 -0
  64. nimbus_sdk/_data/spec/conformance/v1/manifest/valid-contract-versions.json +13 -0
  65. nimbus_sdk/_data/spec/conformance/v1/manifest/valid-leading-space-min-version.json +12 -0
  66. nimbus_sdk/_data/spec/conformance/v1/manifest/valid-maximal.json +24 -0
  67. nimbus_sdk/_data/spec/conformance/v1/manifest/valid-minimal.json +12 -0
  68. nimbus_sdk/_data/spec/conformance/v1/manifest/valid-prerelease-min-version.json +12 -0
  69. nimbus_sdk/_data/spec/conformance/v1/manifest/valid-unknown-extra-key.json +13 -0
  70. nimbus_sdk/_data/spec/conformance/v1/manifest/valid-zero-width-space-id.json +14 -0
  71. nimbus_sdk/_data/spec/conformance/v1/negotiation/case.schema.json +93 -0
  72. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/declaration-absent-default.json +6 -0
  73. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/declaration-absent-superset.json +6 -0
  74. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/declaration-manifest-not-array.json +7 -0
  75. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/declaration-match.json +7 -0
  76. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/declaration-order.json +7 -0
  77. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/declaration-superset.json +7 -0
  78. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-array.json +6 -0
  79. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-canonical.json +6 -0
  80. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-duplicate.json +6 -0
  81. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-empty-versions.json +6 -0
  82. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-leading-zero.json +6 -0
  83. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-missing-versions.json +6 -0
  84. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-non-ascii-digit.json +6 -0
  85. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-not-json.json +6 -0
  86. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-null.json +6 -0
  87. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-padded.json +6 -0
  88. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-reversed-members.json +6 -0
  89. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-unknown-member.json +6 -0
  90. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-versions-not-array.json +6 -0
  91. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-wrong-message.json +6 -0
  92. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-disjoint.json +7 -0
  93. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-duplicate-member.json +7 -0
  94. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-empty-local.json +7 -0
  95. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-empty-remote.json +7 -0
  96. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-largest-common.json +7 -0
  97. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-leading-zero.json +7 -0
  98. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-long-major.json +7 -0
  99. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-non-ascii-digit.json +7 -0
  100. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-non-string.json +7 -0
  101. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-order-a.json +7 -0
  102. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-order-b.json +7 -0
  103. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-ten-beats-nine.json +7 -0
  104. nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-v1-both.json +7 -0
  105. nimbus_sdk/_data/spec/conformance/v1/negotiation/index.json +170 -0
  106. nimbus_sdk/_data/spec/conformance/v1/negotiation/index.schema.json +37 -0
  107. nimbus_sdk/_data/spec/conformance/v1/predicates/case.schema.json +76 -0
  108. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-action-id-non-string-rejected.json +9 -0
  109. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-array-rejected.json +6 -0
  110. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-diff-non-string-rejected.json +10 -0
  111. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-diff-null-rejected.json +10 -0
  112. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-diff-present-accepted.json +10 -0
  113. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-empty-action-id-rejected.json +9 -0
  114. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-empty-object-rejected.json +6 -0
  115. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-empty-summary-rejected.json +9 -0
  116. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-minimal-accepted.json +9 -0
  117. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-missing-action-id-rejected.json +8 -0
  118. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-missing-summary-rejected.json +8 -0
  119. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-null-rejected.json +6 -0
  120. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-number-rejected.json +6 -0
  121. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-string-rejected.json +6 -0
  122. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-unknown-member-accepted.json +10 -0
  123. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-whitespace-action-id-accepted.json +9 -0
  124. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-whitespace-summary-accepted.json +9 -0
  125. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-ascii-fold-uppercase.json +15 -0
  126. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-blank-names-skipped.json +22 -0
  127. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-description-never-inspected.json +11 -0
  128. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-digits-are-segment-characters.json +15 -0
  129. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-dotted-capital-i-is-a-separator.json +10 -0
  130. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-empty-surface-clean.json +6 -0
  131. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-every-published-segment.json +169 -0
  132. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-first-match-in-name-order.json +15 -0
  133. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-input-order-preserved.json +25 -0
  134. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-kelvin-sign-is-a-separator.json +15 -0
  135. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-metadata-surface-clean.json +16 -0
  136. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-non-ascii-name-clean.json +10 -0
  137. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-non-string-name-skipped.json +22 -0
  138. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-offender-attributed-to-segment.json +15 -0
  139. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-one-violation-per-tool.json +15 -0
  140. nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-segment-not-substring.json +13 -0
  141. nimbus_sdk/_data/spec/conformance/v1/predicates/index.json +170 -0
  142. nimbus_sdk/_data/spec/conformance/v1/predicates/index.schema.json +37 -0
  143. nimbus_sdk/_data/spec/conformance/v1/sandbox/case.schema.json +116 -0
  144. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-fs-eacces.json +7 -0
  145. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-fs-ebusy.json +7 -0
  146. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-fs-econnrefused-is-not-a-denial.json +7 -0
  147. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-fs-eisdir-is-not-a-denial.json +7 -0
  148. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-fs-enoent-is-not-a-denial.json +7 -0
  149. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-fs-eperm.json +7 -0
  150. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-fs-no-code.json +7 -0
  151. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-eacces-is-not-a-block.json +7 -0
  152. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-econnrefused.json +7 -0
  153. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-econnreset-is-not-a-block.json +7 -0
  154. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-ehostunreach.json +7 -0
  155. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-enetunreach.json +7 -0
  156. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-eperm.json +7 -0
  157. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-etimedout-is-not-a-block.json +7 -0
  158. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-no-code.json +7 -0
  159. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-empty-network-array-skips.json +20 -0
  160. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-empty-string-host-is-a-host.json +32 -0
  161. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-fs-failure-throws.json +19 -0
  162. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-fs-pass-is-a-failure.json +19 -0
  163. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-hosts-darwin-all-three.json +32 -0
  164. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-hosts-posix-all-three.json +32 -0
  165. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-hosts-win32-skips-unlisted.json +27 -0
  166. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-listed-blocked-is-a-failure.json +23 -0
  167. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-listed-failure-stops-immediately.json +23 -0
  168. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-no-hosts-posix-skips-both-network.json +18 -0
  169. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-no-hosts-win32-only-fs.json +18 -0
  170. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-only-first-host-probed.json +34 -0
  171. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-permissions-absent.json +17 -0
  172. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-permissions-legacy-array.json +21 -0
  173. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-permissions-null.json +18 -0
  174. nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-unlisted-failure-stops-before-fs.json +28 -0
  175. nimbus_sdk/_data/spec/conformance/v1/sandbox/index.json +160 -0
  176. nimbus_sdk/_data/spec/conformance/v1/sandbox/index.schema.json +37 -0
  177. nimbus_sdk/_data/spec/negotiation/hello.schema.json +21 -0
  178. nimbus_sdk/_data/spec/predicates/v1/row-data-segments.json +39 -0
  179. nimbus_sdk/_data/spec/predicates/v1/row-data-segments.schema.json +60 -0
  180. nimbus_sdk/_data/spec/probe/v1/probe-protocol.json +72 -0
  181. nimbus_sdk/_data/spec/probe/v1/probe-protocol.schema.json +90 -0
  182. nimbus_sdk/_data/spec/rules/v1/manifest-rules.json +116 -0
  183. nimbus_sdk/_data/spec/rules/v1/manifest-rules.schema.json +65 -0
  184. nimbus_sdk/_data/spec/schemas/v1/extension-manifest.schema.json +72 -0
  185. nimbus_sdk/_data/spec/schemas/v1/hitl-request.schema.json +24 -0
  186. nimbus_sdk/_data/spec/schemas/v1/nimbus-item.schema.json +29 -0
  187. nimbus_sdk/contract.py +138 -0
  188. nimbus_sdk/py.typed +0 -0
  189. nimbus_sdk/spec.py +72 -0
@@ -0,0 +1,54 @@
1
+ Metadata-Version: 2.4
2
+ Name: nimbus-dev-sdk
3
+ Version: 0.1.0
4
+ Summary: The MIT-licensed, dependency-free authoring contract for Nimbus connectors and extensions — Python binding.
5
+ Project-URL: Homepage, https://github.com/nimbus-agent/nimbus-sdk
6
+ Project-URL: Repository, https://github.com/nimbus-agent/nimbus-sdk
7
+ Project-URL: Changelog, https://github.com/nimbus-agent/nimbus-sdk/blob/main/sdks/python/CHANGELOG.md
8
+ Author: Nimbus
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: connector,contract,mcp,nimbus,sdk
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Typing :: Typed
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+
23
+ # nimbus-dev-sdk
24
+
25
+ The MIT-licensed, dependency-free authoring contract for
26
+ [Nimbus](https://github.com/nimbus-agent/Nimbus) connectors and extensions — Python binding.
27
+
28
+ ```bash
29
+ pip install nimbus-dev-sdk # note: nimbus-dev-sdk, NOT nimbus-sdk
30
+ ```
31
+ ```python
32
+ import nimbus_sdk # the import name differs from the distribution name
33
+ ```
34
+
35
+ PyPI has a flat namespace and `nimbus-sdk` belongs to an unrelated project, so the
36
+ distribution is published as `nimbus-dev-sdk`.
37
+
38
+ ## What this is
39
+
40
+ The contract is defined once, language-neutrally, in
41
+ [`docs/spec/`](https://github.com/nimbus-agent/nimbus-sdk/tree/main/docs/spec). This
42
+ package carries that specification data and binds it to Python. The
43
+ [TypeScript SDK](https://www.npmjs.com/package/@nimbus-dev/sdk) is the reference
44
+ implementation; both are held to the same conformance corpus.
45
+
46
+ ## Status
47
+
48
+ Early. This release carries the contract-version constants, the negotiation algorithm,
49
+ and the published JSON Schemas. It is not yet the full connector-authoring surface —
50
+ see the [roadmap](https://github.com/nimbus-agent/nimbus-sdk/blob/main/docs/ROADMAP.md).
51
+
52
+ ## License
53
+
54
+ MIT — see [LICENSE](https://github.com/nimbus-agent/nimbus-sdk/blob/main/LICENSE).
@@ -0,0 +1,189 @@
1
+ nimbus_sdk/__init__.py,sha256=gDXhVISHKOilCP7z_TtVBDYuA0V6GaKwPsM55YVUhu8,1290
2
+ nimbus_sdk/contract.py,sha256=yrIgTFAena5YRgy2wCUw2OevrXBk6Fh80ez58Zgdtos,5616
3
+ nimbus_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ nimbus_sdk/spec.py,sha256=kDU12bomi6vEvPg4_dNQM17umpgti0zjQXTKe6vxSzE,2727
5
+ nimbus_sdk/_data/spec/conformance/v1/index.json,sha256=ZBPAmF8g0T1p_Me1_Y7LTnMTJIamz_shp9KHNRn52Jo,12764
6
+ nimbus_sdk/_data/spec/conformance/v1/index.schema.json,sha256=X8vaJz2Comm1uLUXEOvvdUTP01e3zWH_HNdgw7pWGMU,3626
7
+ nimbus_sdk/_data/spec/conformance/v1/framing/case.schema.json,sha256=XM3C-Yqr3M9I27xjC3cMspjuK9hdc2d5_9WKssABNKM,5699
8
+ nimbus_sdk/_data/spec/conformance/v1/framing/index.json,sha256=TC5jBKoK-BM9j452iaO9OabIYCYiIss9SCsOwgzltcE,3890
9
+ nimbus_sdk/_data/spec/conformance/v1/framing/index.schema.json,sha256=eoBIrnszAaEdILFLsRgrYglL4gx8DeJ1ccOKL5ggcnk,1562
10
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/blank-frames-dropped-mid-stream.json,sha256=InU3PJS5rtXbqWhqVUjTDsrqt-JK6-ltnD1K_VukN7s,236
11
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/blank-remainder-dropped-at-eof.json,sha256=4W3FPjhPhJN9aaXrz9EeF03YgFrh7rfzd4ruJZb47jw,250
12
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/bom-at-stream-start-ignored.json,sha256=arkrIyL8e1XmzTq1miGD4aG1OND-RhbC-iWVfPVHReQ,269
13
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/cr-inside-frame-preserved.json,sha256=fTC0GLnIywc02SoY1KnA6ORyd9zXmokhvn3Bifvf3xM,232
14
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/emoji-split-1-3.json,sha256=d-DrY35z2C0iF6nzHwd3xGvzzB2aZ_HWu-5_EAeTS1g,247
15
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/emoji-split-2-2.json,sha256=dpc52XW29sFIYPwmqtBdobdR5RiQvm9XB4We77jEVBE,237
16
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/emoji-split-3-1.json,sha256=frM3uVR2ZMZ7D0CyoDzWcP3J48fY56BEMdkcW6Xz8KY,243
17
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/empty-stream.json,sha256=36xK2wOFFC6MhP3sWvsb4HdWJtuZAIWSBdxIqqybIb0,194
18
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/frame-exactly-at-limit.json,sha256=L-GHMJdvc4N5Yc-ppVHiCwyISP_ArOfocZkpv-Zc6HE,335
19
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/frame-one-octet-over-limit.json,sha256=Fbk2IyFvxeZNbUxS-MmFMo861mGBQGsgL23Q51iWjSM,312
20
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/frame-split-across-three-chunks.json,sha256=r9FhRceCEH_3p0EPMs7_bjY3jAnYhPOfYk7zE-BqTiA,260
21
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/frame-split-across-two-chunks.json,sha256=xmsvlyKSW1DGrJYk9-oAOZIsciyeABxjnpIb2M6GKrY,249
22
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/incomplete-sequence-at-eof.json,sha256=tcnTlXaYvcd2kPdiK2-z6hVQDnR49fub5Uiqr8AOD2o,253
23
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/invalid-utf8-becomes-replacement.json,sha256=mMvwIP5ic0RsU6f8Q0n7TB0Y4AlCeA_XiMDOklGQMCQ,235
24
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/limit-counts-octets-not-characters.json,sha256=-9DNLdIqE8jBOXiCDKh7PBRyPe3DA_J9dwCcYR6lySQ,312
25
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/limit-violation-latches.json,sha256=UrIcBFIY5agg2Z-yQdPY7gdT_kOK6AiX51yHKnzyvKA,487
26
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/lone-continuation-byte.json,sha256=DsqK3af5ea0tqaarbbjmSwRFPjxPytItAAUOB424O50,206
27
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/pending-over-limit-without-newline.json,sha256=FvMeMLWZchp3UP0QCmObwkxZCY_KODSkards_O6g2yE,297
28
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/several-frames-in-one-chunk.json,sha256=o6efCIELT1WsijREv-Zq8RbXW9N8b5NMeRlPhaaAHAM,237
29
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/single-frame-crlf.json,sha256=VWMwa3ul_0UK6TltXSDrc8WXvBAg2Y7xQCBISUsvvAM,220
30
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/single-frame-lf.json,sha256=ZwrgX8_e2RWg9jEnt3R5I0DXDhLuDYAIVodijXKg_I0,220
31
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/two-byte-sequence-split.json,sha256=QGNtluVtipUPvwpejS_NcKcy6jkafO1jo412OOdwONs,265
32
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/unterminated-final-frame.json,sha256=132Op5QPe9ckLlKQ_HmYuHBpQAqAums-uu944xMiVIU,271
33
+ nimbus_sdk/_data/spec/conformance/v1/framing/cases/whitespace-only-frame-delivered.json,sha256=Rs3CX7Kjm2lnGaYfoguFXk_El-y9YaUNoF9WVZ06mJU,235
34
+ nimbus_sdk/_data/spec/conformance/v1/item/invalid-missing-name.json,sha256=jPr7hmsO_Wzkz0IRLQrauDE31KXdoXdcRjcLvAkZRIs,67
35
+ nimbus_sdk/_data/spec/conformance/v1/item/invalid-size-bytes-type.json,sha256=2tOF21mPTv4ONNZVz2SoXh3PM8FUwiKOyFLXxbK-BRU,112
36
+ nimbus_sdk/_data/spec/conformance/v1/item/valid-maximal.json,sha256=Cd7n-KGMIV82Uq199ke5lUHWz90cJ_6Bj-0yJhQe_oM,323
37
+ nimbus_sdk/_data/spec/conformance/v1/item/valid-minimal.json,sha256=DVBnaJsOMgWhvNTS08MoRvtEdFurda8C_kPKbEMZoLc,89
38
+ nimbus_sdk/_data/spec/conformance/v1/item/valid-unknown-extra-key.json,sha256=-Y7JAbQQItRLRWP2o0cZWtOE-L1daei9S9O8r_BITwE,117
39
+ nimbus_sdk/_data/spec/conformance/v1/item/valid-unknown-item-type.json,sha256=ys5bWR2ubKEUsY_zzWQgf7Y_HVOIcdlVCJaAu_kapCg,99
40
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-contract-versions-duplicate.json,sha256=cBRhFey-8OSDQdqwpLLGo_J666Uiqaty9J4aZnaHJSA,367
41
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-contract-versions-empty.json,sha256=8Sse5x8-nQxG1YWQRNBD8bV_8C46vdR6-QLgJAAyMeA,359
42
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-contract-versions-entry.json,sha256=eEyWXVAl4cTPuojUcILn4KGEVrWCmAdDJQNSjZV-dWU,368
43
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-contract-versions-not-array.json,sha256=Oxhckam6UGDcntMsUXpk1-Enwt3lxv6HFBFmEeuaYAQ,360
44
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-hitl-required-not-array.json,sha256=GmSZEDPykSJz0DFBCZlHDHGV4gyLLB3ipoeLImesC8w,346
45
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-hitl-required.json,sha256=-Q_3VCZv0R0Eyr-4wLO6oe7dYJi16PhAhtptRCsNWIA,363
46
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-many-violations.json,sha256=yqT3pulD8pxwNjo7UWcCkMo4q69U6PL2rXKI9pA09tQ,49
47
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-missing-author.json,sha256=ZG7zkN_73ljpDQfVs3W4oGIsGiEjwxU2zKPjDTHpX1k,306
48
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-missing-description.json,sha256=IG1ldVuVMiGdJvLUCzCgvMO2-spefiO-f-d3lanXPB8,265
49
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-missing-display-name.json,sha256=dhEZ6EVJ50uu4Nz7bXB9wzrEjwpUFXHx4heqX8L1HUw,303
50
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-missing-entrypoint.json,sha256=tUgTLba5AV-cfy2qw-lU_lpdjIkqsMEI8wKgTLJC_ho,311
51
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-missing-id.json,sha256=tJqTDUUFWd6D1OQL8S6P5AUs-CYNJ7lDHb2_4JSU70I,304
52
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-missing-min-version.json,sha256=_KTpv2HiOKprPhqDrRvaTej9AYM56L0jYSk_B3nvIQk,310
53
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-missing-version.json,sha256=UVSsQSEQzRDBMeiag4SJyz-LO_1yIQebMEvaJNXVqAw,319
54
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-nel-only-id.json,sha256=mlEor0Km-gh7q0lntzfqf6UtV5FRDSM3ZW14cA2m_MM,326
55
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-non-ascii-min-version.json,sha256=6UJMNqaIF513vChLfMlXykfOVFVCmx9qXieypnrtanE,344
56
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-permission.json,sha256=G0wemydQCY4agJlM2veVH8mIDAPBe33ENQqc5Qv7XU4,342
57
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-permissions-not-array.json,sha256=kPovxS74Z-xp-fJup7wSToBcJScmz6zyW56urH4G4No,331
58
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-runtime.json,sha256=hsQ6TfCdv2Cypn_4XiXRgOjG3rmadKTueq4yiJX-KrE,334
59
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-short-min-version.json,sha256=ChRn0LVs3H6ik50NXxlDUxNBl9veM-_wmIJa6kUOkxE,365
60
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-two-permissions.json,sha256=yclB9an-_M1_rXJmMxBwiK2CtmQP0bwPhnBUULYZT3A,369
61
+ nimbus_sdk/_data/spec/conformance/v1/manifest/invalid-whitespace-id.json,sha256=jq8laIobFHt3T3sTiaMJVhREi9NT8aB_XtchPyT4NCE,319
62
+ nimbus_sdk/_data/spec/conformance/v1/manifest/schema-only-bad-sync-interval.json,sha256=VRtgeFv3GU0Ecke1UJZXxR0tqs5Nil6JZBz1JzBLv7g,357
63
+ nimbus_sdk/_data/spec/conformance/v1/manifest/valid-contract-versions.json,sha256=6KTuEgfVgl4lMAiiJmsCwC1140TxI9yrVGuYc2nqpTw,367
64
+ nimbus_sdk/_data/spec/conformance/v1/manifest/valid-leading-space-min-version.json,sha256=qb87ljCjvo8QOSbAkKjmPcRQQ5iWeYLlwtokiZCygUE,354
65
+ nimbus_sdk/_data/spec/conformance/v1/manifest/valid-maximal.json,sha256=RV4kjT9wDX6_IanJ33sTHrX-lwZXgqLnRxl9o6QAhJ8,891
66
+ nimbus_sdk/_data/spec/conformance/v1/manifest/valid-minimal.json,sha256=XXzM8GPkqq6AqJ1ZNhwaI5SXaJY796bJsWdwlpDEhjc,333
67
+ nimbus_sdk/_data/spec/conformance/v1/manifest/valid-prerelease-min-version.json,sha256=tEIs0sZz3YcPi48_sxeZcpOKspLZSEDZarjtwHegiKk,361
68
+ nimbus_sdk/_data/spec/conformance/v1/manifest/valid-unknown-extra-key.json,sha256=xxDLSqm1raY05ZCTQVjz09IK_5C4ldrLl6_VpjOCaag,354
69
+ nimbus_sdk/_data/spec/conformance/v1/manifest/valid-zero-width-space-id.json,sha256=pHhtbEM1arXZwXbFci-YD70TD3hzX_58t-Z6CeYdmVo,327
70
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/case.schema.json,sha256=X1NoXiORrPtQemLhUwkR0CJn0ZT7KAMk4CNkhSV_JRA,4071
71
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/index.json,sha256=mYGEFowHuG5laHZpsBgZH1VFp7WlvfN_TMIZ4EufgcU,6357
72
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/index.schema.json,sha256=HnpFNvo8unAJ4NCg-EYqhPGtam1OFzR4Jp9i1AjrTW4,1406
73
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/declaration-absent-default.json,sha256=UXClGbV8Qth-n2zaFLJDpSB5iTxq0XQ5rsru0WZnF-s,219
74
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/declaration-absent-superset.json,sha256=SSbVWQqbypnIS7xRPsHrg6v2JXR-CMAEJlxF8GtW-3E,343
75
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/declaration-manifest-not-array.json,sha256=getWHVY-4fdkLI1LrROrCtIj2X7-v8dyLvlkEPD8-hA,454
76
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/declaration-match.json,sha256=L0DTI4rNoHqLHr-ltBQw8U749s0kqW3t3sGd1w8OGjE,238
77
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/declaration-order.json,sha256=P_BoaFZv7k_2r3cmPKbsjT1a4Ou0okwX1Rq-dMru1do,237
78
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/declaration-superset.json,sha256=mbKQW6nJhifTQ6W1epnm-lt-wexB7r_TVWYLZsJd3W0,317
79
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-array.json,sha256=s21Sj0iGaxi2HXOieK4RebWYD43wFG__7ZKSOYUsmkQ,296
80
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-canonical.json,sha256=oBnylUUrJE3M-0jDdBmaAGiB5UMpIHAG53G7YdWlU2c,225
81
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-duplicate.json,sha256=K6oJQrpEWp5b1K0T3q_rKrRpcXXsdHksZKZ0Yy3lXBE,321
82
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-empty-versions.json,sha256=cs86K6gUBBuIefnJqEw2zuK3b0tL4pKiYI1Ky0ypNRQ,331
83
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-leading-zero.json,sha256=6fBoPFWvQX1TvX826NbR_4T6Q5KzYvXglx2y96550Qk,340
84
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-missing-versions.json,sha256=eb-mxb9VRSQxq9Tnh0B9O-qI31bZnW9Bo2hJMhgZ7Jo,303
85
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-non-ascii-digit.json,sha256=rlsEpCBbBBqthjkBPo9I3ZH7LAcO0Lxke0gTOoZM24Y,554
86
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-not-json.json,sha256=qjlVRdSDvYIGjk84iNvs15IyHYJLF9lNTPNkaPElj2s,194
87
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-null.json,sha256=gBtl2m8dk6Bqa45Hy3RaZS65lVdcfSBdYl5JQJGj-xY,252
88
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-padded.json,sha256=DvMFfrIGRvn62XYPD39czMi6Hl8cw0fyGjDSz6LshaQ,299
89
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-reversed-members.json,sha256=uHGcYrAj_lI7fz_-X2kxAp0ft0F1pYJyzczTa_HxfvY,275
90
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-unknown-member.json,sha256=QRHQCbqk_wHQrPiJyJ7egheVSV0xYugroQODpm44S4o,283
91
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-versions-not-array.json,sha256=GQprEHFlFgDbMn-qAScEC6hatLusnhDQ2-6BJtbycoM,306
92
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/hello-wrong-message.json,sha256=LuSPcQK8BJL07dFB9gCblGNG_wJGx07n_abZQtxQZtM,291
93
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-disjoint.json,sha256=wyTNBcGfFRCt2gG-fAugqlkmzj0inMHs2-o4Otfs2bk,262
94
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-duplicate-member.json,sha256=Z5d1fADSazayo2l30tWOTLsZ7z6I9pkO06CJAn6RN2o,355
95
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-empty-local.json,sha256=q5ra5gpkys73cpCJcyXaCLTFm6mqXIydYu8O3Y8FnFc,383
96
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-empty-remote.json,sha256=hO8WhggZyB7x4sdIrKkusd1Dek4WWdg1CL54q3lkhkk,280
97
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-largest-common.json,sha256=opS4OeJqfgqst3BI6qCsJglMzBqzJJvjjgA6ftqX2WA,216
98
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-leading-zero.json,sha256=34GTay7hE5YOJVx7Xst7EOXbTBGuv-KHNvwkKgvI-Uk,335
99
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-long-major.json,sha256=xh92Waj4VlEVtvlgdEjjtc3o7QI8gRRZSzPRgyZmvDU,372
100
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-non-ascii-digit.json,sha256=v0wDQXLrI1hon7UnPJdv2MZanAdUqFpOysjWaew81K0,330
101
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-non-string.json,sha256=ERWyaviaHhOR0X3SGFfKwZzjMXgG01k5W-G1Whruwfc,320
102
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-order-a.json,sha256=T_tyD7V3AuHnRYCX9sLmBmi641aElkkMLsYxE2pm_Lk,242
103
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-order-b.json,sha256=o2MCqKtOPJeRRGMEy86JOOD8N7OuunG5YGsZ424fqf0,225
104
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-ten-beats-nine.json,sha256=G6R_rogf7E55r_rUzAaAvTczx5vTb8rcGGDdp67mLXk,232
105
+ nimbus_sdk/_data/spec/conformance/v1/negotiation/cases/negotiate-v1-both.json,sha256=GQhWpxXyVUTFxU4n8LDQIOdUQ7S_vP2F2nmBoMjBSCE,351
106
+ nimbus_sdk/_data/spec/conformance/v1/predicates/case.schema.json,sha256=1Rm-mgZWd6ggTtrbsQK_iJuslm10c0eiARmbqQQLHtg,2979
107
+ nimbus_sdk/_data/spec/conformance/v1/predicates/index.json,sha256=ms9h5bBS0BVOHcCTPNRrnsO0IVhh4D_wc6txBalibIk,5728
108
+ nimbus_sdk/_data/spec/conformance/v1/predicates/index.schema.json,sha256=L0-hIBs2K2lz6WHuiBbAnKvCnTBJKnvLUEPpHn8E_9A,1650
109
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-action-id-non-string-rejected.json,sha256=RSc_0QWKVqUlFUP_HKbL4Bh_GDVfmST5JSr0bvR23VA,174
110
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-array-rejected.json,sha256=2jQxKfQY2TIVwYPuxW7j5cSeGVoWCG-W52EtvU2cGPY,110
111
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-diff-non-string-rejected.json,sha256=6MSFeZEsee8yiu640oOBtR-_Q7-P9O2VsD2YD093xn0,194
112
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-diff-null-rejected.json,sha256=T9MFviXOiQUo8C-2trx8xIupCeG8Ae52UmjB3AotULs,238
113
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-diff-present-accepted.json,sha256=LIlJ_EYNHvg8zFrGf5tqFUbtO3oi5eNK0vpW9Tm-alQ,205
114
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-empty-action-id-rejected.json,sha256=I7H9rkBSc7b-fihPvkTCojTdBuoKoA-YvdPB0gYw3fU,174
115
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-empty-object-rejected.json,sha256=1vruRl3uesLKdr79Yx9Lh3IbUbQwrfFciRa3rgOkAEY,117
116
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-empty-summary-rejected.json,sha256=vN1C_waZO3EPAWcwl3tUQIgcaUwfLZ1I7N9qzuKExKg,167
117
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-minimal-accepted.json,sha256=_alm7rr6Yabr7BViD4tdVX3JECeTQVslARPnbZyDQZU,193
118
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-missing-action-id-rejected.json,sha256=yh6-31DIWAY62BM902Gm4LEAfR2cVrB4sDsWDM6-QgE,155
119
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-missing-summary-rejected.json,sha256=hc2bBe6XCV7atyN_IDpWxMbywS7LwK6IiQqY5Nmc2g0,149
120
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-null-rejected.json,sha256=3Yz_Q7z4We1S82fjqZNva1qV2-xkb6-P8a9pIVkG8OE,108
121
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-number-rejected.json,sha256=moJj0VmwlTluDCbO5DV3xxZpp6bu4dVn471DM4LKDFc,116
122
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-string-rejected.json,sha256=Xhx79EcS-dVeT4p2vVXPAR1pgO5RTVwDaprV8f15U98,118
123
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-unknown-member-accepted.json,sha256=6om0Y-1Q0PoFBnJNKbdvtaNzuCjuQxD_Du64BnPltqY,229
124
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-whitespace-action-id-accepted.json,sha256=dyxuB0uBoTHK66filx7R0xTP6A1I3WuE8yfTz5y2j0s,186
125
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/hitl-whitespace-summary-accepted.json,sha256=MNTP84ORFJTUV0z_X6ofbIgRdKYat53PUGSIai_0uuA,178
126
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-ascii-fold-uppercase.json,sha256=P2XHHjYhqeByBhwjyg6V01anviW_VBJ_pWcOsijbvIo,265
127
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-blank-names-skipped.json,sha256=4jycIA16WyIWEcCIg2fqE0jJcIkC460FE_bi6AJmkdA,385
128
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-description-never-inspected.json,sha256=h31KH8bhISiKZY9yGWGtid7Z_jHe5Ksb8a2GNvhnqb4,270
129
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-digits-are-segment-characters.json,sha256=VUF0hTg9w1M5YOyhbQcqRc_F9F5O2vGJcP7aOX2p7Jg,239
130
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-dotted-capital-i-is-a-separator.json,sha256=grhejJEHMbFpLxxd5zB4Mjw0b9FpNfCOAdzGA5xPoB8,224
131
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-empty-surface-clean.json,sha256=qgzmTAqL2yOul3WCRtINaOX3nVGkpi-1IevKSVMUJEY,138
132
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-every-published-segment.json,sha256=NJRF9oJDrUS1TdMYsxYQDrXR1CAIqVC5XA7VmbL_qOc,2607
133
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-first-match-in-name-order.json,sha256=0LRaeJjdblSAaiL9ur9xWNJezYLKOjUnf-7lQRB3BxA,318
134
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-input-order-preserved.json,sha256=J2wJ9SZjaMgB0mUD6DZaYzCHVxm_OLpNv-ntMdjjsSY,413
135
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-kelvin-sign-is-a-separator.json,sha256=86sgyjhwhVXauJIcTjD-tU_SkenHVRDH3orySjKXgbg,300
136
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-metadata-surface-clean.json,sha256=JfxtLKaRMHaG5Vm4RMsoJzd0ATTjqh-lM6FFLY0aYqY,314
137
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-non-ascii-name-clean.json,sha256=qCkTabWKU7UFQ6Kt6bsPwXKiBxu-LOL6rqNHaeo1kJs,185
138
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-non-string-name-skipped.json,sha256=Y-QkYhky-SSGOH8jwQik7QBmGReFIe4VdtQ1TOjXGlY,327
139
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-offender-attributed-to-segment.json,sha256=rUiMFJRbOWZKH2wndMBrdW-saUnUvQ-7XLJg6paqqk4,274
140
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-one-violation-per-tool.json,sha256=wsxHgTNeLzA6i5qxvz2ky7d7B7XFvDMwqwhZHgQDvUU,274
141
+ nimbus_sdk/_data/spec/conformance/v1/predicates/cases/row-data-segment-not-substring.json,sha256=s_pDa3YPd9p-d_IAaCrz3Vr6Anb2NYbvRZbgQzhIyI4,262
142
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/case.schema.json,sha256=hUC6ceIJjslC92fZwqBn8KecPJ6UKNGjIrisj52vepw,4501
143
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/index.json,sha256=3P1EPmOjryKdpIF7RJ9XKpV61Pu7WmK3iA5A-RE9bpY,5562
144
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/index.schema.json,sha256=urSMTkQQrEEnxiN7Ogk1gjH6q3NT616P5Ubbrcgbp_I,1684
145
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-fs-eacces.json,sha256=OXGjcFHi_MtCXHTnwF6ssdltmsU6rwREEETt-pO6pk4,139
146
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-fs-ebusy.json,sha256=KM1ZMYHNgZl-1l_BYfM-8FyEAgaafT2O_qZeSgnEiY0,137
147
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-fs-econnrefused-is-not-a-denial.json,sha256=FieHgEJYug5EC0x9wxavB0FfKggBLmE96XCxq-0vqnU,158
148
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-fs-eisdir-is-not-a-denial.json,sha256=ZOcn8_wc6DR3PVR8Xx6pXL68jbOSWS_Ht3M4d4SA9TM,146
149
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-fs-enoent-is-not-a-denial.json,sha256=4OFoOgwb7hOmRnl_CGh5aZgd-0Q5CRWhuxwqErpnlAY,146
150
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-fs-eperm.json,sha256=8i2rf9C4dpLxQyYUSd86u82HeTaZCt_xDKFq2IAZfRA,137
151
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-fs-no-code.json,sha256=U6aDhiYEIMfnyrt6ghJYJ1wtjQ-Evbl1vW8erCPGh10,150
152
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-eacces-is-not-a-block.json,sha256=EzD75yt1A8gxCiuex82Eu9l1-QPj53Db8J76_-LkLto,149
153
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-econnrefused.json,sha256=H7X6swfhjTjQgbndxjzFhTkNAZ4XqSqNpsY2gQS8tg4,154
154
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-econnreset-is-not-a-block.json,sha256=9macPT8in-3ncvZnYsYvtao_IPON-yt7aHJyIZBcFzg,157
155
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-ehostunreach.json,sha256=bct0pbsDrhOSbNmWBHjFZofNdtaRjGgOhMNy0IlidtY,154
156
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-enetunreach.json,sha256=m5n8-QsdJxVCfiuRRgkwNyUGdAoX4HVx1TlWlGsaeNM,152
157
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-eperm.json,sha256=0eAQKSIM84ZuyfnvWM94XZI-HvG9ZjnkvQZ-yq0Xet0,140
158
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-etimedout-is-not-a-block.json,sha256=bqGafQzAHWhPNSpmYsiSlnx6CpK_iME0gfm8kNEyk4k,155
159
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/classify-network-no-code.json,sha256=fjkVXPGZfekQB8hcRPW0x0kJlQgjH9te3ql0Am3NJHo,153
160
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-empty-network-array-skips.json,sha256=bkY5RRMz6J01LQ4gpeFp49AjOI9pvmtmr2EFNakj9vc,319
161
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-empty-string-host-is-a-host.json,sha256=BTkMWuWGslT2on41pWMCS2fVmoqalxXDkDkFM__IxbQ,559
162
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-fs-failure-throws.json,sha256=flU9a4V6N1ec1P5bs_-j2aFTQ-U-2_Jr8DXunNuZtDc,333
163
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-fs-pass-is-a-failure.json,sha256=KxDkZTqqdZ2pymqxwM9zYUBIwxsb2ShdJlJ-cvjF_EQ,338
164
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-hosts-darwin-all-three.json,sha256=tlVPA3zRGmDq1zh4fwGaE1cHGyRlJgOVy8yTSb-RuPs,556
165
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-hosts-posix-all-three.json,sha256=oSkG8yjhiSbG1-Uw4FtnDMPpr0p3Il2L4i2Kgv5CuEM,574
166
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-hosts-win32-skips-unlisted.json,sha256=WMZnpTYYnsMHsAwKu2w6h3xcy2l-LnEv14BNH36PkBM,474
167
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-listed-blocked-is-a-failure.json,sha256=hceslsqGBRjBBPX-mCu-RGal_iFQ5LSKmOJofkY-qcM,427
168
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-listed-failure-stops-immediately.json,sha256=48DbLoOticNByfSwzUYh0YAkS_LZf2FhaxAOAUwYskU,424
169
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-no-hosts-posix-skips-both-network.json,sha256=x4WG82SRx-uNXZ5267wA1GA2YXk8QuxKxIFkAtp6eI0,318
170
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-no-hosts-win32-only-fs.json,sha256=IY1SxGgPmWCrryBxzYvSHX1ZyWpJR3subgERgDHgCyk,300
171
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-only-first-host-probed.json,sha256=l-NGCc53VIrasGGMITs2YtOT6WE9R-gD3rnl0nHv-bQ,647
172
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-permissions-absent.json,sha256=C28PkZcdxV1USxf69ORlaLxs0eLBuIS-thFapcgaVWY,297
173
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-permissions-legacy-array.json,sha256=pcOs3DW0kqrxJLeUCgVzt7V1jyWmlS3zPyelcAWpByY,348
174
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-permissions-null.json,sha256=vUeb9m1mutDgQyol2G4HgKycMeyLpH3XqyWY-w0_66g,300
175
+ nimbus_sdk/_data/spec/conformance/v1/sandbox/cases/harness-unlisted-failure-stops-before-fs.json,sha256=Gz_0yn9qXsVgWxFEldqnBVXugI6D_BABZYDVvDQ6Ma4,543
176
+ nimbus_sdk/_data/spec/negotiation/hello.schema.json,sha256=Du_8jGIBp96nebjoyh62EOCGpJavam-elzB3IrNQ8tU,1307
177
+ nimbus_sdk/_data/spec/predicates/v1/row-data-segments.json,sha256=MJXjfrN2BNj4L_UvINEn87_zjXp-xCYCMB1J9ojOe3A,1532
178
+ nimbus_sdk/_data/spec/predicates/v1/row-data-segments.schema.json,sha256=e8wgz6iVCxelMpt9GladqV64qe07XGLOrb_rxxsj8dQ,2666
179
+ nimbus_sdk/_data/spec/probe/v1/probe-protocol.json,sha256=LT9bfgPNfEwF0JbdnUHoL-X2loH5up4roGrwahSqLSc,3261
180
+ nimbus_sdk/_data/spec/probe/v1/probe-protocol.schema.json,sha256=kR0kdv8H6-TUbz2jvJIFmK9h4DYGslC8oYck73Y0w70,3750
181
+ nimbus_sdk/_data/spec/rules/v1/manifest-rules.json,sha256=DqwzFubraN6yFL9LpTwxA3fnduY7MiRTp9gvk401QlM,4144
182
+ nimbus_sdk/_data/spec/rules/v1/manifest-rules.schema.json,sha256=xwpx6_NNNhcnp6-DP5YkAxH41s5UQo5yN0ZCj9pBuBg,3090
183
+ nimbus_sdk/_data/spec/schemas/v1/extension-manifest.schema.json,sha256=pETleZlc51BEt1iTtQlkDLr_jR6OccpgRqHIHpozP2M,3236
184
+ nimbus_sdk/_data/spec/schemas/v1/hitl-request.schema.json,sha256=IbxMlBF5XF2YcoOGMbXJR9dSr0XWlOJpBDV6GFkblpU,1403
185
+ nimbus_sdk/_data/spec/schemas/v1/nimbus-item.schema.json,sha256=dmqGhEm4aI1U-GHwHVE3y85cqcqAmm1WmgXjF92nHuQ,1335
186
+ nimbus_dev_sdk-0.1.0.dist-info/METADATA,sha256=Em6UmeKmv7mgD5WdvdkF9c8DJ5IA6HMotlVZctRMTZ4,2163
187
+ nimbus_dev_sdk-0.1.0.dist-info/WHEEL,sha256=lCkmxWfQsSc9CfIClYeavTdQeEX2toPqufh9gI35EQA,87
188
+ nimbus_dev_sdk-0.1.0.dist-info/licenses/LICENSE,sha256=-bUoRAq86a9OXXpJGz1Psqu5Bfj1EVBAFK5EAi4W2io,1076
189
+ nimbus_dev_sdk-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.31.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nimbus Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
nimbus_sdk/__init__.py ADDED
@@ -0,0 +1,46 @@
1
+ """Nimbus SDK — the Python binding of the Nimbus authoring contract.
2
+
3
+ The contract itself is language-neutral and published under ``docs/spec/`` in the
4
+ `nimbus-sdk repository <https://github.com/nimbus-agent/nimbus-sdk>`_. This package
5
+ carries that data and binds it to Python.
6
+
7
+ Installed as ``nimbus-dev-sdk``; imported as ``nimbus_sdk``.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from importlib.metadata import PackageNotFoundError, version
13
+
14
+ from nimbus_sdk.contract import (
15
+ CONTRACT_HANDSHAKE_EXIT,
16
+ CONTRACT_VERSION_PATTERN,
17
+ CONTRACT_VERSIONS,
18
+ NegotiationOk,
19
+ NegotiationRefused,
20
+ NegotiationResult,
21
+ declared_versions_match,
22
+ manifest_contract_versions,
23
+ negotiate_contract_version,
24
+ )
25
+ from nimbus_sdk.spec import load_corpus, load_schema, spec_root
26
+
27
+ try:
28
+ __version__ = version("nimbus-dev-sdk")
29
+ except PackageNotFoundError: # running from an uninstalled source tree
30
+ __version__ = "0.0.0+unknown"
31
+
32
+ __all__ = [
33
+ "CONTRACT_HANDSHAKE_EXIT",
34
+ "CONTRACT_VERSIONS",
35
+ "CONTRACT_VERSION_PATTERN",
36
+ "NegotiationOk",
37
+ "NegotiationRefused",
38
+ "NegotiationResult",
39
+ "__version__",
40
+ "declared_versions_match",
41
+ "load_corpus",
42
+ "load_schema",
43
+ "manifest_contract_versions",
44
+ "negotiate_contract_version",
45
+ "spec_root",
46
+ ]
@@ -0,0 +1,160 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://raw.githubusercontent.com/nimbus-agent/nimbus-sdk/main/docs/spec/conformance/v1/framing/case.schema.json",
4
+ "title": "Framing conformance case",
5
+ "description": "One behavioral case: a sequence of chunks pushed into a reader, and what the reader must produce for each. Unlike the document fixtures alongside this corpus, a case is a stream, not a value.",
6
+ "type": "object",
7
+ "required": ["description", "chunks", "expect"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "description": {
11
+ "type": "string",
12
+ "pattern": "\\S",
13
+ "description": "What behavior this case pins, in one sentence."
14
+ },
15
+ "chunks": {
16
+ "type": "array",
17
+ "description": "Chunks to push, in order. May be empty, for the end-of-stream-with-nothing-buffered case.",
18
+ "items": { "$ref": "#/definitions/chunk" }
19
+ },
20
+ "expect": {
21
+ "type": "object",
22
+ "required": ["push"],
23
+ "additionalProperties": false,
24
+ "properties": {
25
+ "push": {
26
+ "type": "array",
27
+ "description": "Positionally parallel to chunks: element i is what push(chunks[i]) must produce. Length MUST equal the length of chunks.",
28
+ "items": {
29
+ "oneOf": [
30
+ {
31
+ "type": "array",
32
+ "description": "The frames this push emits, in order. Empty when the chunk completed no frame.",
33
+ "items": { "$ref": "#/definitions/frame" }
34
+ },
35
+ { "$ref": "#/definitions/error" }
36
+ ]
37
+ }
38
+ },
39
+ "flush": {
40
+ "description": "What draining at end-of-stream must produce. Omit when the case ends in an error and flush is therefore unreachable.",
41
+ "oneOf": [
42
+ {
43
+ "type": "object",
44
+ "required": ["frames", "truncated"],
45
+ "additionalProperties": false,
46
+ "properties": {
47
+ "frames": {
48
+ "type": "array",
49
+ "maxItems": 1,
50
+ "items": { "$ref": "#/definitions/frame" }
51
+ },
52
+ "truncated": {
53
+ "type": "boolean",
54
+ "description": "True when a frame is delivered that no LF terminated."
55
+ }
56
+ }
57
+ },
58
+ { "$ref": "#/definitions/error" }
59
+ ]
60
+ }
61
+ }
62
+ }
63
+ },
64
+ "definitions": {
65
+ "error": {
66
+ "type": "object",
67
+ "required": ["error"],
68
+ "additionalProperties": false,
69
+ "properties": {
70
+ "error": {
71
+ "enum": ["frame-too-long"],
72
+ "description": "Named symbolically so a binding maps it onto its own error type rather than matching a message."
73
+ }
74
+ },
75
+ "description": "The reader must fail this call. How the failure is expressed is a binding's business."
76
+ },
77
+ "frame": {
78
+ "oneOf": [
79
+ { "type": "string" },
80
+ { "$ref": "#/definitions/repeat" }
81
+ ],
82
+ "description": "An expected frame: a literal string, or a repeat descriptor when the frame is too large to inline."
83
+ },
84
+ "chunk": {
85
+ "oneOf": [
86
+ {
87
+ "type": "object",
88
+ "required": ["utf8"],
89
+ "additionalProperties": false,
90
+ "properties": { "utf8": { "type": "string" } },
91
+ "description": "Octets are this string encoded as UTF-8. The readable common case."
92
+ },
93
+ {
94
+ "type": "object",
95
+ "required": ["base64"],
96
+ "additionalProperties": false,
97
+ "properties": {
98
+ "base64": { "type": "string", "pattern": "^[A-Za-z0-9+/]*={0,2}$" }
99
+ },
100
+ "description": "Exact octets. Required for ill-formed UTF-8 and for sequences deliberately split across a boundary."
101
+ },
102
+ { "$ref": "#/definitions/repeat" },
103
+ {
104
+ "type": "object",
105
+ "required": ["concat"],
106
+ "additionalProperties": false,
107
+ "properties": {
108
+ "concat": {
109
+ "type": "array",
110
+ "minItems": 1,
111
+ "items": { "$ref": "#/definitions/chunk" }
112
+ },
113
+ "description": { "type": "string" }
114
+ },
115
+ "description": "One chunk built from several descriptors, for a single push that must contain both a large frame and its delimiter."
116
+ }
117
+ ]
118
+ },
119
+ "repeat": {
120
+ "type": "object",
121
+ "required": ["repeat"],
122
+ "additionalProperties": false,
123
+ "properties": {
124
+ "repeat": {
125
+ "type": "object",
126
+ "oneOf": [
127
+ {
128
+ "type": "object",
129
+ "required": ["byte", "count"],
130
+ "additionalProperties": false,
131
+ "properties": {
132
+ "byte": {
133
+ "type": "integer",
134
+ "minimum": 0,
135
+ "maximum": 255,
136
+ "description": "Repeat this octet."
137
+ },
138
+ "count": { "type": "integer", "minimum": 0 }
139
+ }
140
+ },
141
+ {
142
+ "type": "object",
143
+ "required": ["utf8", "count"],
144
+ "additionalProperties": false,
145
+ "properties": {
146
+ "utf8": {
147
+ "type": "string",
148
+ "minLength": 1,
149
+ "description": "Repeat this string's UTF-8 encoding. Use when the case must distinguish octets from characters."
150
+ },
151
+ "count": { "type": "integer", "minimum": 0 }
152
+ }
153
+ }
154
+ ]
155
+ }
156
+ },
157
+ "description": "Generated content, so a case at the 1 MiB limit costs a few lines rather than megabytes of base64."
158
+ }
159
+ }
160
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "description": "zero-length frames are ignored rather than delivered or treated as an error",
3
+ "chunks": [{ "utf8": "a\n\n\r\nb\n" }],
4
+ "expect": {
5
+ "push": [["a", "b"]],
6
+ "flush": { "frames": [], "truncated": false }
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "description": "the empty-frame rule holds at end-of-stream too: a bare CR remainder yields nothing and flags no truncation",
3
+ "chunks": [{ "utf8": "\r" }],
4
+ "expect": {
5
+ "push": [[]],
6
+ "flush": { "frames": [], "truncated": false }
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "description": "a BOM at the very start of the stream is not part of the first frame",
3
+ "chunks": [{ "concat": [{ "base64": "77u/" }, { "utf8": "{\"a\":1}\n" }] }],
4
+ "expect": {
5
+ "push": [["{\"a\":1}"]],
6
+ "flush": { "frames": [], "truncated": false }
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "description": "only the CR immediately before the LF is a delimiter; a CR elsewhere is content",
3
+ "chunks": [{ "utf8": "a\rb\n" }],
4
+ "expect": {
5
+ "push": [["a\rb"]],
6
+ "flush": { "frames": [], "truncated": false }
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "description": "a four-octet sequence split after its first octet decodes intact",
3
+ "chunks": [{ "base64": "8A==" }, { "base64": "n5iACg==" }],
4
+ "expect": {
5
+ "push": [[], ["😀"]],
6
+ "flush": { "frames": [], "truncated": false }
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "description": "a four-octet sequence split down the middle decodes intact",
3
+ "chunks": [{ "base64": "8J8=" }, { "base64": "mIAK" }],
4
+ "expect": {
5
+ "push": [[], ["😀"]],
6
+ "flush": { "frames": [], "truncated": false }
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "description": "a four-octet sequence split before its last octet decodes intact",
3
+ "chunks": [{ "base64": "8J+Y" }, { "base64": "gAo=" }],
4
+ "expect": {
5
+ "push": [[], ["😀"]],
6
+ "flush": { "frames": [], "truncated": false }
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "description": "a stream that carried nothing yields no frame and flags no truncation",
3
+ "chunks": [],
4
+ "expect": {
5
+ "push": [],
6
+ "flush": { "frames": [], "truncated": false }
7
+ }
8
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "description": "a frame of exactly 1048576 octets is conformant — the limit is inclusive",
3
+ "chunks": [
4
+ { "concat": [{ "repeat": { "byte": 97, "count": 1048576 } }, { "utf8": "\n" }] }
5
+ ],
6
+ "expect": {
7
+ "push": [[{ "repeat": { "byte": 97, "count": 1048576 } }]],
8
+ "flush": { "frames": [], "truncated": false }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "description": "a complete frame of 1048577 octets is rejected, and the rejection is terminal",
3
+ "chunks": [
4
+ { "concat": [{ "repeat": { "byte": 97, "count": 1048577 } }, { "utf8": "\n" }] }
5
+ ],
6
+ "expect": {
7
+ "push": [{ "error": "frame-too-long" }],
8
+ "flush": { "error": "frame-too-long" }
9
+ }
10
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "description": "buffering holds across any number of chunks, not just one",
3
+ "chunks": [{ "utf8": "{" }, { "utf8": "\"a\":1" }, { "utf8": "}\n" }],
4
+ "expect": {
5
+ "push": [[], [], ["{\"a\":1}"]],
6
+ "flush": { "frames": [], "truncated": false }
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "description": "a frame split across two pushes emits nothing until the LF arrives",
3
+ "chunks": [{ "utf8": "{\"a\":1" }, { "utf8": "}\n" }],
4
+ "expect": {
5
+ "push": [[], ["{\"a\":1}"]],
6
+ "flush": { "frames": [], "truncated": false }
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "description": "an incomplete multi-octet sequence at end-of-stream has no completion left to await and becomes U+FFFD",
3
+ "chunks": [{ "base64": "ww==" }],
4
+ "expect": {
5
+ "push": [[]],
6
+ "flush": { "frames": ["�"], "truncated": true }
7
+ }
8
+ }