openmodus 0.0.4__tar.gz → 0.0.6__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 (400) hide show
  1. {openmodus-0.0.4 → openmodus-0.0.6}/ARCHITECTURE.md +2 -0
  2. openmodus-0.0.6/LICENSE +315 -0
  3. {openmodus-0.0.4 → openmodus-0.0.6}/PKG-INFO +7 -1
  4. {openmodus-0.0.4 → openmodus-0.0.6}/README.md +4 -0
  5. {openmodus-0.0.4 → openmodus-0.0.6}/READMEs/README.en.md +4 -0
  6. {openmodus-0.0.4 → openmodus-0.0.6}/pyproject.toml +7 -1
  7. {openmodus-0.0.4 → openmodus-0.0.6}/scripts/release_smoke/contracts.py +4 -0
  8. {openmodus-0.0.4 → openmodus-0.0.6}/scripts/release_smoke/runtime.py +12 -0
  9. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/__init__.py +1 -1
  10. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/artifacts_io.py +17 -12
  11. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/cli_commands/presentation.py +22 -5
  12. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/knowledge_reader.py +96 -4
  13. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/knowledge_write_session.py +61 -5
  14. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/corpus/source_roles.py +41 -2
  15. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/extension_registry.py +5 -1
  16. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/extraction_cache.py +12 -0
  17. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/native_binding.py +234 -14
  18. openmodus-0.0.6/src/modus/machine/facts/native_cpp.py +123 -0
  19. openmodus-0.0.6/src/modus/machine/facts/native_kotlin.py +262 -0
  20. openmodus-0.0.6/src/modus/machine/facts/native_objc.py +213 -0
  21. openmodus-0.0.6/src/modus/machine/facts/native_parser.py +273 -0
  22. openmodus-0.0.6/src/modus/machine/facts/native_swift.py +228 -0
  23. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/native_syntax.py +3 -0
  24. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/native_visitor.py +33 -12
  25. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/structural.py +4 -0
  26. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/language-registry.json +5 -5
  27. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/languages.py +1 -1
  28. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/runtime/resources.py +1 -1
  29. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/states.py +2 -3
  30. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/orchestrator/search_policy.py +4 -0
  31. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/platforms/base.py +2 -2
  32. openmodus-0.0.6/src/modus/platforms/claude.py +64 -0
  33. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/platforms/hooks.py +2 -2
  34. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/pipeline.py +5 -5
  35. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/language-adapters/index.md +1 -1
  36. openmodus-0.0.6/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/language-adapters/kotlin.md +17 -0
  37. openmodus-0.0.6/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/language-adapters/native.md +33 -0
  38. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/writer.py +1 -1
  39. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/skillmd.py +1 -1
  40. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/source_listing.py +4 -0
  41. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/workspace.py +2 -2
  42. {openmodus-0.0.4 → openmodus-0.0.6}/tests/README.md +1 -0
  43. {openmodus-0.0.4 → openmodus-0.0.6}/tests/machine/test_architecture.py +4 -4
  44. {openmodus-0.0.4 → openmodus-0.0.6}/tests/machine/test_capability_composer.py +1 -1
  45. {openmodus-0.0.4 → openmodus-0.0.6}/tests/machine/test_context_builder.py +4 -2
  46. {openmodus-0.0.4 → openmodus-0.0.6}/tests/machine/test_extraction_cache_identity.py +4 -0
  47. {openmodus-0.0.4 → openmodus-0.0.6}/tests/machine/test_language_fixtures.py +6 -2
  48. openmodus-0.0.6/tests/machine/test_mobile_adapters.py +240 -0
  49. openmodus-0.0.6/tests/machine/test_mobile_integration.py +166 -0
  50. {openmodus-0.0.4 → openmodus-0.0.6}/tests/machine/test_public_contracts.py +1 -1
  51. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_cli_localization.py +3 -3
  52. openmodus-0.0.6/tests/test_filesystem_portability.py +275 -0
  53. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_install_safety.py +1 -1
  54. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_knowledge_retrieval.py +8 -3
  55. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_knowledge_update.py +26 -24
  56. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_platforms.py +81 -0
  57. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_workspace_lifecycle.py +1 -1
  58. {openmodus-0.0.4 → openmodus-0.0.6}/uv.lock +36 -1
  59. openmodus-0.0.4/LICENSE +0 -21
  60. openmodus-0.0.4/src/modus/machine/facts/native_parser.py +0 -110
  61. openmodus-0.0.4/src/modus/platforms/claude.py +0 -98
  62. openmodus-0.0.4/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/language-adapters/kotlin.md +0 -9
  63. openmodus-0.0.4/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/language-adapters/native.md +0 -9
  64. {openmodus-0.0.4 → openmodus-0.0.6}/.gitignore +0 -0
  65. {openmodus-0.0.4 → openmodus-0.0.6}/CONTRIBUTING.md +0 -0
  66. {openmodus-0.0.4 → openmodus-0.0.6}/docs/authoring-contract.md +0 -0
  67. {openmodus-0.0.4 → openmodus-0.0.6}/docs/knowledge-lifecycle-boundary.md +0 -0
  68. {openmodus-0.0.4 → openmodus-0.0.6}/schemas/machine/analysis-receipt.schema.json +0 -0
  69. {openmodus-0.0.4 → openmodus-0.0.6}/schemas/machine/authoring-context-packet.schema.json +0 -0
  70. {openmodus-0.0.4 → openmodus-0.0.6}/schemas/machine/capability-slice.schema.json +0 -0
  71. {openmodus-0.0.4 → openmodus-0.0.6}/schemas/machine/evidence-page.schema.json +0 -0
  72. {openmodus-0.0.4 → openmodus-0.0.6}/schemas/module-meta.schema.yaml +0 -0
  73. {openmodus-0.0.4 → openmodus-0.0.6}/scripts/README.md +0 -0
  74. {openmodus-0.0.4 → openmodus-0.0.6}/scripts/package_smoke.py +0 -0
  75. {openmodus-0.0.4 → openmodus-0.0.6}/scripts/release_smoke/__init__.py +0 -0
  76. {openmodus-0.0.4 → openmodus-0.0.6}/scripts/release_smoke/archive.py +0 -0
  77. {openmodus-0.0.4 → openmodus-0.0.6}/scripts/release_smoke/cli.py +0 -0
  78. {openmodus-0.0.4 → openmodus-0.0.6}/scripts/release_smoke/diagnostics.py +0 -0
  79. {openmodus-0.0.4 → openmodus-0.0.6}/scripts/release_smoke/verification.py +0 -0
  80. {openmodus-0.0.4 → openmodus-0.0.6}/scripts/wheel-smoke.sh +0 -0
  81. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/__main__.py +0 -0
  82. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/activation_guidance.py +0 -0
  83. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/atomic_writes.py +0 -0
  84. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/cli.py +0 -0
  85. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/cli_commands/__init__.py +0 -0
  86. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/cli_commands/analysis.py +0 -0
  87. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/cli_commands/analysis_display.py +0 -0
  88. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/cli_commands/common.py +0 -0
  89. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/cli_commands/context.py +0 -0
  90. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/cli_commands/discovery.py +0 -0
  91. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/cli_commands/initialize.py +0 -0
  92. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/cli_commands/knowledge.py +0 -0
  93. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/cli_commands/uninstall.py +0 -0
  94. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/cli_commands/update.py +0 -0
  95. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/command_reference.py +0 -0
  96. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/__init__.py +0 -0
  97. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/context_cmd.py +0 -0
  98. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/help.py +0 -0
  99. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/init_project.py +0 -0
  100. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/init_report.py +0 -0
  101. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/install_state.py +0 -0
  102. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/maintenance_scope.py +0 -0
  103. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/permission_errors.py +0 -0
  104. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/reporting.py +0 -0
  105. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/seed_business.py +0 -0
  106. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/self_update.py +0 -0
  107. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/status.py +0 -0
  108. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/uninstall.py +0 -0
  109. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/uninstall_report.py +0 -0
  110. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/uninstall_self.py +0 -0
  111. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/update.py +0 -0
  112. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/update_report.py +0 -0
  113. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/verify_anchors.py +0 -0
  114. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/commands/verify_knowledge.py +0 -0
  115. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/config.py +0 -0
  116. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/display_labels.py +0 -0
  117. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/git_hygiene.py +0 -0
  118. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/hooks/__init__.py +0 -0
  119. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/hooks/bootstrap.py +0 -0
  120. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/hooks/context.py +0 -0
  121. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/hooks/contracts.py +0 -0
  122. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/hooks/environment.py +0 -0
  123. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/hooks/protocol.py +0 -0
  124. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/hooks/runtime.py +0 -0
  125. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/knowledge_identity.py +0 -0
  126. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/knowledge_seeds.py +0 -0
  127. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/knowledge_update.py +0 -0
  128. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/knowledge_verification/__init__.py +0 -0
  129. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/knowledge_verification/authoring_card.py +0 -0
  130. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/knowledge_verification/discovery.py +0 -0
  131. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/knowledge_verification/markdown_integrity.py +0 -0
  132. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/knowledge_verification/metadata.py +0 -0
  133. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/knowledge_verification/models.py +0 -0
  134. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/knowledge_verification/publication.py +0 -0
  135. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/knowledge_verification/structure.py +0 -0
  136. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/ARCHITECTURE.md +0 -0
  137. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/README.md +0 -0
  138. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/__init__.py +0 -0
  139. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/api.py +0 -0
  140. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/capability/README.md +0 -0
  141. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/capability/__init__.py +0 -0
  142. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/capability/composer.py +0 -0
  143. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/capability/composition_model.py +0 -0
  144. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/capability/contracts.py +0 -0
  145. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/capability/input_normalization.py +0 -0
  146. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/capability/lifecycle.py +0 -0
  147. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/capability/seed_selection.py +0 -0
  148. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/capability/traversal.py +0 -0
  149. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/corpus/README.md +0 -0
  150. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/corpus/__init__.py +0 -0
  151. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/corpus/contracts.py +0 -0
  152. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/corpus/input_snapshot.py +0 -0
  153. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/corpus/lifecycle.py +0 -0
  154. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/corpus/scan.py +0 -0
  155. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/corpus/source_coordinates.py +0 -0
  156. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/corpus/source_filters.py +0 -0
  157. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/corpus/source_inventory.py +0 -0
  158. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/corpus/source_snapshot.py +0 -0
  159. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/errors.py +0 -0
  160. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/README.md +0 -0
  161. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/__init__.py +0 -0
  162. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/build_context.py +0 -0
  163. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/build_contracts.py +0 -0
  164. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/build_resolvers/__init__.py +0 -0
  165. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/build_resolvers/base.py +0 -0
  166. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/build_resolvers/cpp_resolver.py +0 -0
  167. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/build_resolvers/go_resolver.py +0 -0
  168. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/build_resolvers/java_resolver.py +0 -0
  169. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/build_resolvers/python_resolver.py +0 -0
  170. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/build_resolvers/typescript_resolver.py +0 -0
  171. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/build_support.py +0 -0
  172. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/compiler/__init__.py +0 -0
  173. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/compiler/cache.py +0 -0
  174. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/compiler/cpp.py +0 -0
  175. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/compiler/go.py +0 -0
  176. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/compiler/java.py +0 -0
  177. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/compiler/merge.py +0 -0
  178. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/compiler/models.py +0 -0
  179. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/compiler/process.py +0 -0
  180. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/compiler/python.py +0 -0
  181. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/compiler/typescript.py +0 -0
  182. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/contracts.py +0 -0
  183. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/entry_contracts.py +0 -0
  184. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/entry_observation.py +0 -0
  185. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/framework_facts.py +0 -0
  186. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/frontend.py +0 -0
  187. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/frontend_context.py +0 -0
  188. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/frontend_frameworks.py +0 -0
  189. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/frontend_routes.py +0 -0
  190. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/frontend_server.py +0 -0
  191. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/frontend_state.py +0 -0
  192. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/generic.py +0 -0
  193. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/language_capabilities.py +0 -0
  194. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/lifecycle.py +0 -0
  195. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/provider_assets/ModusJavaAnalyzer.java +0 -0
  196. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/provider_assets/modus_go_analyzer.go +0 -0
  197. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/provider_assets/modus_typescript_analyzer.cjs +0 -0
  198. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/rule_signals.py +0 -0
  199. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/search_metadata.py +0 -0
  200. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/semantic_contracts.py +0 -0
  201. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/semantic_ir.py +0 -0
  202. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/semantic_providers.py +0 -0
  203. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/source_contracts.py +0 -0
  204. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/source_evidence.py +0 -0
  205. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/facts/value_summary.py +0 -0
  206. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/implementation.py +0 -0
  207. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/packet/README.md +0 -0
  208. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/packet/__init__.py +0 -0
  209. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/packet/context_builder.py +0 -0
  210. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/packet/contracts.py +0 -0
  211. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/packet/cursor.py +0 -0
  212. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/packet/lifecycle.py +0 -0
  213. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/packet/query.py +0 -0
  214. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/pipeline.py +0 -0
  215. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/progress.py +0 -0
  216. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/projection/README.md +0 -0
  217. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/projection/__init__.py +0 -0
  218. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/projection/community_signal.py +0 -0
  219. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/projection/contracts.py +0 -0
  220. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/projection/lifecycle.py +0 -0
  221. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/projection/proposals.py +0 -0
  222. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/projection/publication.py +0 -0
  223. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/projection/scope_candidates.py +0 -0
  224. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/projection/scope_profiles.py +0 -0
  225. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/projection/views.py +0 -0
  226. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/receipts.py +0 -0
  227. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/README.md +0 -0
  228. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/__init__.py +0 -0
  229. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/contracts.py +0 -0
  230. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/evidence_graph.py +0 -0
  231. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/lifecycle.py +0 -0
  232. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/method_graph.py +0 -0
  233. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/navigation.py +0 -0
  234. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/reference_outcomes.py +0 -0
  235. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/semantic_reconcile.py +0 -0
  236. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/topology.py +0 -0
  237. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/topology_model.py +0 -0
  238. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/topology_records.py +0 -0
  239. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/topology_resources.py +0 -0
  240. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/topology_rules.py +0 -0
  241. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/topology_validation.py +0 -0
  242. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/resolution/view_quarantine.py +0 -0
  243. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/runtime/__init__.py +0 -0
  244. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/runtime/toolchains.py +0 -0
  245. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/store/__init__.py +0 -0
  246. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/store/bundle.py +0 -0
  247. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/store/bundle_catalogs.py +0 -0
  248. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/store/catalog.py +0 -0
  249. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/store/catalog_building.py +0 -0
  250. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/store/contracts.py +0 -0
  251. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/store/evidence_records.py +0 -0
  252. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/store/fingerprint.py +0 -0
  253. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/store/ids.py +0 -0
  254. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/machine/store/scope_catalog.py +0 -0
  255. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/manifest.py +0 -0
  256. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/orchestrator/README.md +0 -0
  257. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/orchestrator/__init__.py +0 -0
  258. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/orchestrator/context_resolver.py +0 -0
  259. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/orchestrator/evidence_search.py +0 -0
  260. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/orchestrator/fallback.py +0 -0
  261. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/orchestrator/knowledge_sync.py +0 -0
  262. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/orchestrator/models.py +0 -0
  263. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/orchestrator/module_meta.py +0 -0
  264. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/orchestrator/path_scope.py +0 -0
  265. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/orchestrator/preflight.py +0 -0
  266. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/orchestrator/query_terms.py +0 -0
  267. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/paths.py +0 -0
  268. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/platforms/__init__.py +0 -0
  269. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/platforms/codebuddy.py +0 -0
  270. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/platforms/codex.py +0 -0
  271. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/platforms/cursor.py +0 -0
  272. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/platforms/display.py +0 -0
  273. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/platforms/models.py +0 -0
  274. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/platforms/registry.py +0 -0
  275. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/platforms/rendering.py +0 -0
  276. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/platforms/sections.py +0 -0
  277. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/precedence.py +0 -0
  278. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/project_activation.py +0 -0
  279. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/py.typed +0 -0
  280. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/README.md +0 -0
  281. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/__init__.py +0 -0
  282. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/budget.py +0 -0
  283. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/delivery.py +0 -0
  284. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/index.py +0 -0
  285. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/query.py +0 -0
  286. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/routing.py +0 -0
  287. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/runtime.py +0 -0
  288. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/settings.py +0 -0
  289. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/stages/__init__.py +0 -0
  290. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/stages/discovery.py +0 -0
  291. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/stages/documents.py +0 -0
  292. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/stages/lexical.py +0 -0
  293. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/stages/ranking.py +0 -0
  294. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/stages/sections.py +0 -0
  295. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/stages/selection.py +0 -0
  296. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/retrieval/stages/settings.py +0 -0
  297. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/README.md +0 -0
  298. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/__init__.py +0 -0
  299. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/catalog.py +0 -0
  300. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/project.py +0 -0
  301. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/README.md +0 -0
  302. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/commands/init.md +0 -0
  303. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/commands/reinit.md +0 -0
  304. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/commands/update-knowledge.md +0 -0
  305. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/knowledge/business/experience/index.md +0 -0
  306. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/knowledge/business/index.md +0 -0
  307. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/knowledge/business/meta/index.md +0 -0
  308. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/knowledge/business/scenario/index.md +0 -0
  309. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/knowledge/constraint/global-standard.md +0 -0
  310. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/knowledge/constraint/team-standard.md +0 -0
  311. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/knowledge/handbook/SKILL.md +0 -0
  312. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-init/SKILL.md +0 -0
  313. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-init/references/constraint-extraction.md +0 -0
  314. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-init/references/constraint-profiles/cpp.md +0 -0
  315. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-init/references/constraint-profiles/dotnet.md +0 -0
  316. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-init/references/constraint-profiles/go.md +0 -0
  317. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-init/references/constraint-profiles/java.md +0 -0
  318. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-init/references/constraint-profiles/kotlin.md +0 -0
  319. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-init/references/constraint-profiles/php.md +0 -0
  320. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-init/references/constraint-profiles/python.md +0 -0
  321. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-init/references/constraint-profiles/rust.md +0 -0
  322. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-init/references/constraint-profiles/web.md +0 -0
  323. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-init/references/global-standard.md +0 -0
  324. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-init/references/workspace-init.md +0 -0
  325. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-reinit/SKILL.md +0 -0
  326. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-sync-knowledge/SKILL.md +0 -0
  327. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/modus-update-knowledge/SKILL.md +0 -0
  328. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/SKILL.md +0 -0
  329. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/domain-worker-prompt.md +0 -0
  330. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/index.md +0 -0
  331. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/language-adapters/dotnet.md +0 -0
  332. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/language-adapters/generic.md +0 -0
  333. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/language-adapters/go.md +0 -0
  334. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/language-adapters/iac.md +0 -0
  335. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/language-adapters/java.md +0 -0
  336. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/language-adapters/php.md +0 -0
  337. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/language-adapters/python.md +0 -0
  338. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/language-adapters/rust.md +0 -0
  339. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/language-adapters/typescript.md +0 -0
  340. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/machine-packet.md +0 -0
  341. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/scenario-closure.md +0 -0
  342. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/evidence/scope-modeling.md +0 -0
  343. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/deliverables/api.md +0 -0
  344. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/deliverables/business.md +0 -0
  345. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/deliverables/collaboration.md +0 -0
  346. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/deliverables/domain.md +0 -0
  347. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/deliverables/infrastructure.md +0 -0
  348. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/deliverables/module.md +0 -0
  349. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/deliverables/object.md +0 -0
  350. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/deliverables/root.md +0 -0
  351. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/deliverables/rule.md +0 -0
  352. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/deliverables/state-machine.md +0 -0
  353. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/deliverables/team-standard.md +0 -0
  354. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/deliverables/topics.md +0 -0
  355. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/index.md +0 -0
  356. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/layout.md +0 -0
  357. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/localization.md +0 -0
  358. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/surface-profiles.md +0 -0
  359. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/framework/visual-expression.md +0 -0
  360. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/index.md +0 -0
  361. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/parallel-domain-authoring.md +0 -0
  362. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/authoring/publication.md +0 -0
  363. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/constraint-usage.md +0 -0
  364. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/framework-update.md +0 -0
  365. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scaffold/templates/skills/using-modus/references/router-details.md +0 -0
  366. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/schema_resources.py +0 -0
  367. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scope_models.py +0 -0
  368. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/scope_resolver.py +0 -0
  369. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/sensitive_literals.py +0 -0
  370. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/surface.py +0 -0
  371. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/text_tree.py +0 -0
  372. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/versioning.py +0 -0
  373. {openmodus-0.0.4 → openmodus-0.0.6}/src/modus/workspace_maps.py +0 -0
  374. {openmodus-0.0.4 → openmodus-0.0.6}/tests/_support/__init__.py +0 -0
  375. {openmodus-0.0.4 → openmodus-0.0.6}/tests/_support/analysis.py +0 -0
  376. {openmodus-0.0.4 → openmodus-0.0.6}/tests/_support/markdown.py +0 -0
  377. {openmodus-0.0.4 → openmodus-0.0.6}/tests/_support/paths.py +0 -0
  378. {openmodus-0.0.4 → openmodus-0.0.6}/tests/_support/sensitive_samples.py +0 -0
  379. {openmodus-0.0.4 → openmodus-0.0.6}/tests/fixtures/simple_service/order/order_repo.py +0 -0
  380. {openmodus-0.0.4 → openmodus-0.0.6}/tests/fixtures/simple_service/order/order_service.py +0 -0
  381. {openmodus-0.0.4 → openmodus-0.0.6}/tests/fixtures/simple_service/payment/payment_gateway.py +0 -0
  382. {openmodus-0.0.4 → openmodus-0.0.6}/tests/fixtures/simple_service/payment/payment_service.py +0 -0
  383. {openmodus-0.0.4 → openmodus-0.0.6}/tests/machine/test_contracts.py +0 -0
  384. {openmodus-0.0.4 → openmodus-0.0.6}/tests/machine/test_corpus.py +0 -0
  385. {openmodus-0.0.4 → openmodus-0.0.6}/tests/machine/test_lifecycle_degradation.py +0 -0
  386. {openmodus-0.0.4 → openmodus-0.0.6}/tests/machine/test_progress.py +0 -0
  387. {openmodus-0.0.4 → openmodus-0.0.6}/tests/machine/test_projection.py +0 -0
  388. {openmodus-0.0.4 → openmodus-0.0.6}/tests/machine/test_states.py +0 -0
  389. {openmodus-0.0.4 → openmodus-0.0.6}/tests/machine/test_store_validation.py +0 -0
  390. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_analysis_pipeline.py +0 -0
  391. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_cli_boundaries.py +0 -0
  392. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_documented_cli.py +0 -0
  393. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_evidence_selection.py +0 -0
  394. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_hooks.py +0 -0
  395. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_orchestrator.py +0 -0
  396. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_project_lifecycle.py +0 -0
  397. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_release_smoke.py +0 -0
  398. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_scaffold.py +0 -0
  399. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_sensitive_literals.py +0 -0
  400. {openmodus-0.0.4 → openmodus-0.0.6}/tests/test_verify_knowledge.py +0 -0
@@ -98,6 +98,8 @@ N1 源码基线 → N2 程序事实 → N3 关系解析 → N4 能力模型 →
98
98
 
99
99
  写入使用准备修改时观察到的哈希。并发修改形成冲突,不被覆盖。迁移先建立新主定义、修复链接,再删除旧生成文件。知识更新批次按文件报告独立结果,不承诺全批回滚;安装事务则对计划目标创建快照,失败时尝试精确回滚,并明确报告恢复不完整。
100
100
 
101
+ 安全文件读取与知识退役按平台选择后端:POSIX 使用目录描述符与相对操作;Windows 核验所有父目录的身份快照、常规文件身份与原始字节摘要,并拒绝软链和重解析点。Windows 删除前关闭读取句柄,再复核目标;路径快照能发现观察到的替换,但不提供抵御外部进程在两次检查间交换并恢复目录的绝对保证。知识写入和退役仍共享必需文档锁,分别使用 POSIX `flock` 或 Windows `msvcrt`。受管文件显式按 UTF-8 原样写入换行,确保清单摘要与磁盘字节一致。
102
+
101
103
  <!--
102
104
  日常读取使用当前项目内容,初始化数据不是长期检索索引。
103
105
  -->
@@ -0,0 +1,315 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Tencent Music Entertainment Group
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+
24
+
25
+ Other dependencies and licenses:
26
+
27
+ Open Source Software Licensed under the MIT License:
28
+ --------------------------------------------------------------------
29
+ 1. annotated-doc
30
+ Copyright (c) 2025 Sebastián Ramírez
31
+
32
+ 2. attrs
33
+ Copyright (c) 2015 Hynek Schlawack and the attrs contributors
34
+
35
+ 3. jsonschema
36
+ Copyright (c) 2013 Julian Berman
37
+ Copyright (c) 2012 Julian Berman
38
+
39
+ 4. jsonschema-specifications
40
+ Copyright (c) 2022 Julian Berman
41
+
42
+ 5. markdown-it-py
43
+ Copyright (c) 2020 ExecutableBookProject
44
+ Copyright (c) 2014 Vitaly Puzrin, Alex Kocharin.
45
+
46
+ 6. mdurl
47
+ Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin.
48
+ Copyright (c) 2021 Taneli Hukkinen
49
+ Copyright Joyent, Inc. and other Node contributors. All rights reserved.
50
+
51
+ 7. pyyaml
52
+ Copyright (c) 2017-2021 Ingy döt Net
53
+ Copyright (c) 2006-2016 Kirill Simonov
54
+
55
+ 8. questionary
56
+ Copyright 2020 Tom Bocklisch and contributors
57
+ Copyright 2019 Tom Bocklisch
58
+ Copyright 2018 Oyetoke Toby and contributors
59
+ Copyright 2016 Fink Labs GmbH and inquirerpy contributors
60
+
61
+ 9. referencing
62
+ Copyright (c) 2022 Julian Berman
63
+
64
+ 10. rich
65
+ Copyright (c) 2020 Will McGugan
66
+
67
+ 11. rpds-py
68
+ Copyright (c) 2023 Julian Berman
69
+
70
+ 12. tree-sitter
71
+ Copyright (c) 2019 Max Brunsfeld, GitHub
72
+ Copyright © 1991-2019 Unicode, Inc. All rights reserved.
73
+ Copyright (c) 1995-2016 International Business Machines Corporation and others
74
+ Copyright 2006-2011, the V8 project authors. All rights reserved.
75
+
76
+ 13. tree-sitter-c
77
+ Copyright (c) 2014 Max Brunsfeld
78
+
79
+ 14. tree-sitter-c-sharp
80
+ Copyright (c) 2014-2023 Max Brunsfeld, Damien Guard, Amaan Qureshi, and contributors.
81
+
82
+ 15. tree-sitter-cpp
83
+ Copyright (c) 2014 Max Brunsfeld
84
+
85
+ 16. tree-sitter-go
86
+ Copyright (c) 2014 Max Brunsfeld
87
+
88
+ 17. tree-sitter-java
89
+ Copyright (c) 2017 Ayman Nadeem
90
+
91
+ 18. tree-sitter-javascript
92
+ Copyright (c) 2014 Max Brunsfeld
93
+
94
+ 19. tree-sitter-kotlin
95
+ Copyright (c) 2024 Amaan Qureshi <amaanq12@gmail.com>
96
+
97
+ 20. tree-sitter-php
98
+ Copyright (c) 2017 Josh Vera, GitHub
99
+ Copyright (c) 2019 Max Brunsfeld, Amaan Qureshi, Christian Frøystad, Caleb White
100
+
101
+ 21. tree-sitter-python
102
+ Copyright (c) 2016 Max Brunsfeld
103
+
104
+ 22. tree-sitter-rust
105
+ Copyright (c) 2017 Maxim Sokolov
106
+
107
+ 23. tree-sitter-typescript
108
+ Copyright (c) 2017 Max Brunsfeld
109
+
110
+ 24. typer
111
+ Copyright (c) 2019 Sebastián Ramírez
112
+
113
+ 25. wcwidth
114
+ Copyright (c) 2014 Jeff Quast <contact@jeffquast.com>
115
+
116
+ A copy of the MIT License is included in this file.
117
+
118
+
119
+ Open Source Software Licensed under the BSD 3-Clause License:
120
+ --------------------------------------------------------------------
121
+ 1. click
122
+ Copyright 2014 Pallets
123
+
124
+ 2. colorama
125
+ Copyright (c) 2010 Jonathan Hartley
126
+
127
+ 3. networkx
128
+ Copyright (c) 2004-2025, NetworkX Developers — Aric Hagberg, Dan Schult, Pieter Swart — All rights reserved.
129
+
130
+ 4. prompt-toolkit
131
+ Copyright (c) 2014, Jonathan Slenders
132
+
133
+
134
+ Terms of the BSD 3-Clause License:
135
+ --------------------------------------------------------------------
136
+
137
+ Redistribution and use in source and binary forms, with or without
138
+ modification, are permitted provided that the following conditions are met:
139
+
140
+ 1. Redistributions of source code must retain the above copyright
141
+ notice, this list of conditions and the following disclaimer.
142
+
143
+ 2. Redistributions in binary form must reproduce the above copyright
144
+ notice, this list of conditions and the following disclaimer in the
145
+ documentation and/or other materials provided with the distribution.
146
+
147
+ 3. Neither the name of the copyright holder nor the names of its
148
+ contributors may be used to endorse or promote products derived from
149
+ this software without specific prior written permission.
150
+
151
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
152
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
153
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
154
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
155
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
156
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
157
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
158
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
159
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
160
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
161
+ POSSIBILITY OF SUCH DAMAGE.
162
+
163
+
164
+ Open Source Software Licensed under the BSD 2-Clause License:
165
+ --------------------------------------------------------------------
166
+ 1. pygments
167
+ Copyright (c) 2006-2022 by the respective authors (see AUTHORS file).
168
+
169
+
170
+ Terms of the BSD 2-Clause License:
171
+ --------------------------------------------------------------------
172
+ Redistribution and use in source and binary forms, with or without
173
+ modification, are permitted provided that the following conditions are met:
174
+
175
+ 1. Redistributions of source code must retain the above copyright
176
+ notice, this list of conditions and the following disclaimer.
177
+
178
+ 2. Redistributions in binary form must reproduce the above copyright
179
+ notice, this list of conditions and the following disclaimer in the
180
+ documentation and/or other materials provided with the distribution.
181
+
182
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
183
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
184
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
185
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
186
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
187
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
188
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
189
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
190
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
191
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
192
+ POSSIBILITY OF SUCH DAMAGE.
193
+
194
+
195
+ Open Source Software Licensed under the ISC License:
196
+ --------------------------------------------------------------------
197
+ 1. shellingham
198
+ Copyright (c) 2018, Tzu-ping Chung <uranusjr@gmail.com>
199
+
200
+
201
+ Terms of the ISC License:
202
+ --------------------------------------------------------------------
203
+ Permission to use, copy, modify, and/or distribute this software for any
204
+ purpose with or without fee is hereby granted, provided that the above
205
+ copyright notice and this permission notice appear in all copies.
206
+
207
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
208
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
209
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
210
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
211
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
212
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
213
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
214
+
215
+
216
+ Open Source Software Licensed under the PSF License Agreement:
217
+ --------------------------------------------------------------------
218
+ 1. typing-extensions
219
+ Copyright (c) 1991-1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands. All rights reserved.
220
+ Copyright (c) 2001-2023 Python Software Foundation; All Rights Reserved
221
+ Copyright (c) 1995-2001 Corporation for National Research Initiatives; All Rights Reserved
222
+
223
+
224
+ Terms of the PSF License Agreement:
225
+ --------------------------------------------------------------------
226
+ PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
227
+ --------------------------------------------
228
+
229
+ 1. This LICENSE AGREEMENT is between the Python Software Foundation
230
+ ("PSF"), and the Individual or Organization ("Licensee") accessing and
231
+ otherwise using this software ("Python") in source or binary form and
232
+ its associated documentation.
233
+
234
+ 2. Subject to the terms and conditions of this License Agreement, PSF hereby
235
+ grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
236
+ analyze, test, perform and/or display publicly, prepare derivative works,
237
+ distribute, and otherwise use Python alone or in any derivative version,
238
+ provided, however, that PSF's License Agreement and PSF's notice of copyright,
239
+ i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
240
+ 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021,
241
+ 2022, 2023 Python Software Foundation; All Rights Reserved" are retained in
242
+ Python alone or in any derivative version prepared by Licensee.
243
+
244
+ 3. In the event Licensee prepares a derivative work that is based on
245
+ or incorporates Python or any part thereof, and wants to make
246
+ the derivative work available to others as provided herein, then
247
+ Licensee hereby agrees to include in any such work a brief summary of
248
+ the changes made to Python.
249
+
250
+ 4. PSF is making Python available to Licensee on an "AS IS"
251
+ basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
252
+ IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
253
+ DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
254
+ FOR ANY PARTICULAR PURPOSE OR THAT PYTHON WILL NOT INFRINGE ANY
255
+ THIRD PARTY RIGHTS.
256
+
257
+ 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
258
+ FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
259
+ A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
260
+ OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
261
+
262
+ 6. This License Agreement will automatically terminate upon a material
263
+ breach of its terms and conditions.
264
+
265
+ 7. Nothing in this License Agreement shall be deemed to create any
266
+ relationship of agency, partnership, or joint venture between PSF and
267
+ Licensee. This License Agreement does not grant permission to use PSF
268
+ trademarks or trade name in a trademark sense to endorse or promote
269
+ products or services of Licensee, or any third party.
270
+
271
+ 8. By copying, installing or otherwise using Python, Licensee
272
+ agrees to be bound by the terms and conditions of this License
273
+ Agreement.
274
+
275
+ CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.5.2
276
+ Copyright (c) 1991-1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands.
277
+ All rights reserved.
278
+
279
+ Permission to use, copy, modify, and distribute this software and its
280
+ documentation for any purpose and without fee is hereby granted, provided that
281
+ the above copyright notice appear in all copies and that both that copyright
282
+ notice and this permission notice appear in supporting documentation, and that
283
+ the names of Stichting Mathematisch Centrum or CWI or Corporation for National
284
+ Research Initiatives or Python Software Foundation not be used in advertising or
285
+ publicity pertaining to distribution of the software without specific, written
286
+ prior permission.
287
+
288
+ STICHTING MATHEMATISCH CENTRUM AND CORPORATION FOR NATIONAL RESEARCH INITIATIVES
289
+ DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
290
+ WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING
291
+ MATHEMATISCH CENTRUM OR CORPORATION FOR NATIONAL RESEARCH INITIATIVES BE LIABLE
292
+ FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
293
+ RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
294
+ NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
295
+ OR PERFORMANCE OF THIS SOFTWARE.
296
+
297
+ CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
298
+ Copyright (c) 1995-2001, Corporation for National Research Initiatives.
299
+ All rights reserved.
300
+
301
+ Permission to use, copy, modify, and distribute this software and its
302
+ documentation for any purpose and without fee is hereby granted, provided that
303
+ the above copyright notice appear in all copies and that both that copyright
304
+ notice and this permission notice appear in supporting documentation, and that
305
+ the name of Corporation for National Research Initiatives not be used in
306
+ advertising or publicity pertaining to distribution of the software without
307
+ specific, written prior permission.
308
+
309
+ CORPORATION FOR NATIONAL RESEARCH INITIATIVES DISCLAIMS ALL WARRANTIES WITH
310
+ REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
311
+ FITNESS, IN NO EVENT SHALL CORPORATION FOR NATIONAL RESEARCH INITIATIVES BE
312
+ LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
313
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
314
+ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
315
+ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: openmodus
3
- Version: 0.0.4
3
+ Version: 0.0.6
4
4
  Summary: 为编程助手构建有证据支撑、可持续维护的项目知识。
