synapse 3.5.0__tar.gz → 3.7.0__tar.gz

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 (713) hide show
  1. {synapse-3.5.0/synapse.egg-info → synapse-3.7.0}/PKG-INFO +4 -4
  2. {synapse-3.5.0 → synapse-3.7.0}/pyproject.toml +4 -4
  3. {synapse-3.5.0 → synapse-3.7.0}/synapse/axon.py +3 -0
  4. {synapse-3.5.0 → synapse-3.7.0}/synapse/cortex.py +319 -18
  5. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/skills/storm/SKILL.md +14 -2
  6. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/v2modelmap.yaml +12 -0
  7. {synapse-3.5.0 → synapse-3.7.0}/synapse/datamodel.py +1 -1
  8. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/autodoc.py +25 -12
  9. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/cell.py +6 -10
  10. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/layer.py +24 -4
  11. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/mcp.py +35 -0
  12. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/mddocs.py +107 -14
  13. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/mdstorm.py +1 -1
  14. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/modelrev.py +83 -2
  15. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/schemas.py +102 -25
  16. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/auth.py +3 -3
  17. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/cortex.py +9 -0
  18. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/markdown.py +16 -5
  19. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/model.py +210 -0
  20. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/pkg.py +63 -5
  21. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/task.py +19 -9
  22. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/vault.py +18 -15
  23. synapse-3.7.0/synapse/lib/stormlint.py +1149 -0
  24. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/types.py +11 -7
  25. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/version.py +2 -2
  26. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/view.py +7 -5
  27. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/base.py +20 -0
  28. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/doc.py +10 -0
  29. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/economic.py +15 -0
  30. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/entity.py +21 -0
  31. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/inet.py +3 -3
  32. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/telco.py +16 -0
  33. synapse-3.7.0/synapse/tests/files/stormcov/embed/embed.json +14 -0
  34. synapse-3.7.0/synapse/tests/files/stormcov/embed/embed.ts +13 -0
  35. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/runtsafety.storm +1 -1
  36. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/spin.storm +1 -1
  37. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_axon.py +13 -0
  38. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_cortex.py +33 -0
  39. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_datamodel.py +8 -0
  40. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_autodoc.py +104 -0
  41. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_cell.py +12 -0
  42. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_mcp.py +57 -1
  43. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_mddocs.py +98 -0
  44. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_mdstorm.py +53 -0
  45. synapse-3.7.0/synapse/tests/test_lib_modelrev.py +207 -0
  46. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_storm.py +27 -0
  47. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_cortex.py +7 -0
  48. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_markdown.py +64 -1
  49. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_model.py +383 -0
  50. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_pkg.py +359 -0
  51. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_task.py +29 -1
  52. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_vault.py +19 -0
  53. synapse-3.7.0/synapse/tests/test_lib_stormlint.py +671 -0
  54. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormtypes.py +26 -0
  55. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_types.py +77 -19
  56. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_base.py +8 -0
  57. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_doc.py +3 -0
  58. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_economic.py +26 -0
  59. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_entity.py +48 -0
  60. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_inet.py +41 -20
  61. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_infotech.py +4 -0
  62. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_syn.py +1 -2
  63. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_telco.py +28 -0
  64. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_docmodel.py +8 -0
  65. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_demote.py +57 -0
  66. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_shutdown.py +19 -4
  67. synapse-3.7.0/synapse/tests/test_tools_storm_lint.py +300 -0
  68. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_utils_stormcov.py +188 -0
  69. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/utils.py +2 -4
  70. synapse-3.7.0/synapse/tools/storm/lint.py +238 -0
  71. {synapse-3.5.0 → synapse-3.7.0}/synapse/utils/stormcov.py +234 -19
  72. {synapse-3.5.0 → synapse-3.7.0/synapse.egg-info}/PKG-INFO +4 -4
  73. {synapse-3.5.0 → synapse-3.7.0}/synapse.egg-info/SOURCES.txt +6 -0
  74. {synapse-3.5.0 → synapse-3.7.0}/synapse.egg-info/requires.txt +3 -3
  75. synapse-3.5.0/synapse/tests/test_lib_modelrev.py +0 -57
  76. {synapse-3.5.0 → synapse-3.7.0}/LICENSE +0 -0
  77. {synapse-3.5.0 → synapse-3.7.0}/README.md +0 -0
  78. {synapse-3.5.0 → synapse-3.7.0}/setup.cfg +0 -0
  79. {synapse-3.5.0 → synapse-3.7.0}/synapse/__init__.py +0 -0
  80. {synapse-3.5.0 → synapse-3.7.0}/synapse/assets/__init__.py +0 -0
  81. {synapse-3.5.0 → synapse-3.7.0}/synapse/cells.py +0 -0
  82. {synapse-3.5.0 → synapse-3.7.0}/synapse/common.py +0 -0
  83. {synapse-3.5.0 → synapse-3.7.0}/synapse/daemon.py +0 -0
  84. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/__init__.py +0 -0
  85. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/attack-flow/LICENSE.txt +0 -0
  86. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/attack-flow/README.md +0 -0
  87. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/attack-flow/attack-flow-schema-2.0.0.json +0 -0
  88. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/certs/cas/The Vertex Project Intermediate CA (2026).crt +0 -0
  89. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/certs/cas/The Vertex Project ROOT CA (2026).crt +0 -0
  90. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/certs/crls/The Vertex Project Intermediate CA (2026).crl +0 -0
  91. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/certs/crls/The Vertex Project ROOT CA (2026).crl +0 -0
  92. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/iana.tlds.mpk +0 -0
  93. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/iana.uris.mpk +0 -0
  94. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/README.md +0 -0
  95. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/json-schema.org/draft-07/schema +0 -0
  96. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/LICENSE.txt +0 -0
  97. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/binary.json +0 -0
  98. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/bundle.json +0 -0
  99. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/core.json +0 -0
  100. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/cyber-observable-core.json +0 -0
  101. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/dictionary.json +0 -0
  102. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/extension-definition.json +0 -0
  103. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/extension.json +0 -0
  104. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/external-reference.json +0 -0
  105. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/granular-marking.json +0 -0
  106. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/hashes-type.json +0 -0
  107. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/hex.json +0 -0
  108. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/identifier.json +0 -0
  109. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/kill-chain-phase.json +0 -0
  110. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/language-content.json +0 -0
  111. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/marking-definition.json +0 -0
  112. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/properties.json +0 -0
  113. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/timestamp.json +0 -0
  114. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/common/url-regex.json +0 -0
  115. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/artifact.json +0 -0
  116. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/autonomous-system.json +0 -0
  117. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/directory.json +0 -0
  118. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/domain-name.json +0 -0
  119. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/email-addr.json +0 -0
  120. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/email-message.json +0 -0
  121. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/file.json +0 -0
  122. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/ipv4-addr.json +0 -0
  123. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/ipv6-addr.json +0 -0
  124. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/mac-addr.json +0 -0
  125. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/mutex.json +0 -0
  126. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/network-traffic.json +0 -0
  127. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/process.json +0 -0
  128. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/software.json +0 -0
  129. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/url.json +0 -0
  130. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/user-account.json +0 -0
  131. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/windows-registry-key.json +0 -0
  132. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/observables/x509-certificate.json +0 -0
  133. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/attack-pattern.json +0 -0
  134. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/campaign.json +0 -0
  135. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/course-of-action.json +0 -0
  136. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/grouping.json +0 -0
  137. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/identity.json +0 -0
  138. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/incident.json +0 -0
  139. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/indicator.json +0 -0
  140. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/infrastructure.json +0 -0
  141. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/intrusion-set.json +0 -0
  142. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/location.json +0 -0
  143. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/malware-analysis.json +0 -0
  144. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/malware.json +0 -0
  145. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/note.json +0 -0
  146. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/observed-data.json +0 -0
  147. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/opinion.json +0 -0
  148. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/report.json +0 -0
  149. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/threat-actor.json +0 -0
  150. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/tool.json +0 -0
  151. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sdos/vulnerability.json +0 -0
  152. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sros/relationship.json +0 -0
  153. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sros/sighting.json +0 -0
  154. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/lark/__init__.py +0 -0
  155. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/lark/imap.lark +0 -0
  156. {synapse-3.5.0 → synapse-3.7.0}/synapse/data/lark/storm.lark +0 -0
  157. {synapse-3.5.0 → synapse-3.7.0}/synapse/exc.py +0 -0
  158. {synapse-3.5.0 → synapse-3.7.0}/synapse/glob.py +0 -0
  159. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/__init__.py +0 -0
  160. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/_http.py +0 -0
  161. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/agenda.py +0 -0
  162. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/aha.py +0 -0
  163. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/ast.py +0 -0
  164. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/auth.py +0 -0
  165. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/base.py +0 -0
  166. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/boss.py +0 -0
  167. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/cache.py +0 -0
  168. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/certdir.py +0 -0
  169. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/chop.py +0 -0
  170. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/cli.py +0 -0
  171. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/cluster.py +0 -0
  172. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/cmd.py +0 -0
  173. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/config.py +0 -0
  174. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/const.py +0 -0
  175. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/coro.py +0 -0
  176. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/__init__.py +0 -0
  177. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/coin.py +0 -0
  178. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/ecc.py +0 -0
  179. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/jwk.py +0 -0
  180. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/passwd.py +0 -0
  181. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/rsa.py +0 -0
  182. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/tinfoil.py +0 -0
  183. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/crypto/utils.py +0 -0
  184. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/datfile.py +0 -0
  185. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/drive.py +0 -0
  186. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/dyndeps.py +0 -0
  187. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/editor.py +0 -0
  188. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/gis.py +0 -0
  189. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/grammar.py +0 -0
  190. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/hashitem.py +0 -0
  191. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/hashset.py +0 -0
  192. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/health.py +0 -0
  193. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/httpapi.py +0 -0
  194. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/httpclient.py +0 -0
  195. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/json.py +0 -0
  196. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/jsonstor.py +0 -0
  197. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/jsrpc.py +0 -0
  198. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/link.py +0 -0
  199. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/lmdbslab.py +0 -0
  200. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/logging.py +0 -0
  201. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/mdparse.py +0 -0
  202. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/msgpack.py +0 -0
  203. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/multislabseqn.py +0 -0
  204. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/nexus.py +0 -0
  205. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/node.py +0 -0
  206. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/nodefuse.py +0 -0
  207. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/oauth.py +0 -0
  208. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/output.py +0 -0
  209. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/parser.py +0 -0
  210. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/platforms/__init__.py +0 -0
  211. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/platforms/common.py +0 -0
  212. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/platforms/darwin.py +0 -0
  213. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/platforms/freebsd.py +0 -0
  214. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/platforms/linux.py +0 -0
  215. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/platforms/windows.py +0 -0
  216. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/process.py +0 -0
  217. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/processpool.py +0 -0
  218. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/provision.py +0 -0
  219. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/queue.py +0 -0
  220. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/reflect.py +0 -0
  221. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/scope.py +0 -0
  222. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/scrape.py +0 -0
  223. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/share.py +0 -0
  224. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/slabseqn.py +0 -0
  225. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/spawner.py +0 -0
  226. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/spooled.py +0 -0
  227. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/storm.py +0 -0
  228. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/storm_format.py +0 -0
  229. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormctrl.py +0 -0
  230. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormhttp.py +0 -0
  231. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/__init__.py +0 -0
  232. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/aha.py +0 -0
  233. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/basex.py +0 -0
  234. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/bytes.py +0 -0
  235. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/cache.py +0 -0
  236. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/cell.py +0 -0
  237. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/compression.py +0 -0
  238. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/cryptoutils.py +0 -0
  239. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/easyperm.py +0 -0
  240. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/ecc.py +0 -0
  241. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/ethereum.py +0 -0
  242. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/file.py +0 -0
  243. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/gen.py +0 -0
  244. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/gis.py +0 -0
  245. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/graph.py +0 -0
  246. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/hashes.py +0 -0
  247. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/hex.py +0 -0
  248. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/imap.py +0 -0
  249. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/index.py +0 -0
  250. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/infosec.py +0 -0
  251. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/ipv6.py +0 -0
  252. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/iters.py +0 -0
  253. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/json.py +0 -0
  254. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/jwt.py +0 -0
  255. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/log.py +0 -0
  256. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/macro.py +0 -0
  257. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/math.py +0 -0
  258. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/mime.py +0 -0
  259. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/modelext.py +0 -0
  260. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/oauth.py +0 -0
  261. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/pack.py +0 -0
  262. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/quorum.py +0 -0
  263. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/random.py +0 -0
  264. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/rsa.py +0 -0
  265. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/scrape.py +0 -0
  266. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/smtp.py +0 -0
  267. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/spooled.py +0 -0
  268. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/stats.py +0 -0
  269. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/stix.py +0 -0
  270. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/storm.py +0 -0
  271. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/tabular.py +0 -0
  272. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/utils.py +0 -0
  273. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/version.py +0 -0
  274. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/vertex.py +0 -0
  275. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/xml.py +0 -0
  276. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormlib/yaml.py +0 -0
  277. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormsvc.py +0 -0
  278. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/stormtypes.py +0 -0
  279. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/task.py +0 -0
  280. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/thishost.py +0 -0
  281. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/thisplat.py +0 -0
  282. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/threads.py +0 -0
  283. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/time.py +0 -0
  284. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/trigger.py +0 -0
  285. {synapse-3.5.0 → synapse-3.7.0}/synapse/lib/urlhelp.py +0 -0
  286. {synapse-3.5.0 → synapse-3.7.0}/synapse/lookup/__init__.py +0 -0
  287. {synapse-3.5.0 → synapse-3.7.0}/synapse/lookup/cvss.py +0 -0
  288. {synapse-3.5.0 → synapse-3.7.0}/synapse/lookup/iana.py +0 -0
  289. {synapse-3.5.0 → synapse-3.7.0}/synapse/lookup/macho.py +0 -0
  290. {synapse-3.5.0 → synapse-3.7.0}/synapse/lookup/pe.py +0 -0
  291. {synapse-3.5.0 → synapse-3.7.0}/synapse/lookup/phonenum.py +0 -0
  292. {synapse-3.5.0 → synapse-3.7.0}/synapse/lookup/timezones.py +0 -0
  293. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/__init__.py +0 -0
  294. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/auth.py +0 -0
  295. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/belief.py +0 -0
  296. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/biz.py +0 -0
  297. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/crypto.py +0 -0
  298. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/dns.py +0 -0
  299. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/files.py +0 -0
  300. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/geopol.py +0 -0
  301. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/geospace.py +0 -0
  302. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/gov.py +0 -0
  303. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/ind.py +0 -0
  304. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/infotech.py +0 -0
  305. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/language.py +0 -0
  306. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/material.py +0 -0
  307. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/orgs.py +0 -0
  308. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/person.py +0 -0
  309. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/planning.py +0 -0
  310. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/proj.py +0 -0
  311. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/risk.py +0 -0
  312. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/science.py +0 -0
  313. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/syn.py +0 -0
  314. {synapse-3.5.0 → synapse-3.7.0}/synapse/models/transport.py +0 -0
  315. {synapse-3.5.0 → synapse-3.7.0}/synapse/servers/__init__.py +0 -0
  316. {synapse-3.5.0 → synapse-3.7.0}/synapse/servers/aha.py +0 -0
  317. {synapse-3.5.0 → synapse-3.7.0}/synapse/servers/axon.py +0 -0
  318. {synapse-3.5.0 → synapse-3.7.0}/synapse/servers/cell.py +0 -0
  319. {synapse-3.5.0 → synapse-3.7.0}/synapse/servers/cortex.py +0 -0
  320. {synapse-3.5.0 → synapse-3.7.0}/synapse/servers/jsonstor.py +0 -0
  321. {synapse-3.5.0 → synapse-3.7.0}/synapse/telepath.py +0 -0
  322. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/__init__.py +0 -0
  323. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/TestUtilsGetrefs.test_basics.yaml +0 -0
  324. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/__init__.py +0 -0
  325. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/cas/synapse.crt.tinfoil +0 -0
  326. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/cas/synapse.key.tinfoil +0 -0
  327. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/hosts/00.aha.loop.vertex.link.crt.tinfoil +0 -0
  328. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/hosts/00.aha.loop.vertex.link.key.tinfoil +0 -0
  329. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/users/root@synapse.crt.tinfoil +0 -0
  330. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/users/root@synapse.key.tinfoil +0 -0
  331. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/attack_flow/CISA AA22-138B VMWare Workspace (Alt).json +0 -0
  332. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/attack_flow/CISA_Iranian_APT.json +0 -0
  333. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/cas/ca.crt.tinfoil +0 -0
  334. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/cas/ca.key.tinfoil +0 -0
  335. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/codesign.crt.tinfoil +0 -0
  336. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/codesign.key.tinfoil +0 -0
  337. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/untrusted.crt.tinfoil +0 -0
  338. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/untrusted.key.tinfoil +0 -0
  339. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/hosts/localhost.crt.tinfoil +0 -0
  340. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/hosts/localhost.key.tinfoil +0 -0
  341. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/root.crt.tinfoil +0 -0
  342. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/root.key.tinfoil +0 -0
  343. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/user.crt.tinfoil +0 -0
  344. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/user.key.tinfoil +0 -0
  345. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/cpedata.json +0 -0
  346. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/markdown/column-names.json +0 -0
  347. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/mdstorm/httprespmulti.yaml +0 -0
  348. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/mdstorm/testsvc.py +0 -0
  349. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stix_export/basic.json +0 -0
  350. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stix_export/custom0.json +0 -0
  351. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stix_export/risk0.json +0 -0
  352. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stix_import/apt1.json +0 -0
  353. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stix_import/oasis-example-00.json +0 -0
  354. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stix_import/scos.json +0 -0
  355. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery.storm +0 -0
  356. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery2.storm +0 -0
  357. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery3.storm +0 -0
  358. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery4.storm +0 -0
  359. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery5.storm +0 -0
  360. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/badstorm.storm +0 -0
  361. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/continueloop.storm +0 -0
  362. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/dupesubs.storm +0 -0
  363. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/dupewarn.storm +0 -0
  364. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/dupfunc.storm +0 -0
  365. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embed/embed.py +0 -0
  366. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embed/embed.yaml +0 -0
  367. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery.storm +0 -0
  368. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery2.storm +0 -0
  369. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery3.storm +0 -0
  370. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery4.storm +0 -0
  371. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery5.storm +0 -0
  372. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/emptybody.storm +0 -0
  373. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/exprdict.storm +0 -0
  374. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/forloop.storm +0 -0
  375. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/ifelif.storm +0 -0
  376. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/ifelse.storm +0 -0
  377. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/lookup.storm +0 -0
  378. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/pivot.storm +0 -0
  379. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/pragma-nocov.storm +0 -0
  380. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/stopreturn.storm +0 -0
  381. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/stormctrl.storm +0 -0
  382. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/switch.storm +0 -0
  383. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/switchnodefault.storm +0 -0
  384. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/trycatch.storm +0 -0
  385. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whilebackedge.storm +0 -0
  386. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whilecontinue.storm +0 -0
  387. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whileloop.storm +0 -0
  388. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whilewithnode.storm +0 -0
  389. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormmod/common +0 -0
  390. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badapidef.yaml +0 -0
  391. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badcmdname.yaml +0 -0
  392. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badendpoints.yaml +0 -0
  393. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badinits.yaml +0 -0
  394. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badjsonpkg.yaml +0 -0
  395. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badvaultskeys.yaml +0 -0
  396. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badvaultsschema.yaml +0 -0
  397. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/declaredfiles.yaml +0 -0
  398. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/docs/foobar.md +0 -0
  399. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/docs/foobar.svg +0 -0
  400. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/docs/index.md +0 -0
  401. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm/dotstorm.yaml +0 -0
  402. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm_noevents/dotstorm.yaml +0 -0
  403. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm_noevents/storm/commands/dotstorm.bar.storm +0 -0
  404. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm_noevents/storm/modules/dotstorm.foo.storm +0 -0
  405. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/files/data.dat +0 -0
  406. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/files/sub/nested.dat +0 -0
  407. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/nomime.yaml +0 -0
  408. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/nopath.yaml +0 -0
  409. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/nosuchfile.yaml +0 -0
  410. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/optic/index.html +0 -0
  411. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/commands/invalidCMD.storm +0 -0
  412. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/commands/testpkg.baz.storm +0 -0
  413. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/commands/testpkgcmd.storm +0 -0
  414. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/modules/apimod.storm +0 -0
  415. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/modules/testmod.storm +0 -0
  416. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/testpkg.yaml +0 -0
  417. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/workflows/testpkg-bam.newp +0 -0
  418. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/workflows/testpkg-baz.yaml +0 -0
  419. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/workflows/testpkg-foo.yaml +0 -0
  420. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/test.dat +0 -0
  421. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/index.md +0 -0
  422. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/mocks/cassette.yaml +0 -0
  423. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/stormpackage.md +0 -0
  424. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/sub/image.svg +0 -0
  425. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/sub/nested.md +0 -0
  426. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/userguide.md +0 -0
  427. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/commands/testcmd.storm +0 -0
  428. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/modules/apimod.storm +0 -0
  429. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/modules/testmod.storm +0 -0
  430. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/testcmd.storm +0 -0
  431. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/testpkg.yaml +0 -0
  432. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs_no_h1/docs/index.md +0 -0
  433. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs_no_h1/docs/noh1.md +0 -0
  434. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs_no_h1/testpkg.yaml +0 -0
  435. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/nopmod.py +0 -0
  436. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_assets.py +0 -0
  437. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_common.py +0 -0
  438. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_daemon.py +0 -0
  439. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_data.py +0 -0
  440. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_docs_stormref.py +0 -0
  441. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_exc.py +0 -0
  442. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_glob.py +0 -0
  443. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_agenda.py +0 -0
  444. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_aha.py +0 -0
  445. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_ast.py +0 -0
  446. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_auth.py +0 -0
  447. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_base.py +0 -0
  448. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_boss.py +0 -0
  449. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_cache.py +0 -0
  450. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_certdir.py +0 -0
  451. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_chop.py +0 -0
  452. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_cli.py +0 -0
  453. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_cluster.py +0 -0
  454. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_cmd.py +0 -0
  455. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_config.py +0 -0
  456. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_const.py +0 -0
  457. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_coro.py +0 -0
  458. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_coin.py +0 -0
  459. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_ecc.py +0 -0
  460. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_jwk.py +0 -0
  461. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_passwd.py +0 -0
  462. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_rsa.py +0 -0
  463. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_tinfoil.py +0 -0
  464. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_datfile.py +0 -0
  465. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_drive.py +0 -0
  466. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_dyndeps.py +0 -0
  467. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_gis.py +0 -0
  468. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_grammar.py +0 -0
  469. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_hashitem.py +0 -0
  470. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_hashset.py +0 -0
  471. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_health.py +0 -0
  472. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_http.py +0 -0
  473. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_httpapi.py +0 -0
  474. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_httpclient.py +0 -0
  475. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_json.py +0 -0
  476. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_jsonstor.py +0 -0
  477. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_jsrpc.py +0 -0
  478. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_layer.py +0 -0
  479. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_link.py +0 -0
  480. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_lmdbslab.py +0 -0
  481. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_logging.py +0 -0
  482. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_mdparse.py +0 -0
  483. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_msgpack.py +0 -0
  484. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_multislabseqn.py +0 -0
  485. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_nexus.py +0 -0
  486. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_node.py +0 -0
  487. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_output.py +0 -0
  488. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_platforms_linux.py +0 -0
  489. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_process.py +0 -0
  490. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_processpool.py +0 -0
  491. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_provision.py +0 -0
  492. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_queue.py +0 -0
  493. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_reflect.py +0 -0
  494. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_scope.py +0 -0
  495. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_scrape.py +0 -0
  496. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_slabseqn.py +0 -0
  497. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_spawner.py +0 -0
  498. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_spooled.py +0 -0
  499. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_storm_format.py +0 -0
  500. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormctrl.py +0 -0
  501. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormhttp.py +0 -0
  502. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_aha.py +0 -0
  503. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_auth.py +0 -0
  504. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_basex.py +0 -0
  505. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_cache.py +0 -0
  506. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_cell.py +0 -0
  507. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_compression.py +0 -0
  508. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_easyperm.py +0 -0
  509. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_ecc.py +0 -0
  510. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_env.py +0 -0
  511. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_ethereum.py +0 -0
  512. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_file.py +0 -0
  513. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_gen.py +0 -0
  514. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_gis.py +0 -0
  515. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_hashes.py +0 -0
  516. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_hex.py +0 -0
  517. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_imap.py +0 -0
  518. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_index.py +0 -0
  519. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_infosec.py +0 -0
  520. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_ipv6.py +0 -0
  521. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_iters.py +0 -0
  522. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_json.py +0 -0
  523. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_jwt.py +0 -0
  524. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_log.py +0 -0
  525. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_macro.py +0 -0
  526. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_mime.py +0 -0
  527. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_modelext.py +0 -0
  528. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_oauth.py +0 -0
  529. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_pack.py +0 -0
  530. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_quorum.py +0 -0
  531. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_random.py +0 -0
  532. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_rsa.py +0 -0
  533. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_scrape.py +0 -0
  534. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_smtp.py +0 -0
  535. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_spooled.py +0 -0
  536. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_stats.py +0 -0
  537. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_stix.py +0 -0
  538. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_storm.py +0 -0
  539. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_tabular.py +0 -0
  540. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_utils.py +0 -0
  541. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_vertex.py +0 -0
  542. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_xml.py +0 -0
  543. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_yaml.py +0 -0
  544. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_stormsvc.py +0 -0
  545. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_task.py +0 -0
  546. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_thishost.py +0 -0
  547. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_time.py +0 -0
  548. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_trigger.py +0 -0
  549. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_urlhelp.py +0 -0
  550. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_version.py +0 -0
  551. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lib_view.py +0 -0
  552. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_lookup_phonenum.py +0 -0
  553. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_auth.py +0 -0
  554. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_belief.py +0 -0
  555. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_biz.py +0 -0
  556. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_crypto.py +0 -0
  557. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_dns.py +0 -0
  558. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_files.py +0 -0
  559. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_geopol.py +0 -0
  560. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_geospace.py +0 -0
  561. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_gov.py +0 -0
  562. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_gov_cn.py +0 -0
  563. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_gov_intl.py +0 -0
  564. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_gov_us.py +0 -0
  565. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_language.py +0 -0
  566. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_material.py +0 -0
  567. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_orgs.py +0 -0
  568. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_person.py +0 -0
  569. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_planning.py +0 -0
  570. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_proj.py +0 -0
  571. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_risk.py +0 -0
  572. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_science.py +0 -0
  573. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_model_transport.py +0 -0
  574. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_servers_axon.py +0 -0
  575. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_servers_cortex.py +0 -0
  576. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_servers_univ.py +0 -0
  577. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_telepath.py +0 -0
  578. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_aha.py +0 -0
  579. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_copy.py +0 -0
  580. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_dump_load.py +0 -0
  581. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_get.py +0 -0
  582. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_put.py +0 -0
  583. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_csv.py +0 -0
  584. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_feed.py +0 -0
  585. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_layer.py +0 -0
  586. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_docker_validate.py +0 -0
  587. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_apikey.py +0 -0
  588. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_backup.py +0 -0
  589. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_healthcheck.py +0 -0
  590. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_modrole.py +0 -0
  591. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_moduser.py +0 -0
  592. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_promote.py +0 -0
  593. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_reload.py +0 -0
  594. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_service_snapshot.py +0 -0
  595. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_cli.py +0 -0
  596. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_pkg_doc.py +0 -0
  597. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_pkg_gen.py +0 -0
  598. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_pkg_publish.py +0 -0
  599. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_printer.py +0 -0
  600. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_tester.py +0 -0
  601. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_validate.py +0 -0
  602. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_doc.py +0 -0
  603. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_docmanifest.py +0 -0
  604. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_easycert.py +0 -0
  605. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_guid.py +0 -0
  606. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_json2mpk.py +0 -0
  607. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_mdstorm.py +0 -0
  608. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_optimize.py +0 -0
  609. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_utils.py +0 -0
  610. {synapse-3.5.0 → synapse-3.7.0}/synapse/tests/test_utils_getrefs.py +0 -0
  611. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/__init__.py +0 -0
  612. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/__init__.py +0 -0
  613. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/clone.py +0 -0
  614. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/del.py +0 -0
  615. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/easycert.py +0 -0
  616. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/enroll.py +0 -0
  617. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/list.py +0 -0
  618. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/mirror.py +0 -0
  619. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/provision/__init__.py +0 -0
  620. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/provision/service.py +0 -0
  621. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/aha/provision/user.py +0 -0
  622. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/axon/__init__.py +0 -0
  623. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/axon/copy.py +0 -0
  624. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/axon/dump.py +0 -0
  625. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/axon/get.py +0 -0
  626. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/axon/load.py +0 -0
  627. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/axon/put.py +0 -0
  628. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/cortex/__init__.py +0 -0
  629. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/cortex/csv.py +0 -0
  630. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/cortex/docmodel.py +0 -0
  631. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/cortex/feed.py +0 -0
  632. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/cortex/layer/__init__.py +0 -0
  633. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/cortex/layer/dump.py +0 -0
  634. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/cortex/layer/load.py +0 -0
  635. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/docker/__init__.py +0 -0
  636. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/docker/validate.py +0 -0
  637. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/__init__.py +0 -0
  638. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/apikey.py +0 -0
  639. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/backup.py +0 -0
  640. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/demote.py +0 -0
  641. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/healthcheck.py +0 -0
  642. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/modrole.py +0 -0
  643. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/moduser.py +0 -0
  644. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/promote.py +0 -0
  645. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/reload.py +0 -0
  646. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/shutdown.py +0 -0
  647. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/service/snapshot.py +0 -0
  648. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/__init__.py +0 -0
  649. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/__main__.py +0 -0
  650. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/_cli.py +0 -0
  651. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/_printer.py +0 -0
  652. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/pkg/__init__.py +0 -0
  653. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/pkg/doc.py +0 -0
  654. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/pkg/gen.py +0 -0
  655. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/pkg/publish.py +0 -0
  656. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/tester.py +0 -0
  657. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/storm/validate.py +0 -0
  658. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/__init__.py +0 -0
  659. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/doc.py +0 -0
  660. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/docmanifest.py +0 -0
  661. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/easycert.py +0 -0
  662. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/guid.py +0 -0
  663. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/json2mpk.py +0 -0
  664. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/mdstorm.py +0 -0
  665. {synapse-3.5.0 → synapse-3.7.0}/synapse/tools/utils/optimize.py +0 -0
  666. {synapse-3.5.0 → synapse-3.7.0}/synapse/utils/__init__.py +0 -0
  667. {synapse-3.5.0 → synapse-3.7.0}/synapse/utils/getrefs.py +0 -0
  668. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/__init__.py +0 -0
  669. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cashaddress/LICENSE +0 -0
  670. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cashaddress/__init__.py +0 -0
  671. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cashaddress/base58.py +0 -0
  672. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cashaddress/convert.py +0 -0
  673. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cashaddress/crypto.py +0 -0
  674. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cashaddress/tests/__init__.py +0 -0
  675. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cashaddress/tests/test_cashaddress.py +0 -0
  676. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/LICENSE +0 -0
  677. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/__init__.py +0 -0
  678. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/__init__.py +0 -0
  679. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/email/__init__.py +0 -0
  680. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/email/_parseaddr.py +0 -0
  681. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/email/utils.py +0 -0
  682. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/ipaddress.py +0 -0
  683. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/json.py +0 -0
  684. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/__init__.py +0 -0
  685. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/support/__init__.py +0 -0
  686. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/__init__.py +0 -0
  687. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/test_email.py +0 -0
  688. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/test_parseaddr.py +0 -0
  689. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/test_utils.py +0 -0
  690. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_ipaddress.py +0 -0
  691. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_json.py +0 -0
  692. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/LICENSE +0 -0
  693. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/__init__.py +0 -0
  694. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/tests/__init__.py +0 -0
  695. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/tests/test_ss58.py +0 -0
  696. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/utils/__init__.py +0 -0
  697. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/utils/ss58.py +0 -0
  698. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/utils.py +0 -0
  699. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/LICENSE +0 -0
  700. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/__init__.py +0 -0
  701. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/constants.py +0 -0
  702. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/__init__.py +0 -0
  703. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/__init__.py +0 -0
  704. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/codec.py +0 -0
  705. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/exceptions.py +0 -0
  706. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/main.py +0 -0
  707. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/utils.py +0 -0
  708. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/__init__.py +0 -0
  709. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/test_codec.py +0 -0
  710. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/test_main.py +0 -0
  711. {synapse-3.5.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/test_main_test_cases.py +0 -0
  712. {synapse-3.5.0 → synapse-3.7.0}/synapse.egg-info/dependency_links.txt +0 -0
  713. {synapse-3.5.0 → synapse-3.7.0}/synapse.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse
3
- Version: 3.5.0
3
+ Version: 3.7.0
4
4
  Summary: Synapse Intelligence Analysis Framework
5
5
  Author-email: The Vertex Project LLC <root@vertex.link>
6
6
  License-Expression: Apache-2.0
@@ -20,18 +20,18 @@ Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
21
  Requires-Dist: cryptography<51.0.0,>=46.0.7
22
22
  Requires-Dist: msgpack<1.3.0,>=1.2.1
23
- Requires-Dist: xxhash<3.8.0,>=1.4.4
23
+ Requires-Dist: xxhash<4.1.0,>=1.4.4
24
24
  Requires-Dist: lmdb<1.8.0,>=1.7.0
25
25
  Requires-Dist: tornado<7.0.0,>=6.2.0
26
26
  Requires-Dist: regex>=2022.9.11
27
27
  Requires-Dist: PyYAML<6.1.0,>=5.4
28
28
  Requires-Dist: aiohttp<3.15.0,>=3.14.1
29
- Requires-Dist: aiohttp-socks<0.12.0,>=0.11.0
29
+ Requires-Dist: aiohttp-socks<0.13.0,>=0.12.0
30
30
  Requires-Dist: aiosmtplib<6.0.0,>=5.1.2
31
31
  Requires-Dist: prompt_toolkit<3.1.0,>=3.0.29
32
32
  Requires-Dist: lark==1.3.1
33
33
  Requires-Dist: mistletoe<2.0.0,>=1.6.0
34
- Requires-Dist: Pygments<2.21.0,>=2.7.4
34
+ Requires-Dist: Pygments<2.22.0,>=2.7.4
35
35
  Requires-Dist: packaging<27.0,>=20.0
36
36
  Requires-Dist: fastjsonschema<2.22.0,>=2.20.0
37
37
  Requires-Dist: stix2-validator<3.3.0,>=3.2.0
@@ -4,7 +4,7 @@ build-backend = 'setuptools.build_meta'
4
4
 
5
5
  [project]
6
6
  name = 'synapse'
7
- version = '3.5.0'
7
+ version = '3.7.0'
8
8
  authors = [
9
9
  { name = 'The Vertex Project LLC', email = 'root@vertex.link'},
10
10
  ]
@@ -24,18 +24,18 @@ classifiers = [
24
24
  dependencies = [
25
25
  'cryptography>=46.0.7,<51.0.0',
26
26
  'msgpack>=1.2.1,<1.3.0',
27
- 'xxhash>=1.4.4,<3.8.0',
27
+ 'xxhash>=1.4.4,<4.1.0',
28
28
  'lmdb>=1.7.0,<1.8.0',
29
29
  'tornado>=6.2.0,<7.0.0',
30
30
  'regex>=2022.9.11',
31
31
  'PyYAML>=5.4,<6.1.0',
32
32
  'aiohttp>=3.14.1,<3.15.0',
33
- 'aiohttp-socks>=0.11.0,<0.12.0',
33
+ 'aiohttp-socks>=0.12.0,<0.13.0',
34
34
  'aiosmtplib>=5.1.2,<6.0.0',
35
35
  'prompt_toolkit>=3.0.29,<3.1.0',
36
36
  'lark==1.3.1',
37
37
  'mistletoe>=1.6.0,<2.0.0',
38
- 'Pygments>=2.7.4,<2.21.0',
38
+ 'Pygments>=2.7.4,<2.22.0',
39
39
  'packaging>=20.0,<27.0',
40
40
  'fastjsonschema>=2.20.0,<2.22.0',
41
41
  'stix2-validator>=3.2.0,<3.3.0',
@@ -1504,6 +1504,9 @@ class Axon(s_cell.Cell):
1504
1504
  if first:
1505
1505
  first = False
1506
1506
  delt = boff - offs
1507
+ if delt == 0:
1508
+ continue
1509
+
1507
1510
  yield byts[-delt:]
1508
1511
  continue
1509
1512
 
@@ -459,9 +459,13 @@ class CoreApi(s_cell.CellApi):
459
459
  self.user.confirm(('pkg', 'add'))
460
460
  return await self.cell.addStormPkg(pkgdef, verify=verify)
461
461
 
462
- async def delStormPkg(self, iden):
462
+ async def delStormPkg(self, iden, *, uninstall=False, keep=()):
463
463
  self.user.confirm(('pkg', 'del'))
464
- return await self.cell.delStormPkg(iden)
464
+ return await self.cell.delStormPkg(iden, uninstall=uninstall, keep=keep)
465
+
466
+ @s_cell.adminapi()
467
+ async def getStormPkgStatus(self, name):
468
+ return self.cell.getStormPkgStatus(name)
465
469
 
466
470
  @s_cell.adminapi()
467
471
  async def getStormPkgs(self):
@@ -755,6 +759,11 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
755
759
  self.stormpkgvars = {} # type: Dict[str, s_lmdbslab.SafeKeyVal]
756
760
  self.stormpkgstate = {} # type: Dict[str, s_lmdbslab.SafeKeyVal]
757
761
 
762
+ # name: running onload / uninstall task for a package. Only populated while
763
+ # the cortex is active.
764
+ self.stormpkgonload = {}
765
+ self.stormpkguninsttask = {}
766
+
758
767
  # storm services, keyed by the cell type name of the service. a service
759
768
  # is unique by cell type for a deployment, so no separate iden is needed.
760
769
  self.svcs = {}
@@ -873,6 +882,7 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
873
882
  self.tagmeta = self.cortexdata.getSubKeyVal('tagmeta:')
874
883
  self.cmddefs = self.cortexdata.getSubKeyVal('storm:cmds:')
875
884
  self.pkgdefs = self.cortexdata.getSubKeyVal('storm:packages:')
885
+ self.pkguninst = self.cortexdata.getSubKeyVal('storm:pkg:uninstall:')
876
886
  self.svcdefs = self.cortexdata.getSubKeyVal('storm:services:')
877
887
  self.quedefs = self.cortexdata.getSubKeyVal('storm:queues:')
878
888
 
@@ -1218,7 +1228,7 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
1218
1228
  {'perm': ('pkg', 'add'), 'gate': 'cortex',
1219
1229
  'desc': 'Controls access to adding storm packages.'},
1220
1230
  {'perm': ('pkg', 'del'), 'gate': 'cortex',
1221
- 'desc': 'Controls access to deleting storm packages.'},
1231
+ 'desc': 'Controls access to deleting storm packages, including uninstalling them and removing their vaults.'},
1222
1232
 
1223
1233
  {'perm': ('storm',), 'gate': 'cortex',
1224
1234
  'desc': 'Controls all Storm permissions.'},
@@ -1333,7 +1343,14 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
1333
1343
  await view.initMergeTask()
1334
1344
 
1335
1345
  for pkgdef in list(self.stormpkgs.values()):
1336
- self._runStormPkgOnload(pkgdef)
1346
+ pkgname = pkgdef.get('name')
1347
+
1348
+ # a package which is being uninstalled resumes its uninstall, and one
1349
+ # whose uninstall failed stays quiet until it is retried or deleted.
1350
+ if (status := self.pkguninst.get(pkgname)) is None:
1351
+ self._runStormPkgOnload(pkgdef)
1352
+ elif status.get('status') == 'uninstalling':
1353
+ self._initStormPkgUninstall(pkgname)
1337
1354
 
1338
1355
  # a passive cortex does not register storm service packages, so reconcile
1339
1356
  # them now that we are the leader. the service may have changed the
@@ -2189,18 +2206,38 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
2189
2206
  self._reqStormPkgSigned(pkgdef)
2190
2207
 
2191
2208
  await self._normStormPkg(pkgdef)
2209
+
2210
+ name = pkgdef.get('name')
2211
+ if self._isStormPkgUninstalling(name):
2212
+ mesg = f'Storm package {name} is currently being uninstalled.'
2213
+ raise s_exc.BadArg(mesg=mesg, name=name)
2214
+
2192
2215
  return await self._push('pkg:add', pkgdef)
2193
2216
 
2194
2217
  @s_nexus.Pusher.onPush('pkg:add')
2195
2218
  async def _addStormPkg(self, pkgdef):
2196
2219
  name = pkgdef.get('name')
2197
2220
 
2221
+ # a readonly cortex reads the status through to the leader's current value, which
2222
+ # may be ahead of the event being replayed, so only a writer consults it.
2223
+ reinstall = False
2224
+ if not self.readonly:
2225
+
2226
+ # an add which raced a leader side check must not disturb a running uninstall
2227
+ if self._isStormPkgUninstalling(name):
2228
+ return
2229
+
2230
+ # adding a package whose uninstall failed abandons the uninstall and
2231
+ # reinstalls it, even if the definition is unchanged.
2232
+ if self.pkguninst.pop(name, None) is not None:
2233
+ reinstall = True
2234
+
2198
2235
  if not self.readonly:
2199
2236
  # pkgdefs holds the last-loaded def, so bounce an identical re-add
2200
2237
  # and drop the old def on a changed re-add.
2201
2238
  olddef = self.pkgdefs.get(name, None)
2202
2239
  if olddef is not None:
2203
- if s_hashitem.hashitem(pkgdef) != s_hashitem.hashitem(olddef):
2240
+ if reinstall or s_hashitem.hashitem(pkgdef) != s_hashitem.hashitem(olddef):
2204
2241
  self._dropStormPkg(olddef)
2205
2242
  else:
2206
2243
  return
@@ -2229,21 +2266,86 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
2229
2266
  if self._reqAddableVaultType(vtdef):
2230
2267
  await self._addVaultType(vtdef)
2231
2268
 
2269
+ gates, perms = self._getStormPkgBeholdPerms(pkgdef)
2270
+ await self.feedBeholder('pkg:add', pkgdef, gates=gates, perms=perms)
2271
+
2272
+ def _getStormPkgBeholdPerms(self, pkgdef):
2232
2273
  gates = []
2233
2274
  perms = []
2234
2275
  pkgperms = pkgdef.get('perms')
2235
2276
  if pkgperms:
2236
2277
  gates = [p['gate'] for p in pkgperms if p.get('gate') is not None]
2237
2278
  perms = [p['perm'] for p in pkgperms if p.get('perm') is not None]
2238
- await self.feedBeholder('pkg:add', pkgdef, gates=gates, perms=perms)
2279
+ return gates, perms
2280
+
2281
+ def getStormPkgStatus(self, name):
2282
+ '''
2283
+ Get the uninstall status of a Storm package.
2239
2284
 
2240
- async def delStormPkg(self, name):
2285
+ Args:
2286
+ name (str): The name of the package.
2287
+
2288
+ Returns:
2289
+ (dict|None): A dict with the `status` ( "uninstalling" or "failed" ), the `keep` items,
2290
+ the `time` the status last changed and, for a failed uninstall, the failure `mesg`. None
2291
+ if the package is not being uninstalled.
2292
+ '''
2293
+ return self.pkguninst.get(name)
2294
+
2295
+ def _isStormPkgUninstalling(self, name):
2296
+ status = self.pkguninst.get(name)
2297
+ return status is not None and status.get('status') == 'uninstalling'
2298
+
2299
+ def _reqStormPkgKeep(self, pkgdef, keep):
2300
+ '''
2301
+ Validate the items to keep when uninstalling a package.
2302
+ '''
2303
+ valid = {kdef['name'] for kdef in pkgdef.get('uninstall', {}).get('keep', ())}
2304
+ if pkgdef.get('vaults'):
2305
+ valid.add('vaults')
2306
+
2307
+ if isinstance(keep, str) or not isinstance(keep, (list, tuple)):
2308
+ mesg = 'Uninstall keep items must be a list of strings.'
2309
+ raise s_exc.BadArg(mesg=mesg)
2310
+
2311
+ for item in keep:
2312
+ if not isinstance(item, str) or item not in valid:
2313
+ mesg = f'Invalid uninstall keep item: {item}'
2314
+ raise s_exc.BadArg(mesg=mesg, valid=sorted(valid))
2315
+
2316
+ return list(dict.fromkeys(keep))
2317
+
2318
+ async def delStormPkg(self, name, *, uninstall=False, keep=()):
2319
+ '''
2320
+ Delete a Storm package.
2321
+
2322
+ Args:
2323
+ name (str): The name of the package.
2324
+ uninstall (bool): Run the package uninstall routine, which removes the package
2325
+ configuration, state, queues and vaults as well as the package itself. The
2326
+ uninstall runs in the background and survives a restart.
2327
+ keep (list): Items to keep when uninstalling. These must be declared by the
2328
+ package, or be `vaults` for a package which declares vault types.
2329
+ '''
2241
2330
  pkgdef = self.pkgdefs.get(name)
2242
2331
  if pkgdef is None:
2243
2332
  mesg = f'No storm package: {name}.'
2244
2333
  raise s_exc.NoSuchPkg(mesg=mesg)
2245
2334
 
2246
- return await self._push('pkg:del', name)
2335
+ if not uninstall:
2336
+ if keep:
2337
+ mesg = 'Uninstall keep items require an uninstall.'
2338
+ raise s_exc.BadArg(mesg=mesg)
2339
+
2340
+ return await self._push('pkg:del', name)
2341
+
2342
+ if self._isStormPkgUninstalling(name):
2343
+ mesg = f'Storm package {name} is already being uninstalled.'
2344
+ raise s_exc.BadArg(mesg=mesg, name=name)
2345
+
2346
+ keep = self._reqStormPkgKeep(pkgdef, keep)
2347
+
2348
+ return await self._push('pkg:uninstall', name, keep, s_common.now())
2247
2349
 
2248
2350
  @s_nexus.Pusher.onPush('pkg:del')
2249
2351
  async def _delStormPkg(self, name):
@@ -2257,20 +2359,179 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
2257
2359
  if pkgdef is None:
2258
2360
  return
2259
2361
 
2362
+ # a deleted package must not leave work running, and deleting is how an
2363
+ # operator abandons an uninstall.
2364
+ self._cancelStormPkgOnload(name)
2365
+ if (task := self.stormpkguninsttask.pop(name, None)) is not None:
2366
+ task.cancel()
2367
+
2368
+ if not self.readonly:
2369
+ self.pkguninst.pop(name, None)
2370
+
2371
+ await self._dropStormPkgDef(name, pkgdef)
2372
+
2373
+ async def _dropStormPkgDef(self, name, pkgdef):
2374
+
2260
2375
  if not self.readonly:
2261
2376
  self.pkgdefs.pop(name, None)
2262
2377
  self._dropStormPkg(pkgdef)
2263
2378
 
2264
2379
  self._clearPermDefs()
2265
2380
 
2266
- gates = []
2267
- perms = []
2268
- pkgperms = pkgdef.get('perms')
2269
- if pkgperms:
2270
- gates = [p['gate'] for p in pkgperms if p.get('gate') is not None]
2271
- perms = [p['perm'] for p in pkgperms if p.get('perm') is not None]
2381
+ gates, perms = self._getStormPkgBeholdPerms(pkgdef)
2272
2382
  await self.feedBeholder('pkg:del', {'name': name}, gates=gates, perms=perms)
2273
2383
 
2384
+ @s_nexus.Pusher.onPush('pkg:uninstall')
2385
+ async def _uninstStormPkg(self, name, keep, time):
2386
+
2387
+ pkgdef = self.stormpkgs.get(name)
2388
+ if pkgdef is None:
2389
+ return
2390
+
2391
+ if not self.readonly:
2392
+
2393
+ # a replay must not restart or re-announce the uninstall
2394
+ if self._isStormPkgUninstalling(name):
2395
+ return
2396
+
2397
+ self.pkguninst.set(name, {'status': 'uninstalling', 'keep': keep, 'time': time})
2398
+
2399
+ gates, perms = self._getStormPkgBeholdPerms(pkgdef)
2400
+ await self.feedBeholder('pkg:uninstall:init', {'name': name, 'keep': keep}, gates=gates, perms=perms)
2401
+
2402
+ if self.isactive:
2403
+ self._initStormPkgUninstall(name)
2404
+
2405
+ def _initStormPkgUninstall(self, name):
2406
+ '''
2407
+ Start the background uninstall task for a package.
2408
+ '''
2409
+ # a finished task may not have been reaped yet, so a retry must not be mistaken for a duplicate
2410
+ if (task := self.stormpkguninsttask.get(name)) is not None and not task.done():
2411
+ return
2412
+
2413
+ async def _uninstall():
2414
+
2415
+ async with await self.boss.promote(f'storm:pkg:uninstall:{name}', self.auth.rootuser,
2416
+ info={'name': name}, background=True, protected=True):
2417
+
2418
+ if self.safemode:
2419
+ await self.fire('core:pkg:uninstall:skipped', pkg=name, reason='safemode')
2420
+ return
2421
+
2422
+ if (task := self._cancelStormPkgOnload(name)) is not None:
2423
+ await asyncio.gather(task, return_exceptions=True)
2424
+
2425
+ pkgdef = self.stormpkgs.get(name)
2426
+ status = self.pkguninst.get(name)
2427
+
2428
+ # the package was deleted or re-added while we were waiting
2429
+ if pkgdef is None or status is None or status.get('status') != 'uninstalling':
2430
+ return
2431
+
2432
+ keep = status.get('keep')
2433
+ logextra = self.getLogExtra(pkg=name, vers=pkgdef.get('version'))
2434
+
2435
+ await self.fire('core:pkg:uninstall:start', pkg=name, keep=keep)
2436
+
2437
+ failed = None
2438
+
2439
+ if (udef := pkgdef.get('uninstall')) is not None:
2440
+
2441
+ try:
2442
+ opts = copy.deepcopy(udef.get('queryopts', {}))
2443
+ opts.setdefault('vars', {})['keep'] = list(keep)
2444
+
2445
+ async for mesg in self.storm(udef['query'], opts=opts):
2446
+ match mesg[0]:
2447
+ case 'print':
2448
+ logger.info(f'{name} uninstall output: {mesg[1].get("mesg")}', extra=logextra)
2449
+ case 'warn':
2450
+ logger.warning(f'{name} uninstall output: {mesg[1].get("mesg")}', extra=logextra)
2451
+ case 'err':
2452
+ logger.error(f'{name} uninstall output: {mesg[1]}', extra=logextra)
2453
+ failed = f'{mesg[1][0]}: {mesg[1][1].get("mesg")}'
2454
+ await asyncio.sleep(0)
2455
+
2456
+ except Exception as exc:
2457
+ logger.warning(f'Uninstall query failed for package: {name}', exc_info=exc, extra=logextra)
2458
+ failed = f'{exc.__class__.__name__}: {exc}'
2459
+
2460
+ if failed is not None:
2461
+ await self._push('pkg:uninstall:fail', name, failed, s_common.now())
2462
+ await self.fire('core:pkg:uninstall:failed', pkg=name, mesg=failed)
2463
+ return
2464
+
2465
+ await self._push('pkg:uninstall:fini', name, keep)
2466
+ await self.fire('core:pkg:uninstall:complete', pkg=name)
2467
+
2468
+ task = self.runActiveTask(_uninstall())
2469
+
2470
+ def _fini(task):
2471
+ if self.stormpkguninsttask.get(name) is task:
2472
+ self.stormpkguninsttask.pop(name, None)
2473
+
2474
+ self.stormpkguninsttask[name] = task
2475
+ task.add_done_callback(_fini)
2476
+
2477
+ @s_nexus.Pusher.onPush('pkg:uninstall:fail')
2478
+ async def _failStormPkgUninstall(self, name, mesg, time):
2479
+
2480
+ pkgdef = self.stormpkgs.get(name)
2481
+ if pkgdef is None:
2482
+ return
2483
+
2484
+ if not self.readonly:
2485
+
2486
+ # a replay, or a failure which raced a delete or re-add, is not a failure of the current uninstall
2487
+ status = self.pkguninst.get(name)
2488
+ if status is None or status.get('status') != 'uninstalling':
2489
+ return
2490
+
2491
+ status.update({'status': 'failed', 'mesg': mesg, 'time': time})
2492
+ self.pkguninst.set(name, status)
2493
+
2494
+ gates, perms = self._getStormPkgBeholdPerms(pkgdef)
2495
+ await self.feedBeholder('pkg:uninstall:fail', {'name': name, 'mesg': mesg}, gates=gates, perms=perms)
2496
+
2497
+ @s_nexus.Pusher.onPush('pkg:uninstall:fini')
2498
+ async def _finiStormPkgUninstall(self, name, keep):
2499
+ '''
2500
+ Remove everything the cortex owns for a package, then the package.
2501
+ '''
2502
+ # source the def from the in-memory registry for the same reason _delStormPkg does
2503
+ pkgdef = self.stormpkgs.get(name)
2504
+ if pkgdef is None:
2505
+ return
2506
+
2507
+ if not self.readonly:
2508
+
2509
+ status = self.pkguninst.get(name)
2510
+ if status is None or status.get('status') != 'uninstalling':
2511
+ return
2512
+
2513
+ if 'vaults' not in keep:
2514
+ for vtype in pkgdef.get('vaults', {}):
2515
+ for vault in [v for v in self._getVaults() if v.get('type') == vtype]:
2516
+ await self._hndldelVault(vault.get('iden'))
2517
+ await self._delVaultType(vtype)
2518
+
2519
+ for qinfo in [q for q in self.stormpkgqueue.list() if q.get('pkgname') == name]:
2520
+ await self._delStormPkgQueue(name, qinfo.get('name'))
2521
+
2522
+ await self._getStormPkgVarKV(name).truncate()
2523
+ await self._getStormPkgStateKV(name).truncate()
2524
+
2525
+ self.stormpkgvars.pop(name, None)
2526
+ self.stormpkgstate.pop(name, None)
2527
+
2528
+ self.pkguninst.pop(name, None)
2529
+
2530
+ await self._dropStormPkgDef(name, pkgdef)
2531
+
2532
+ gates, perms = self._getStormPkgBeholdPerms(pkgdef)
2533
+ await self.feedBeholder('pkg:uninstall:fini', {'name': name, 'keep': keep}, gates=gates, perms=perms)
2534
+
2274
2535
  def getStormPkgSvc(self, name):
2275
2536
  '''
2276
2537
  Return the cell type name of the storm service which delivered a package.
@@ -2338,6 +2599,9 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
2338
2599
  name = pkgdef.get('name', '')
2339
2600
  logger.exception(f'Error loading pkg: {name}, {str(e)}')
2340
2601
 
2602
+ def getPkgProvides(self):
2603
+ return {name: self.VERSION for name in self.PKG_PROVIDES}
2604
+
2341
2605
  async def _getStormDepPkg(self, pkgname):
2342
2606
  '''
2343
2607
  Resolve a dependency/conflict name to a currently loaded package def.
@@ -2525,6 +2789,22 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
2525
2789
  # Validate package def (post normalization)
2526
2790
  s_schemas.reqValidPkgdef(pkgdef)
2527
2791
 
2792
+ if (uninstall := pkgdef.get('uninstall')) is not None:
2793
+
2794
+ if validstorm:
2795
+ await self.getStormQuery(uninstall.get('query'))
2796
+
2797
+ keepnames = set()
2798
+ for kdef in uninstall.get('keep', ()):
2799
+ kname = kdef.get('name')
2800
+
2801
+ # vaults are kept by the cortex, not the package uninstall query
2802
+ if kname == 'vaults' or kname in keepnames:
2803
+ mesg = f'Uninstall keep name is reserved or duplicated: {kname}'
2804
+ raise s_exc.BadPkgDef(mesg=mesg, name=kname)
2805
+
2806
+ keepnames.add(kname)
2807
+
2528
2808
  for configvar in pkgdef.get('configvars', ()):
2529
2809
  self._reqStormPkgVarType(pkgname, configvar.get('type'))
2530
2810
 
@@ -2691,7 +2971,28 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
2691
2971
 
2692
2972
  await self.fire('core:pkg:onload:complete', pkg=name, storvers=curvers)
2693
2973
 
2694
- self.runActiveTask(_onload())
2974
+ # a re-add must not leave the previous onload running alongside the new one
2975
+ self._cancelStormPkgOnload(name)
2976
+
2977
+ task = self.runActiveTask(_onload())
2978
+
2979
+ def _fini(task):
2980
+ if self.stormpkgonload.get(name) is task:
2981
+ self.stormpkgonload.pop(name, None)
2982
+
2983
+ self.stormpkgonload[name] = task
2984
+ task.add_done_callback(_fini)
2985
+
2986
+ def _cancelStormPkgOnload(self, name):
2987
+ '''
2988
+ Cancel the running onload/inits task for a package, if there is one.
2989
+
2990
+ Returns:
2991
+ (asyncio.Task|None): The cancelled task, which the caller may await.
2992
+ '''
2993
+ if (task := self.stormpkgonload.pop(name, None)) is not None:
2994
+ task.cancel()
2995
+ return task
2695
2996
 
2696
2997
  # N.B. This function is intentionally not async in order to prevent possible user race conditions for code
2697
2998
  # executing outside of the nexus lock.
@@ -7373,11 +7674,11 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
7373
7674
 
7374
7675
  async def replaceVaultSecrets(self, iden, valu):
7375
7676
  '''
7376
- Replace the entire vault config.
7677
+ Replace the entire vault secrets.
7377
7678
 
7378
7679
  Args:
7379
7680
  iden (str): The iden of the vault to edit.
7380
- valu (str): New secrets object to store on the vault.
7681
+ valu (dict): New secrets object to store on the vault.
7381
7682
 
7382
7683
  Raises:
7383
7684
  synapse.exc.BadArg: `valu` is not a dictionary.
@@ -7426,7 +7727,7 @@ class Cortex(s_oauth.OAuthMixin, s_axon.HasAxon, s_jsonstor.HasJsonStor, s_cell.
7426
7727
 
7427
7728
  Raises: None
7428
7729
 
7429
- Yields: tuples of vault info: (<iden>, <name>, <type>, <scope>).
7730
+ Yields: vault definition dictionaries.
7430
7731
  '''
7431
7732
  for vault in self._getVaults():
7432
7733
  yield vault
@@ -30,6 +30,16 @@ The `storm_validate` MCP tool validates Storm syntax without executing the query
30
30
  1. Call `storm_validate` with the query text.
31
31
  2. If `valid` is `false`, read `err` / `mesg` (which include line/column info), fix the query, and re-validate before proceeding.
32
32
 
33
+ ### Linting Storm (Required)
34
+
35
+ The `storm_lint` MCP tool lints a query against the Cortex's own data model (including extended forms and properties) without executing it. Lint every query before running it, and fix or consider each finding.
36
+
37
+ - Arguments: `query`, plus optional `select` / `ignore` / `enable` lists of rule codes or code prefixes.
38
+ - Returns `{"findings": [{"rule", "severity", "line", "column", "mesg"}, ...]}`; an empty list means the query is clean.
39
+ - A syntax error is reported as a single `E001` finding with its line and column, so a clean lint also implies valid syntax.
40
+ - Only `storm` mode queries are supported; `lookup` mode text usually returns an `E001` syntax error.
41
+ - Other findings report code which does not run as intended on Synapse 3.x (`R`), pipeline usage which may not do what was intended (`P`), and Storm which could be written more simply (`S`). Suppress a deliberate finding with a trailing `// noqa` or `// noqa: <code>` comment on that line; `E001` cannot be suppressed.
42
+
33
43
  ### Running Storm Queries
34
44
 
35
45
  The `storm` MCP tool runs a Storm query against the Cortex and returns a **page** of result messages: `{"messages": [(<type>, <info>), ...], "cursor": <str-or-null>}`. Each message is a `(<type>, <info>)` tuple as yielded by the Storm runtime (e.g. `node`, `print`, `warn`, `err`, `fini`).
@@ -653,6 +663,7 @@ inet:fqdn { -> inet:dns:a [ +#reviewed ] } // still has inet:fqdn nodes in the p
653
663
  init { ... } // runs once before any nodes are allowed through the pipeline
654
664
  empty { ... } // runs if pipeline is empty
655
665
  fini { ... } // runs once after all nodes have passed through the pipeline
666
+ exec { ... } // runs once, discarding the nodes it yields; inbound nodes pass through
656
667
  ```
657
668
 
658
669
  ### Built-in Commands
@@ -661,7 +672,6 @@ fini { ... } // runs once after all nodes have
661
672
  limit 10 // limit output count
662
673
  count // count nodes
663
674
  uniq // deduplicate
664
- spin // consume without output
665
675
  max :prop // keep max by property
666
676
  min :prop // keep min by property
667
677
  tee { query1 } { query2 } // branch pipeline
@@ -974,6 +984,7 @@ $func("positional", key=1)
974
984
  - Double-underscore `__` prefix for module-internal variables and functions: they cannot be accessed from outside the module that defines them (e.g. `function __getJson()`)
975
985
  - Module variables at top level: `$setup = $lib.import(...)`, `$srcnode = (null)`
976
986
  - Format strings with backticks for interpolation: `` `text {$var}` ``
987
+ - Avoid `spin`: run a query whose nodes are not needed in an `exec { ... }` block, or isolate it in a function, and a query that returns a value uses `return()`, or `fini { return() }` when more than one node can flow
977
988
  - Parenthesize values and conditions so Storm evaluates them as typed expressions rather than bare strings or edit syntax: `(true)` / `(false)` / `(null)` (not `$lib.true` / `$lib.false` / `$lib.null`), numbers `(42)`, collections `([])` / `({})`, and comparisons like `if ($a = null)`
978
989
  - Use `$lib.raise(ErrName, "message")` for errors, `$lib.exit("message")` for fatal exits
979
990
  - Use `return()` with empty parens to return `(null)`
@@ -985,7 +996,7 @@ $func("positional", key=1)
985
996
 
986
997
  1. **Isolate the failing query** -- extract the minimal Storm snippet that reproduces the error.
987
998
 
988
- 2. **Check the error location** -- the `storm_validate` result (and `BadSyntax`) provides `line` and `column`. Look at that exact position in the query.
999
+ 2. **Lint and check the error location** -- run `storm_lint` on the query; its findings (including an `E001` syntax error) and the `storm_validate` result (and `BadSyntax`) provide `line` and `column`. Look at that exact position in the query.
989
1000
 
990
1001
  3. **Build up incrementally and check the output at each step** -- for complex queries, construct the query one pipeline stage at a time, running each stage with the `storm` tool and confirming it yields the expected nodes/output before adding the next operation. This pins down which stage changes the results. The focus here is verifying the expected output at each step; you can also `storm_validate` each stage for syntax, or do both:
991
1002
  ```storm
@@ -1010,6 +1021,7 @@ $func("positional", key=1)
1010
1021
  | Tool / File | Purpose |
1011
1022
  |-------------|---------|
1012
1023
  | `storm_validate` MCP tool | Validate Storm syntax without executing a query |
1024
+ | `storm_lint` MCP tool | Lint a query against the Cortex data model (syntax errors as `E001`, plus style/performance findings) |
1013
1025
  | `storm` / `call_storm` MCP tools | Run Storm queries against the Cortex (page of result messages / return a value) |
1014
1026
  | `view_list` / `view_get` MCP tools | List views (for the `view` storm opt) and read the user's default view |
1015
1027
  | `view_fork` / `view_del` / `view_merge` MCP tools | Fork, delete, and merge views (use fork+del to safely test ingest) |
@@ -666,6 +666,18 @@ changes:
666
666
  src:
667
667
  became: :caller:phone
668
668
  goals: [renamed]
669
+ tel:txtmesg:
670
+ props:
671
+ from:
672
+ became: :actor:phone
673
+ goals: [renamed]
674
+ svctype:
675
+ goals: [model-refinement]
676
+ reason: The message service type is now recorded with the `:type` taxonomy (for example `sms`, `mms`, or `rcs`).
677
+ to:
678
+ became: :to:phone
679
+ goals: [renamed]
680
+ reason: The inherited `inet:service:message:to` property is the destination account, role, or channel.
669
681
  transport:cargo:
670
682
  props:
671
683
  loaded:
@@ -279,7 +279,7 @@ class Prop:
279
279
  'form': self.form.name,
280
280
  'relname': self.name,
281
281
  'base': self.name.split(':')[-1],
282
- 'computed': int(self.info.get('computed', False)),
282
+ 'computed': bool(self.info.get('computed', False)),
283
283
  'extmodel': self.isext,
284
284
  }
285
285
 
@@ -1752,22 +1752,35 @@ async def processStormModulesMd(md, pkgname, modules):
1752
1752
  md.addHead(mname, lvl=2, anchor=anchor)
1753
1753
 
1754
1754
  for apidef in apidefs:
1755
-
1756
- apiname = apidef['name']
1757
- apidesc = apidef['desc']
1758
- apitype = apidef['type']
1759
-
1760
- callsig = genCallsig(apitype)
1761
- md.addHead(f'{apiname}{callsig}', lvl=3)
1762
- if depr := apidef.get('deprecated'):
1763
- md.addLines(*genDeprecationWarningMd(apiname, depr))
1764
- md.addLines(*prepareMdLines(apidesc))
1765
- md.addLines(*getArgLinesMd(apitype))
1766
- md.addLines(*getReturnLinesMd(apitype))
1755
+ _renderApiDefMd(md, apidef, 3)
1767
1756
 
1768
1757
  if not hasapi:
1769
1758
  md.addLines('This package does not export any Storm APIs.', '')
1770
1759
 
1760
+ def _renderApiDefMd(md, apidef, lvl):
1761
+ '''
1762
+ Render one module apidef: a function, or a class followed by each of its methods one level down.
1763
+ '''
1764
+ apiname = apidef['name']
1765
+ apidesc = apidef['desc']
1766
+ apitype = apidef['type']
1767
+
1768
+ callsig = genCallsig(apitype)
1769
+ md.addHead(f'{apiname}{callsig}', lvl=lvl)
1770
+ if depr := apidef.get('deprecated'):
1771
+ md.addLines(*genDeprecationWarningMd(apiname, depr))
1772
+
1773
+ md.addLines(*prepareMdLines(apidesc))
1774
+ md.addLines(*getArgLinesMd(apitype))
1775
+
1776
+ # a class returns nothing itself: its methods each document their own returns
1777
+ if apitype.get('type') != 'class':
1778
+ md.addLines(*getReturnLinesMd(apitype))
1779
+ return
1780
+
1781
+ for methdef in apitype['methods']:
1782
+ _renderApiDefMd(md, methdef, lvl + 1)
1783
+
1771
1784
  def _renderDepsTableMd(rows):
1772
1785
  lines = ['| Name | Version | Optional | Description |', '|---|---|---|---|']
1773
1786
  for name, vers, optional, desc in rows: