synapse 3.6.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.6.0/synapse.egg-info → synapse-3.7.0}/PKG-INFO +4 -4
  2. {synapse-3.6.0 → synapse-3.7.0}/pyproject.toml +4 -4
  3. {synapse-3.6.0 → synapse-3.7.0}/synapse/cortex.py +319 -18
  4. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/skills/storm/SKILL.md +12 -1
  5. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/v2modelmap.yaml +12 -0
  6. {synapse-3.6.0 → synapse-3.7.0}/synapse/datamodel.py +1 -1
  7. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/cell.py +1 -1
  8. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/layer.py +24 -4
  9. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/mcp.py +35 -0
  10. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/mddocs.py +98 -11
  11. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/mdstorm.py +1 -1
  12. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/modelrev.py +83 -2
  13. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/schemas.py +25 -0
  14. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/auth.py +3 -3
  15. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/cortex.py +9 -0
  16. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/markdown.py +16 -5
  17. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/model.py +210 -0
  18. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/pkg.py +63 -5
  19. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/task.py +19 -9
  20. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/vault.py +18 -15
  21. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlint.py +255 -20
  22. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/types.py +10 -6
  23. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/version.py +2 -2
  24. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/view.py +7 -5
  25. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/base.py +9 -0
  26. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/doc.py +10 -0
  27. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/entity.py +10 -0
  28. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/inet.py +2 -2
  29. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/telco.py +16 -0
  30. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_cortex.py +33 -0
  31. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_datamodel.py +8 -0
  32. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_mcp.py +57 -1
  33. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_mddocs.py +93 -0
  34. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_mdstorm.py +53 -0
  35. synapse-3.7.0/synapse/tests/test_lib_modelrev.py +207 -0
  36. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_storm.py +27 -0
  37. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_cortex.py +7 -0
  38. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_markdown.py +63 -0
  39. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_model.py +383 -0
  40. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_pkg.py +359 -0
  41. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_task.py +29 -1
  42. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_vault.py +19 -0
  43. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlint.py +123 -1
  44. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormtypes.py +26 -0
  45. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_types.py +27 -19
  46. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_base.py +3 -0
  47. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_doc.py +3 -0
  48. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_entity.py +12 -0
  49. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_inet.py +35 -19
  50. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_infotech.py +4 -0
  51. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_syn.py +1 -2
  52. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_telco.py +28 -0
  53. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_docmodel.py +8 -0
  54. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/utils.py +2 -4
  55. {synapse-3.6.0 → synapse-3.7.0/synapse.egg-info}/PKG-INFO +4 -4
  56. {synapse-3.6.0 → synapse-3.7.0}/synapse.egg-info/requires.txt +3 -3
  57. synapse-3.6.0/synapse/tests/test_lib_modelrev.py +0 -57
  58. {synapse-3.6.0 → synapse-3.7.0}/LICENSE +0 -0
  59. {synapse-3.6.0 → synapse-3.7.0}/README.md +0 -0
  60. {synapse-3.6.0 → synapse-3.7.0}/setup.cfg +0 -0
  61. {synapse-3.6.0 → synapse-3.7.0}/synapse/__init__.py +0 -0
  62. {synapse-3.6.0 → synapse-3.7.0}/synapse/assets/__init__.py +0 -0
  63. {synapse-3.6.0 → synapse-3.7.0}/synapse/axon.py +0 -0
  64. {synapse-3.6.0 → synapse-3.7.0}/synapse/cells.py +0 -0
  65. {synapse-3.6.0 → synapse-3.7.0}/synapse/common.py +0 -0
  66. {synapse-3.6.0 → synapse-3.7.0}/synapse/daemon.py +0 -0
  67. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/__init__.py +0 -0
  68. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/attack-flow/LICENSE.txt +0 -0
  69. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/attack-flow/README.md +0 -0
  70. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/attack-flow/attack-flow-schema-2.0.0.json +0 -0
  71. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/certs/cas/The Vertex Project Intermediate CA (2026).crt +0 -0
  72. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/certs/cas/The Vertex Project ROOT CA (2026).crt +0 -0
  73. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/certs/crls/The Vertex Project Intermediate CA (2026).crl +0 -0
  74. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/certs/crls/The Vertex Project ROOT CA (2026).crl +0 -0
  75. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/iana.tlds.mpk +0 -0
  76. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/iana.uris.mpk +0 -0
  77. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/README.md +0 -0
  78. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/json-schema.org/draft-07/schema +0 -0
  79. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/LICENSE.txt +0 -0
  80. {synapse-3.6.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
  81. {synapse-3.6.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
  82. {synapse-3.6.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
  83. {synapse-3.6.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
  84. {synapse-3.6.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
  85. {synapse-3.6.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
  86. {synapse-3.6.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
  87. {synapse-3.6.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
  88. {synapse-3.6.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
  89. {synapse-3.6.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
  90. {synapse-3.6.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
  91. {synapse-3.6.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
  92. {synapse-3.6.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
  93. {synapse-3.6.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
  94. {synapse-3.6.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
  95. {synapse-3.6.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
  96. {synapse-3.6.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
  97. {synapse-3.6.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
  98. {synapse-3.6.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
  99. {synapse-3.6.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
  100. {synapse-3.6.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
  101. {synapse-3.6.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
  102. {synapse-3.6.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
  103. {synapse-3.6.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
  104. {synapse-3.6.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
  105. {synapse-3.6.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
  106. {synapse-3.6.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
  107. {synapse-3.6.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
  108. {synapse-3.6.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
  109. {synapse-3.6.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
  110. {synapse-3.6.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
  111. {synapse-3.6.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
  112. {synapse-3.6.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
  113. {synapse-3.6.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
  114. {synapse-3.6.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
  115. {synapse-3.6.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
  116. {synapse-3.6.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
  117. {synapse-3.6.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
  118. {synapse-3.6.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
  119. {synapse-3.6.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
  120. {synapse-3.6.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
  121. {synapse-3.6.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
  122. {synapse-3.6.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
  123. {synapse-3.6.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
  124. {synapse-3.6.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
  125. {synapse-3.6.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
  126. {synapse-3.6.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
  127. {synapse-3.6.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
  128. {synapse-3.6.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
  129. {synapse-3.6.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
  130. {synapse-3.6.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
  131. {synapse-3.6.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
  132. {synapse-3.6.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
  133. {synapse-3.6.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
  134. {synapse-3.6.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
  135. {synapse-3.6.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
  136. {synapse-3.6.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
  137. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/lark/__init__.py +0 -0
  138. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/lark/imap.lark +0 -0
  139. {synapse-3.6.0 → synapse-3.7.0}/synapse/data/lark/storm.lark +0 -0
  140. {synapse-3.6.0 → synapse-3.7.0}/synapse/exc.py +0 -0
  141. {synapse-3.6.0 → synapse-3.7.0}/synapse/glob.py +0 -0
  142. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/__init__.py +0 -0
  143. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/_http.py +0 -0
  144. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/agenda.py +0 -0
  145. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/aha.py +0 -0
  146. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/ast.py +0 -0
  147. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/auth.py +0 -0
  148. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/autodoc.py +0 -0
  149. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/base.py +0 -0
  150. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/boss.py +0 -0
  151. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/cache.py +0 -0
  152. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/certdir.py +0 -0
  153. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/chop.py +0 -0
  154. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/cli.py +0 -0
  155. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/cluster.py +0 -0
  156. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/cmd.py +0 -0
  157. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/config.py +0 -0
  158. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/const.py +0 -0
  159. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/coro.py +0 -0
  160. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/__init__.py +0 -0
  161. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/coin.py +0 -0
  162. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/ecc.py +0 -0
  163. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/jwk.py +0 -0
  164. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/passwd.py +0 -0
  165. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/rsa.py +0 -0
  166. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/tinfoil.py +0 -0
  167. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/crypto/utils.py +0 -0
  168. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/datfile.py +0 -0
  169. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/drive.py +0 -0
  170. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/dyndeps.py +0 -0
  171. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/editor.py +0 -0
  172. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/gis.py +0 -0
  173. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/grammar.py +0 -0
  174. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/hashitem.py +0 -0
  175. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/hashset.py +0 -0
  176. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/health.py +0 -0
  177. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/httpapi.py +0 -0
  178. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/httpclient.py +0 -0
  179. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/json.py +0 -0
  180. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/jsonstor.py +0 -0
  181. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/jsrpc.py +0 -0
  182. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/link.py +0 -0
  183. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/lmdbslab.py +0 -0
  184. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/logging.py +0 -0
  185. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/mdparse.py +0 -0
  186. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/msgpack.py +0 -0
  187. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/multislabseqn.py +0 -0
  188. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/nexus.py +0 -0
  189. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/node.py +0 -0
  190. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/nodefuse.py +0 -0
  191. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/oauth.py +0 -0
  192. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/output.py +0 -0
  193. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/parser.py +0 -0
  194. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/platforms/__init__.py +0 -0
  195. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/platforms/common.py +0 -0
  196. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/platforms/darwin.py +0 -0
  197. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/platforms/freebsd.py +0 -0
  198. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/platforms/linux.py +0 -0
  199. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/platforms/windows.py +0 -0
  200. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/process.py +0 -0
  201. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/processpool.py +0 -0
  202. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/provision.py +0 -0
  203. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/queue.py +0 -0
  204. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/reflect.py +0 -0
  205. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/scope.py +0 -0
  206. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/scrape.py +0 -0
  207. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/share.py +0 -0
  208. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/slabseqn.py +0 -0
  209. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/spawner.py +0 -0
  210. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/spooled.py +0 -0
  211. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/storm.py +0 -0
  212. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/storm_format.py +0 -0
  213. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormctrl.py +0 -0
  214. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormhttp.py +0 -0
  215. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/__init__.py +0 -0
  216. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/aha.py +0 -0
  217. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/basex.py +0 -0
  218. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/bytes.py +0 -0
  219. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/cache.py +0 -0
  220. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/cell.py +0 -0
  221. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/compression.py +0 -0
  222. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/cryptoutils.py +0 -0
  223. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/easyperm.py +0 -0
  224. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/ecc.py +0 -0
  225. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/ethereum.py +0 -0
  226. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/file.py +0 -0
  227. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/gen.py +0 -0
  228. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/gis.py +0 -0
  229. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/graph.py +0 -0
  230. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/hashes.py +0 -0
  231. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/hex.py +0 -0
  232. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/imap.py +0 -0
  233. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/index.py +0 -0
  234. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/infosec.py +0 -0
  235. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/ipv6.py +0 -0
  236. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/iters.py +0 -0
  237. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/json.py +0 -0
  238. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/jwt.py +0 -0
  239. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/log.py +0 -0
  240. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/macro.py +0 -0
  241. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/math.py +0 -0
  242. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/mime.py +0 -0
  243. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/modelext.py +0 -0
  244. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/oauth.py +0 -0
  245. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/pack.py +0 -0
  246. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/quorum.py +0 -0
  247. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/random.py +0 -0
  248. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/rsa.py +0 -0
  249. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/scrape.py +0 -0
  250. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/smtp.py +0 -0
  251. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/spooled.py +0 -0
  252. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/stats.py +0 -0
  253. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/stix.py +0 -0
  254. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/storm.py +0 -0
  255. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/tabular.py +0 -0
  256. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/utils.py +0 -0
  257. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/version.py +0 -0
  258. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/vertex.py +0 -0
  259. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/xml.py +0 -0
  260. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormlib/yaml.py +0 -0
  261. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormsvc.py +0 -0
  262. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/stormtypes.py +0 -0
  263. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/task.py +0 -0
  264. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/thishost.py +0 -0
  265. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/thisplat.py +0 -0
  266. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/threads.py +0 -0
  267. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/time.py +0 -0
  268. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/trigger.py +0 -0
  269. {synapse-3.6.0 → synapse-3.7.0}/synapse/lib/urlhelp.py +0 -0
  270. {synapse-3.6.0 → synapse-3.7.0}/synapse/lookup/__init__.py +0 -0
  271. {synapse-3.6.0 → synapse-3.7.0}/synapse/lookup/cvss.py +0 -0
  272. {synapse-3.6.0 → synapse-3.7.0}/synapse/lookup/iana.py +0 -0
  273. {synapse-3.6.0 → synapse-3.7.0}/synapse/lookup/macho.py +0 -0
  274. {synapse-3.6.0 → synapse-3.7.0}/synapse/lookup/pe.py +0 -0
  275. {synapse-3.6.0 → synapse-3.7.0}/synapse/lookup/phonenum.py +0 -0
  276. {synapse-3.6.0 → synapse-3.7.0}/synapse/lookup/timezones.py +0 -0
  277. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/__init__.py +0 -0
  278. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/auth.py +0 -0
  279. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/belief.py +0 -0
  280. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/biz.py +0 -0
  281. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/crypto.py +0 -0
  282. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/dns.py +0 -0
  283. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/economic.py +0 -0
  284. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/files.py +0 -0
  285. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/geopol.py +0 -0
  286. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/geospace.py +0 -0
  287. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/gov.py +0 -0
  288. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/ind.py +0 -0
  289. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/infotech.py +0 -0
  290. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/language.py +0 -0
  291. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/material.py +0 -0
  292. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/orgs.py +0 -0
  293. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/person.py +0 -0
  294. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/planning.py +0 -0
  295. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/proj.py +0 -0
  296. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/risk.py +0 -0
  297. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/science.py +0 -0
  298. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/syn.py +0 -0
  299. {synapse-3.6.0 → synapse-3.7.0}/synapse/models/transport.py +0 -0
  300. {synapse-3.6.0 → synapse-3.7.0}/synapse/servers/__init__.py +0 -0
  301. {synapse-3.6.0 → synapse-3.7.0}/synapse/servers/aha.py +0 -0
  302. {synapse-3.6.0 → synapse-3.7.0}/synapse/servers/axon.py +0 -0
  303. {synapse-3.6.0 → synapse-3.7.0}/synapse/servers/cell.py +0 -0
  304. {synapse-3.6.0 → synapse-3.7.0}/synapse/servers/cortex.py +0 -0
  305. {synapse-3.6.0 → synapse-3.7.0}/synapse/servers/jsonstor.py +0 -0
  306. {synapse-3.6.0 → synapse-3.7.0}/synapse/telepath.py +0 -0
  307. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/__init__.py +0 -0
  308. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/TestUtilsGetrefs.test_basics.yaml +0 -0
  309. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/__init__.py +0 -0
  310. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/cas/synapse.crt.tinfoil +0 -0
  311. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/cas/synapse.key.tinfoil +0 -0
  312. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/hosts/00.aha.loop.vertex.link.crt.tinfoil +0 -0
  313. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/hosts/00.aha.loop.vertex.link.key.tinfoil +0 -0
  314. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/users/root@synapse.crt.tinfoil +0 -0
  315. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/aha/certs/users/root@synapse.key.tinfoil +0 -0
  316. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/attack_flow/CISA AA22-138B VMWare Workspace (Alt).json +0 -0
  317. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/attack_flow/CISA_Iranian_APT.json +0 -0
  318. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/cas/ca.crt.tinfoil +0 -0
  319. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/cas/ca.key.tinfoil +0 -0
  320. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/codesign.crt.tinfoil +0 -0
  321. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/codesign.key.tinfoil +0 -0
  322. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/untrusted.crt.tinfoil +0 -0
  323. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/code/untrusted.key.tinfoil +0 -0
  324. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/hosts/localhost.crt.tinfoil +0 -0
  325. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/hosts/localhost.key.tinfoil +0 -0
  326. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/root.crt.tinfoil +0 -0
  327. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/root.key.tinfoil +0 -0
  328. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/user.crt.tinfoil +0 -0
  329. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/certdir/users/user.key.tinfoil +0 -0
  330. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/cpedata.json +0 -0
  331. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/markdown/column-names.json +0 -0
  332. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/mdstorm/httprespmulti.yaml +0 -0
  333. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/mdstorm/testsvc.py +0 -0
  334. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stix_export/basic.json +0 -0
  335. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stix_export/custom0.json +0 -0
  336. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stix_export/risk0.json +0 -0
  337. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stix_import/apt1.json +0 -0
  338. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stix_import/oasis-example-00.json +0 -0
  339. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stix_import/scos.json +0 -0
  340. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery.storm +0 -0
  341. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery2.storm +0 -0
  342. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery3.storm +0 -0
  343. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery4.storm +0 -0
  344. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/argvquery5.storm +0 -0
  345. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/badstorm.storm +0 -0
  346. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/continueloop.storm +0 -0
  347. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/dupesubs.storm +0 -0
  348. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/dupewarn.storm +0 -0
  349. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/dupfunc.storm +0 -0
  350. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embed/embed.json +0 -0
  351. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embed/embed.py +0 -0
  352. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embed/embed.ts +0 -0
  353. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embed/embed.yaml +0 -0
  354. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery.storm +0 -0
  355. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery2.storm +0 -0
  356. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery3.storm +0 -0
  357. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery4.storm +0 -0
  358. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/embedquery5.storm +0 -0
  359. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/emptybody.storm +0 -0
  360. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/exprdict.storm +0 -0
  361. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/forloop.storm +0 -0
  362. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/ifelif.storm +0 -0
  363. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/ifelse.storm +0 -0
  364. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/lookup.storm +0 -0
  365. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/pivot.storm +0 -0
  366. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/pragma-nocov.storm +0 -0
  367. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/runtsafety.storm +0 -0
  368. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/spin.storm +0 -0
  369. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/stopreturn.storm +0 -0
  370. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/stormctrl.storm +0 -0
  371. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/switch.storm +0 -0
  372. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/switchnodefault.storm +0 -0
  373. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/trycatch.storm +0 -0
  374. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whilebackedge.storm +0 -0
  375. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whilecontinue.storm +0 -0
  376. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whileloop.storm +0 -0
  377. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormcov/whilewithnode.storm +0 -0
  378. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormmod/common +0 -0
  379. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badapidef.yaml +0 -0
  380. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badcmdname.yaml +0 -0
  381. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badendpoints.yaml +0 -0
  382. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badinits.yaml +0 -0
  383. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badjsonpkg.yaml +0 -0
  384. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badvaultskeys.yaml +0 -0
  385. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/badvaultsschema.yaml +0 -0
  386. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/declaredfiles.yaml +0 -0
  387. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/docs/foobar.md +0 -0
  388. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/docs/foobar.svg +0 -0
  389. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/docs/index.md +0 -0
  390. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm/dotstorm.yaml +0 -0
  391. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm_noevents/dotstorm.yaml +0 -0
  392. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm_noevents/storm/commands/dotstorm.bar.storm +0 -0
  393. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/dotstorm_noevents/storm/modules/dotstorm.foo.storm +0 -0
  394. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/files/data.dat +0 -0
  395. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/files/sub/nested.dat +0 -0
  396. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/nomime.yaml +0 -0
  397. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/nopath.yaml +0 -0
  398. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/nosuchfile.yaml +0 -0
  399. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/optic/index.html +0 -0
  400. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/commands/invalidCMD.storm +0 -0
  401. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/commands/testpkg.baz.storm +0 -0
  402. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/commands/testpkgcmd.storm +0 -0
  403. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/modules/apimod.storm +0 -0
  404. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/storm/modules/testmod.storm +0 -0
  405. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/testpkg.yaml +0 -0
  406. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/workflows/testpkg-bam.newp +0 -0
  407. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/workflows/testpkg-baz.yaml +0 -0
  408. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/stormpkg/workflows/testpkg-foo.yaml +0 -0
  409. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/test.dat +0 -0
  410. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/index.md +0 -0
  411. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/mocks/cassette.yaml +0 -0
  412. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/stormpackage.md +0 -0
  413. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/sub/image.svg +0 -0
  414. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/sub/nested.md +0 -0
  415. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/docs/userguide.md +0 -0
  416. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/commands/testcmd.storm +0 -0
  417. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/modules/apimod.storm +0 -0
  418. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/modules/testmod.storm +0 -0
  419. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/storm/testcmd.storm +0 -0
  420. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs/testpkg.yaml +0 -0
  421. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs_no_h1/docs/index.md +0 -0
  422. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs_no_h1/docs/noh1.md +0 -0
  423. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/files/testpkg_build_docs_no_h1/testpkg.yaml +0 -0
  424. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/nopmod.py +0 -0
  425. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_assets.py +0 -0
  426. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_axon.py +0 -0
  427. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_common.py +0 -0
  428. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_daemon.py +0 -0
  429. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_data.py +0 -0
  430. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_docs_stormref.py +0 -0
  431. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_exc.py +0 -0
  432. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_glob.py +0 -0
  433. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_agenda.py +0 -0
  434. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_aha.py +0 -0
  435. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_ast.py +0 -0
  436. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_auth.py +0 -0
  437. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_autodoc.py +0 -0
  438. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_base.py +0 -0
  439. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_boss.py +0 -0
  440. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_cache.py +0 -0
  441. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_cell.py +0 -0
  442. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_certdir.py +0 -0
  443. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_chop.py +0 -0
  444. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_cli.py +0 -0
  445. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_cluster.py +0 -0
  446. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_cmd.py +0 -0
  447. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_config.py +0 -0
  448. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_const.py +0 -0
  449. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_coro.py +0 -0
  450. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_coin.py +0 -0
  451. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_ecc.py +0 -0
  452. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_jwk.py +0 -0
  453. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_passwd.py +0 -0
  454. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_rsa.py +0 -0
  455. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_crypto_tinfoil.py +0 -0
  456. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_datfile.py +0 -0
  457. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_drive.py +0 -0
  458. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_dyndeps.py +0 -0
  459. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_gis.py +0 -0
  460. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_grammar.py +0 -0
  461. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_hashitem.py +0 -0
  462. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_hashset.py +0 -0
  463. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_health.py +0 -0
  464. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_http.py +0 -0
  465. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_httpapi.py +0 -0
  466. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_httpclient.py +0 -0
  467. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_json.py +0 -0
  468. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_jsonstor.py +0 -0
  469. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_jsrpc.py +0 -0
  470. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_layer.py +0 -0
  471. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_link.py +0 -0
  472. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_lmdbslab.py +0 -0
  473. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_logging.py +0 -0
  474. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_mdparse.py +0 -0
  475. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_msgpack.py +0 -0
  476. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_multislabseqn.py +0 -0
  477. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_nexus.py +0 -0
  478. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_node.py +0 -0
  479. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_output.py +0 -0
  480. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_platforms_linux.py +0 -0
  481. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_process.py +0 -0
  482. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_processpool.py +0 -0
  483. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_provision.py +0 -0
  484. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_queue.py +0 -0
  485. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_reflect.py +0 -0
  486. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_scope.py +0 -0
  487. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_scrape.py +0 -0
  488. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_slabseqn.py +0 -0
  489. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_spawner.py +0 -0
  490. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_spooled.py +0 -0
  491. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_storm_format.py +0 -0
  492. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormctrl.py +0 -0
  493. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormhttp.py +0 -0
  494. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_aha.py +0 -0
  495. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_auth.py +0 -0
  496. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_basex.py +0 -0
  497. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_cache.py +0 -0
  498. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_cell.py +0 -0
  499. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_compression.py +0 -0
  500. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_easyperm.py +0 -0
  501. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_ecc.py +0 -0
  502. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_env.py +0 -0
  503. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_ethereum.py +0 -0
  504. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_file.py +0 -0
  505. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_gen.py +0 -0
  506. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_gis.py +0 -0
  507. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_hashes.py +0 -0
  508. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_hex.py +0 -0
  509. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_imap.py +0 -0
  510. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_index.py +0 -0
  511. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_infosec.py +0 -0
  512. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_ipv6.py +0 -0
  513. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_iters.py +0 -0
  514. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_json.py +0 -0
  515. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_jwt.py +0 -0
  516. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_log.py +0 -0
  517. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_macro.py +0 -0
  518. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_mime.py +0 -0
  519. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_modelext.py +0 -0
  520. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_oauth.py +0 -0
  521. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_pack.py +0 -0
  522. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_quorum.py +0 -0
  523. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_random.py +0 -0
  524. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_rsa.py +0 -0
  525. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_scrape.py +0 -0
  526. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_smtp.py +0 -0
  527. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_spooled.py +0 -0
  528. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_stats.py +0 -0
  529. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_stix.py +0 -0
  530. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_storm.py +0 -0
  531. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_tabular.py +0 -0
  532. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_utils.py +0 -0
  533. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_vertex.py +0 -0
  534. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_xml.py +0 -0
  535. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormlib_yaml.py +0 -0
  536. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_stormsvc.py +0 -0
  537. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_task.py +0 -0
  538. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_thishost.py +0 -0
  539. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_time.py +0 -0
  540. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_trigger.py +0 -0
  541. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_urlhelp.py +0 -0
  542. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_version.py +0 -0
  543. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lib_view.py +0 -0
  544. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_lookup_phonenum.py +0 -0
  545. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_auth.py +0 -0
  546. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_belief.py +0 -0
  547. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_biz.py +0 -0
  548. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_crypto.py +0 -0
  549. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_dns.py +0 -0
  550. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_economic.py +0 -0
  551. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_files.py +0 -0
  552. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_geopol.py +0 -0
  553. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_geospace.py +0 -0
  554. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_gov.py +0 -0
  555. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_gov_cn.py +0 -0
  556. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_gov_intl.py +0 -0
  557. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_gov_us.py +0 -0
  558. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_language.py +0 -0
  559. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_material.py +0 -0
  560. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_orgs.py +0 -0
  561. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_person.py +0 -0
  562. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_planning.py +0 -0
  563. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_proj.py +0 -0
  564. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_risk.py +0 -0
  565. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_science.py +0 -0
  566. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_model_transport.py +0 -0
  567. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_servers_axon.py +0 -0
  568. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_servers_cortex.py +0 -0
  569. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_servers_univ.py +0 -0
  570. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_telepath.py +0 -0
  571. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_aha.py +0 -0
  572. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_copy.py +0 -0
  573. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_dump_load.py +0 -0
  574. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_get.py +0 -0
  575. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_axon_put.py +0 -0
  576. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_csv.py +0 -0
  577. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_feed.py +0 -0
  578. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_cortex_layer.py +0 -0
  579. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_docker_validate.py +0 -0
  580. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_apikey.py +0 -0
  581. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_backup.py +0 -0
  582. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_demote.py +0 -0
  583. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_healthcheck.py +0 -0
  584. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_modrole.py +0 -0
  585. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_moduser.py +0 -0
  586. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_promote.py +0 -0
  587. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_reload.py +0 -0
  588. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_shutdown.py +0 -0
  589. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_service_snapshot.py +0 -0
  590. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_cli.py +0 -0
  591. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_lint.py +0 -0
  592. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_pkg_doc.py +0 -0
  593. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_pkg_gen.py +0 -0
  594. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_pkg_publish.py +0 -0
  595. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_printer.py +0 -0
  596. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_tester.py +0 -0
  597. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_storm_validate.py +0 -0
  598. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_doc.py +0 -0
  599. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_docmanifest.py +0 -0
  600. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_easycert.py +0 -0
  601. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_guid.py +0 -0
  602. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_json2mpk.py +0 -0
  603. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_mdstorm.py +0 -0
  604. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_tools_utils_optimize.py +0 -0
  605. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_utils.py +0 -0
  606. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_utils_getrefs.py +0 -0
  607. {synapse-3.6.0 → synapse-3.7.0}/synapse/tests/test_utils_stormcov.py +0 -0
  608. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/__init__.py +0 -0
  609. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/__init__.py +0 -0
  610. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/clone.py +0 -0
  611. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/del.py +0 -0
  612. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/easycert.py +0 -0
  613. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/enroll.py +0 -0
  614. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/list.py +0 -0
  615. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/mirror.py +0 -0
  616. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/provision/__init__.py +0 -0
  617. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/provision/service.py +0 -0
  618. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/aha/provision/user.py +0 -0
  619. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/axon/__init__.py +0 -0
  620. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/axon/copy.py +0 -0
  621. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/axon/dump.py +0 -0
  622. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/axon/get.py +0 -0
  623. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/axon/load.py +0 -0
  624. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/axon/put.py +0 -0
  625. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/cortex/__init__.py +0 -0
  626. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/cortex/csv.py +0 -0
  627. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/cortex/docmodel.py +0 -0
  628. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/cortex/feed.py +0 -0
  629. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/cortex/layer/__init__.py +0 -0
  630. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/cortex/layer/dump.py +0 -0
  631. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/cortex/layer/load.py +0 -0
  632. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/docker/__init__.py +0 -0
  633. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/docker/validate.py +0 -0
  634. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/__init__.py +0 -0
  635. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/apikey.py +0 -0
  636. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/backup.py +0 -0
  637. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/demote.py +0 -0
  638. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/healthcheck.py +0 -0
  639. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/modrole.py +0 -0
  640. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/moduser.py +0 -0
  641. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/promote.py +0 -0
  642. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/reload.py +0 -0
  643. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/shutdown.py +0 -0
  644. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/service/snapshot.py +0 -0
  645. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/__init__.py +0 -0
  646. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/__main__.py +0 -0
  647. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/_cli.py +0 -0
  648. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/_printer.py +0 -0
  649. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/lint.py +0 -0
  650. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/pkg/__init__.py +0 -0
  651. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/pkg/doc.py +0 -0
  652. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/pkg/gen.py +0 -0
  653. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/pkg/publish.py +0 -0
  654. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/tester.py +0 -0
  655. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/storm/validate.py +0 -0
  656. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/__init__.py +0 -0
  657. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/doc.py +0 -0
  658. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/docmanifest.py +0 -0
  659. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/easycert.py +0 -0
  660. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/guid.py +0 -0
  661. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/json2mpk.py +0 -0
  662. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/mdstorm.py +0 -0
  663. {synapse-3.6.0 → synapse-3.7.0}/synapse/tools/utils/optimize.py +0 -0
  664. {synapse-3.6.0 → synapse-3.7.0}/synapse/utils/__init__.py +0 -0
  665. {synapse-3.6.0 → synapse-3.7.0}/synapse/utils/getrefs.py +0 -0
  666. {synapse-3.6.0 → synapse-3.7.0}/synapse/utils/stormcov.py +0 -0
  667. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/__init__.py +0 -0
  668. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cashaddress/LICENSE +0 -0
  669. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cashaddress/__init__.py +0 -0
  670. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cashaddress/base58.py +0 -0
  671. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cashaddress/convert.py +0 -0
  672. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cashaddress/crypto.py +0 -0
  673. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cashaddress/tests/__init__.py +0 -0
  674. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cashaddress/tests/test_cashaddress.py +0 -0
  675. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/LICENSE +0 -0
  676. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/__init__.py +0 -0
  677. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/__init__.py +0 -0
  678. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/email/__init__.py +0 -0
  679. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/email/_parseaddr.py +0 -0
  680. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/email/utils.py +0 -0
  681. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/ipaddress.py +0 -0
  682. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/json.py +0 -0
  683. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/__init__.py +0 -0
  684. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/support/__init__.py +0 -0
  685. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/__init__.py +0 -0
  686. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/test_email.py +0 -0
  687. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/test_parseaddr.py +0 -0
  688. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_email/test_utils.py +0 -0
  689. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_ipaddress.py +0 -0
  690. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/cpython/lib/test/test_json.py +0 -0
  691. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/LICENSE +0 -0
  692. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/__init__.py +0 -0
  693. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/tests/__init__.py +0 -0
  694. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/tests/test_ss58.py +0 -0
  695. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/utils/__init__.py +0 -0
  696. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/substrateinterface/utils/ss58.py +0 -0
  697. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/utils.py +0 -0
  698. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/LICENSE +0 -0
  699. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/__init__.py +0 -0
  700. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/constants.py +0 -0
  701. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/__init__.py +0 -0
  702. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/__init__.py +0 -0
  703. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/codec.py +0 -0
  704. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/exceptions.py +0 -0
  705. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/main.py +0 -0
  706. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/core/addresscodec/utils.py +0 -0
  707. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/__init__.py +0 -0
  708. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/test_codec.py +0 -0
  709. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/test_main.py +0 -0
  710. {synapse-3.6.0 → synapse-3.7.0}/synapse/vendor/xrpl/tests/test_main_test_cases.py +0 -0
  711. {synapse-3.6.0 → synapse-3.7.0}/synapse.egg-info/SOURCES.txt +0 -0
  712. {synapse-3.6.0 → synapse-3.7.0}/synapse.egg-info/dependency_links.txt +0 -0
  713. {synapse-3.6.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.6.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.6.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',
@@ -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`).
@@ -986,7 +996,7 @@ $func("positional", key=1)
986
996
 
987
997
  1. **Isolate the failing query** -- extract the minimal Storm snippet that reproduces the error.
988
998
 
989
- 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.
990
1000
 
991
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:
992
1002
  ```storm
@@ -1011,6 +1021,7 @@ $func("positional", key=1)
1011
1021
  | Tool / File | Purpose |
1012
1022
  |-------------|---------|
1013
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) |
1014
1025
  | `storm` / `call_storm` MCP tools | Run Storm queries against the Cortex (page of result messages / return a value) |
1015
1026
  | `view_list` / `view_get` MCP tools | List views (for the `view` storm opt) and read the user's default view |
1016
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
 
@@ -5327,7 +5327,7 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
5327
5327
  # we can ignore the yielded aha names because we embed it in the task
5328
5328
  async for (ahasvc, (ok, retn)) in self.callPeerGenr(todo, timeout=timeout):
5329
5329
 
5330
- if not ok: # pragma: no cover
5330
+ if not ok:
5331
5331
  logger.warning(f'getTasks() on {ahasvc} failed: {retn}')
5332
5332
  continue
5333
5333
 
@@ -257,6 +257,22 @@ STOR_TYPE_POLYARRAY = STOR_FLAG_ARRAY | STOR_TYPE_POLY
257
257
  STOR_MASK_ARRAY = 0x7fff
258
258
  STOR_MASK_POLY = 0xbfff
259
259
 
260
+ def hasBoolDiff(stortype, valu, oldv):
261
+ '''
262
+ Return True if a new value stores a bool where an equal old value stores an int (True == 1).
263
+ '''
264
+ if stortype & STOR_FLAG_ARRAY:
265
+ return any(aval[1].__class__ is bool and oval[1].__class__ is not bool for aval, oval in zip(valu, oldv))
266
+
267
+ if (stortype & STOR_MASK_POLY) != STOR_TYPE_U8:
268
+ return False
269
+
270
+ if stortype & STOR_FLAG_POLY:
271
+ valu = valu[1]
272
+ oldv = oldv[1]
273
+
274
+ return valu.__class__ is bool and oldv.__class__ is not bool
275
+
260
276
  # Edit types (etyp)
261
277
 
262
278
  EDIT_NODE_ADD = 0 # (<etyp>, (<valu>, <type>, <virts>))
@@ -2598,6 +2614,10 @@ class StorTypePoly(StorType):
2598
2614
  if (valu := self.layr.stortypes[realtype].decodeIndx(bytz[10:])) is s_common.novalu:
2599
2615
  return s_common.novalu
2600
2616
 
2617
+ # bool shares the U8 index with small ints
2618
+ if realtype == STOR_TYPE_U8 and (typ := self.layr.core.model.type(typename)) is not None and 'bool' in typ.types:
2619
+ valu = bool(valu)
2620
+
2601
2621
  return (typename, valu)
2602
2622
 
2603
2623
  async def indxByProp(self, form, prop, cmpr, valu, reverse=False, virt=None, stortype=None):
@@ -4834,7 +4854,7 @@ class Layer(s_nexus.Pusher):
4834
4854
 
4835
4855
  oldv, _, oldvirts = props.get(prop, (None, None, None))
4836
4856
 
4837
- if valu == oldv and virts == oldvirts:
4857
+ if valu == oldv and virts == oldvirts and (oldv is None or not hasBoolDiff(stortype, valu, oldv)):
4838
4858
  return
4839
4859
 
4840
4860
  return edit
@@ -4913,7 +4933,7 @@ class Layer(s_nexus.Pusher):
4913
4933
  if sode is not None and (tagprops := sode.get('tagprops')) is not None:
4914
4934
  tag, prop, valu, stortype, virts = edit[1]
4915
4935
  if (tp_dict := tagprops.get(tag)) is not None:
4916
- if tp_dict.get(prop) == (valu, stortype, virts):
4936
+ if (curv := tp_dict.get(prop)) == (valu, stortype, virts) and not hasBoolDiff(stortype, valu, curv[0]):
4917
4937
  return
4918
4938
 
4919
4939
  return edit
@@ -5299,7 +5319,7 @@ class Layer(s_nexus.Pusher):
5299
5319
 
5300
5320
  oldv, oldt, oldvirts = sode['props'].get(prop, (None, None, None))
5301
5321
 
5302
- if valu == oldv:
5322
+ if valu == oldv and (oldv is None or not hasBoolDiff(stortype, valu, oldv)):
5303
5323
  if virts != oldvirts:
5304
5324
  sode['props'][prop] = (valu, stortype, virts)
5305
5325
  self.dirty[nid] = sode
@@ -5733,7 +5753,7 @@ class Layer(s_nexus.Pusher):
5733
5753
 
5734
5754
  (oldv, oldt, oldvirts) = oldv
5735
5755
 
5736
- if (valu, stortype) == (oldv, oldt):
5756
+ if (valu, stortype) == (oldv, oldt) and not hasBoolDiff(stortype, valu, oldv):
5737
5757
  if virts != oldvirts:
5738
5758
  sode['tagprops'][tag][prop] = (valu, stortype, virts)
5739
5759
  self.dirty[nid] = sode