5
5
  Author: Modus contributors
6
6
  License-Expression: MIT
@@ -31,9 +31,11 @@ Requires-Dist: tree-sitter-go<0.26,>=0.23
31
31
  Requires-Dist: tree-sitter-java<0.25,>=0.23
32
32
  Requires-Dist: tree-sitter-javascript<0.26,>=0.23
33
33
  Requires-Dist: tree-sitter-kotlin<2.0,>=1.0
34
+ Requires-Dist: tree-sitter-objc<4.0,>=3.0.2
34
35
  Requires-Dist: tree-sitter-php<0.25,>=0.23
35
36
  Requires-Dist: tree-sitter-python<0.26,>=0.23
36
37
  Requires-Dist: tree-sitter-rust<0.25,>=0.23
38
+ Requires-Dist: tree-sitter-swift<0.8,>=0.7.3
37
39
  Requires-Dist: tree-sitter-typescript<0.25,>=0.23
38
40
  Requires-Dist: tree-sitter<0.26,>=0.23.0
39
41
  Requires-Dist: typer<0.26,>=0.12.0
@@ -257,6 +259,10 @@ Python、Java、Go、C/C++ 和 TypeScript 可以在结构证据之上使用本
257
259
  <img src="https://img.shields.io/badge/Astro%20%2F%20Svelte-template-FF5D01?logo=astro&logoColor=white" alt="Astro and Svelte templates" />
258
260
  </p>
259
261
 
262
+ Objective-C、Objective-C++ 和 Swift 提供专门结构提取:保留 OC selector/category/protocol、Swift 扩展与参数标签,并按内容区分 `.h`。Objective-C++ 分别恢复 OC 与 C++ 结构,明确标为部分覆盖;Kotlin 补充包、导入、扩展函数与 Compose 尾随闭包,C++ 补充命名空间、头文件声明与模板调用。日常检索也覆盖 `.m`、`.mm`、`.hh`、`.hxx`。
263
+
264
+ 这些结构证据不等于 Xcode/Swift/Kotlin 编译语义;不自动解析全部构建变体、宏展开或 IDL/JNI 跨语言桥接。原生和 Kotlin 取证适配会指导 Agent 核对生成来源、注册、Action/State 与端侧生命周期,缺失关系保留为候选或未解析。
265
+
260
266
  其余已登记的源码、模板、配置、数据定义和文档格式仍会进入有界通用证据流程。Modus 会如实保留覆盖缺口,而不会因为某个 Provider 缺失就断言仓库没有业务行为。
261
267
 
262
268
  ### 为什么选择 Modus
@@ -208,6 +208,10 @@ Python、Java、Go、C/C++ 和 TypeScript 可以在结构证据之上使用本
208
208
  <img src="https://img.shields.io/badge/Astro%20%2F%20Svelte-template-FF5D01?logo=astro&logoColor=white" alt="Astro and Svelte templates" />
209
209
  </p>
210
210
 
211
+ Objective-C、Objective-C++ 和 Swift 提供专门结构提取:保留 OC selector/category/protocol、Swift 扩展与参数标签,并按内容区分 `.h`。Objective-C++ 分别恢复 OC 与 C++ 结构,明确标为部分覆盖;Kotlin 补充包、导入、扩展函数与 Compose 尾随闭包,C++ 补充命名空间、头文件声明与模板调用。日常检索也覆盖 `.m`、`.mm`、`.hh`、`.hxx`。
212
+
213
+ 这些结构证据不等于 Xcode/Swift/Kotlin 编译语义;不自动解析全部构建变体、宏展开或 IDL/JNI 跨语言桥接。原生和 Kotlin 取证适配会指导 Agent 核对生成来源、注册、Action/State 与端侧生命周期,缺失关系保留为候选或未解析。
214
+
211
215
  其余已登记的源码、模板、配置、数据定义和文档格式仍会进入有界通用证据流程。Modus 会如实保留覆盖缺口,而不会因为某个 Provider 缺失就断言仓库没有业务行为。
212
216
 
213
217
  ### 为什么选择 Modus
@@ -208,6 +208,10 @@ Python, Java, Go, C/C++, and TypeScript can add local compiler or type-checker o
208
208
  <img src="https://img.shields.io/badge/Astro%20%2F%20Svelte-template-FF5D01?logo=astro&logoColor=white" alt="Astro and Svelte templates" />
209
209
  </p>
210
210
 
211
+ Objective-C, Objective-C++, and Swift have dedicated structural extraction, including OC selectors/categories/protocols, Swift extensions and argument labels, and content-based `.h` dispatch. Objective-C++ combines separate OC and C++ observations with explicit partial coverage. Kotlin adds packages, imports, extension functions, and Compose trailing closures; C++ adds namespaces, header declarations, and template calls. Ordinary source retrieval also includes `.m`, `.mm`, `.hh`, and `.hxx`.
212
+
213
+ These observations are not Xcode, Swift, or Kotlin compiler semantics. They do not automatically resolve every build variant, macro expansion, or IDL/JNI bridge. Native and Kotlin evidence guides direct agents to verify generated origins, registrations, Action/State flows, and client lifecycles; missing relations remain candidate or unresolved evidence.
214
+
211
215
  Other registered source, template, configuration, data-definition, and document formats still enter a bounded generic-evidence path. Modus preserves coverage gaps instead of interpreting a missing provider as proof that the repository has no business behavior.
212
216
 
213
217
  ### Why choose Modus
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openmodus"
3
- version = "0.0.4"
3
+ version = "0.0.6"
4
4
  description = "为编程助手构建有证据支撑、可持续维护的项目知识。"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -51,6 +51,8 @@ dependencies = [
51
51
  "tree-sitter-cpp>=0.23,<0.25",
52
52
  "tree-sitter-c-sharp>=0.23,<0.25",
53
53
  "tree-sitter-kotlin>=1.0,<2.0",
54
+ "tree-sitter-objc>=3.0.2,<4.0",
55
+ "tree-sitter-swift>=0.7.3,<0.8",
54
56
  "tree-sitter-php>=0.23,<0.25",
55
57
  ]
56
58
 
@@ -226,6 +228,10 @@ module = [
226
228
  "modus.machine.facts.native_binding",
227
229
  "modus.machine.facts.native_parser",
228
230
  "modus.machine.facts.native_visitor",
231
+ "modus.machine.facts.native_objc",
232
+ "modus.machine.facts.native_swift",
233
+ "modus.machine.facts.native_cpp",
234
+ "modus.machine.facts.native_kotlin",
229
235
  ]
230
236
  disallow_any_generics = false
231
237
  disallow_untyped_calls = false
@@ -183,6 +183,10 @@ PACKAGE_BOUNDARIES = (
183
183
  "modus/machine/facts/build_resolvers/python_resolver.py",
184
184
  "modus/machine/facts/build_resolvers/typescript_resolver.py",
185
185
  "modus/machine/facts/extension_registry.py",
186
+ "modus/machine/facts/native_objc.py",
187
+ "modus/machine/facts/native_swift.py",
188
+ "modus/machine/facts/native_cpp.py",
189
+ "modus/machine/facts/native_kotlin.py",
186
190
  "modus/machine/facts/frontend.py",
187
191
  "modus/machine/facts/frontend_frameworks.py",
188
192
  "modus/machine/facts/frontend_routes.py",
@@ -463,6 +463,18 @@ def exercise_installed_wheel(wheel: Path) -> RuntimeVerification:
463
463
  _exercise_authoring_contract()
464
464
  project_root = workspace / "project"
465
465
  project_root.mkdir()
466
+ from modus.machine.corpus.source_snapshot import SourceSnapshot
467
+ from modus.machine.facts.structural import _get_extractor
468
+
469
+ for name, source in {
470
+ "View.m": "@implementation View\n- (void)run {}\n@end",
471
+ "View.mm": "@implementation View\n- (void)run {}\n@end",
472
+ "View.swift": "class View { func run() {} }",
473
+ "View.kt": "class View { fun run() {} }",
474
+ }.items():
475
+ path = project_root / name
476
+ facts = _get_extractor(path)(SourceSnapshot(path, source))
477
+ require(bool(facts.get("declarations")), f"安装后的语言解析不可用:{name}")
466
478
  (project_root / "main.py").write_text(SAMPLE_SOURCE, encoding="utf-8")
467
479
  project = SmokeProject(project_root, app, CliRunner())
468
480
 
@@ -8,6 +8,6 @@ convenience namespace with an accidental compatibility burden.
8
8
 
9
9
  from typing import Final
10
10
 
11
- __version__: Final = "0.0.4"
11
+ __version__: Final = "0.0.6"
12
12
 
13
13
  __all__ = ["__version__"]
@@ -33,6 +33,9 @@ import yaml
33
33
 
34
34
  from .atomic_writes import (
35
35
  AtomicWriteIntegrityError,
36
+ _assert_portable_atomic_parent,
37
+ _ensure_portable_atomic_parent,
38
+ _is_link_or_reparse,
36
39
  atomic_create_text,
37
40
  atomic_write_chunks,
38
41
  atomic_write_text,
@@ -346,22 +349,21 @@ def file_lock(lock_path: str | Path) -> Iterator[None]:
346
349
  handle.close(fcntl, preserve_inherited=True)
347
350
 
348
351
 
349
- def _assert_portable_lock_binding(path: Path, descriptor: int) -> None:
352
+ def _assert_portable_lock_binding(
353
+ path: Path,
354
+ descriptor: int,
355
+ parent_snapshot: tuple[tuple[int, int], ...] | None = None,
356
+ ) -> None:
350
357
  """Validate the regular-file binding used by the native Windows backend."""
351
- current = Path(path.anchor)
352
358
  try:
353
- for part in path.parent.parts[1:]:
354
- current = current / part
355
- info = os.stat(current, follow_symlinks=False)
356
- if stat.S_ISLNK(info.st_mode) or not stat.S_ISDIR(info.st_mode):
357
- raise FileLockIntegrityError(f"写锁父路径不是实际目录: {current}")
359
+ _assert_portable_atomic_parent(path.parent, parent_snapshot)
358
360
  opened = os.fstat(descriptor)
359
361
  named = os.stat(path, follow_symlinks=False)
360
362
  except FileLockIntegrityError:
361
363
  raise
362
364
  except (OSError, TypeError, NotImplementedError) as exc:
363
365
  raise FileLockIntegrityError(f"写锁不安全或不可用: {path}: {exc}") from exc
364
- if stat.S_ISLNK(named.st_mode) or not stat.S_ISREG(named.st_mode):
366
+ if _is_link_or_reparse(named) or not stat.S_ISREG(named.st_mode):
365
367
  raise FileLockIntegrityError(f"写锁必须为常规文件: {path}")
366
368
  if not stat.S_ISREG(opened.st_mode) or (
367
369
  opened.st_dev,
@@ -374,21 +376,24 @@ def _assert_portable_lock_binding(path: Path, descriptor: int) -> None:
374
376
  def _windows_required_file_lock(lock_path: str | Path, msvcrt_module: Any) -> Iterator[None]:
375
377
  """Acquire a mandatory one-byte Windows file lock without shell tooling."""
376
378
  path = _absolute_lock_path(lock_path)
377
- path.parent.mkdir(parents=True, exist_ok=True)
379
+ try:
380
+ parents = _ensure_portable_atomic_parent(path.parent)
381
+ except OSError as exc:
382
+ raise FileLockIntegrityError(f"写锁父路径不安全或不可用: {path}: {exc}") from exc
378
383
  flags = os.O_RDWR | os.O_CREAT | getattr(os, "O_BINARY", 0) | getattr(os, "O_NOINHERIT", 0)
379
384
  descriptor = os.open(path, flags, 0o600)
380
385
  locked = False
381
386
  try:
382
- _assert_portable_lock_binding(path, descriptor)
387
+ _assert_portable_lock_binding(path, descriptor, parents)
383
388
  if os.fstat(descriptor).st_size == 0:
384
389
  os.write(descriptor, b"\0")
385
390
  os.fsync(descriptor)
386
391
  os.lseek(descriptor, 0, os.SEEK_SET)
387
392
  msvcrt_module.locking(descriptor, msvcrt_module.LK_LOCK, 1)
388
393
  locked = True
389
- _assert_portable_lock_binding(path, descriptor)
394
+ _assert_portable_lock_binding(path, descriptor, parents)
390
395
  yield
391
- _assert_portable_lock_binding(path, descriptor)
396
+ _assert_portable_lock_binding(path, descriptor, parents)
392
397
  finally:
393
398
  if locked:
394
399
  os.lseek(descriptor, 0, os.SEEK_SET)
@@ -6,6 +6,7 @@
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
+ import ast
9
10
  import re
10
11
  from collections import defaultdict
11
12
  from io import StringIO
@@ -161,17 +162,33 @@ def _parameter_hint(error: click.BadParameter) -> str:
161
162
  # 捕获的路径和取值直接带回,避免翻译改变可操作的信息。
162
163
  def _parser_detail(message: str) -> str:
163
164
  """仅适配框架固定句式;动态值原样保留,避免误改文件名和用户输入。"""
165
+ # Click 对路径使用 repr;Windows 的反斜线和文件名中的引号需按字符串字面量还原。
166
+ descriptions = {
167
+ "does not exist": "路径不存在",
168
+ "is not a directory": "路径不是目录",
169
+ "is a file": "路径不是目录",
170
+ "is not a file": "路径不是文件",
171
+ "is a directory": "路径不是文件",
172
+ "is not readable": "路径不可读",
173
+ "is not writable": "路径不可写",
174
+ "is not executable": "路径不可执行",
175
+ }
176
+ for suffix, description in descriptions.items():
177
+ match = re.fullmatch(rf"(?:Directory|File|Path) (.+) {re.escape(suffix)}\.", message)
178
+ if match is None:
179
+ continue
180
+ try:
181
+ path = ast.literal_eval(match[1])
182
+ except (SyntaxError, ValueError):
183
+ return message
184
+ if isinstance(path, str):
185
+ return f"{description}:{path}"
164
186
  patterns = (
165
187
  (r"No such command '(.*)'\.", r"未知命令:\1。"),
166
188
  (r"Option '(.*)' requires an argument\.", r"选项 \1 缺少参数值。"),
167
189
  (r"Got unexpected extra argument(?:s)? \((.*)\)", r"存在多余参数:\1"),
168
190
  (r"'(.*)' is not a valid integer\.", r"\1 不是有效整数。"),
169
191
  (r"'(.*)' is not a valid float\.", r"\1 不是有效数值。"),
170
- (r"(?:Directory|File|Path) '(.*)' does not exist\.", r"路径不存在:\1"),
171
- (r"(?:Directory|File|Path) '(.*)' is not a directory\.", r"路径不是目录:\1"),
172
- (r"(?:Directory|File|Path) '(.*)' is not a file\.", r"路径不是文件:\1"),
173
- (r"(?:Directory|File|Path) '(.*)' is not readable\.", r"路径不可读:\1"),
174
- (r"(?:Directory|File|Path) '(.*)' is not writable\.", r"路径不可写:\1"),
175
192
  (r"'(.*)' is not one of (.*)\.", r"\1 不在可选值中:\2。"),
176
193
  (r"(.*) is not in the range (.*)\.", r"\1 不在允许范围内:\2。"),
177
194
  )