kaiten-cli 0.3.3__tar.gz → 0.3.5__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 (200) hide show
  1. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/.gitignore +1 -0
  2. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/AGENTS.md +5 -0
  3. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/API_BEHAVIOR_MATRIX.md +10 -3
  4. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/ARCHITECTURE.md +26 -1
  5. kaiten_cli-0.3.5/LICENSE +21 -0
  6. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/LIVE_VALIDATION.md +9 -5
  7. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/PKG-INFO +115 -23
  8. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/README.md +111 -22
  9. kaiten_cli-0.3.5/docs/DOCUMENT_YJS_VERIFICATION.md +199 -0
  10. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/docs/LOCALIZATION_VERIFICATION.md +4 -0
  11. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/docs/PYPI_PUBLISHING.md +62 -22
  12. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/docs/RESTRICTIONS_VERIFICATION.md +4 -0
  13. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/docs/public-api/README.md +5 -1
  14. kaiten_cli-0.3.5/js/document-yjs/README.md +51 -0
  15. kaiten_cli-0.3.5/js/document-yjs/build.mjs +25 -0
  16. kaiten_cli-0.3.5/js/document-yjs/cli.mjs +30 -0
  17. kaiten_cli-0.3.5/js/document-yjs/core.mjs +171 -0
  18. kaiten_cli-0.3.5/js/document-yjs/export-schemas.cjs +37 -0
  19. kaiten_cli-0.3.5/js/document-yjs/package-lock.json +957 -0
  20. kaiten_cli-0.3.5/js/document-yjs/package.json +19 -0
  21. kaiten_cli-0.3.5/js/document-yjs/schemas.json +1 -0
  22. kaiten_cli-0.3.5/js/document-yjs/test/live-holder.mjs +64 -0
  23. kaiten_cli-0.3.5/js/document-yjs/test/sync.test.mjs +221 -0
  24. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/pyproject.toml +5 -0
  25. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/scripts/check_locales.py +1 -0
  26. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/scripts/check_release.py +10 -0
  27. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/skills/kaiten-cli-mutations/SKILL.md +17 -0
  28. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/__init__.py +1 -1
  29. kaiten_cli-0.3.5/src/kaiten_cli/assets/document_yjs.cjs +16 -0
  30. kaiten_cli-0.3.5/src/kaiten_cli/assets/document_yjs.cjs.LEGAL.txt +15 -0
  31. kaiten_cli-0.3.5/src/kaiten_cli/assets/document_yjs.cjs.LICENSES.txt +323 -0
  32. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/locales/ru.json +27 -1
  33. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/documents.py +35 -4
  34. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/behaviors.py +4 -1
  35. kaiten_cli-0.3.5/src/kaiten_cli/runtime/support/document_sync.py +252 -0
  36. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/documents.py +36 -0
  37. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/trace.py +3 -0
  38. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/live/test_sandbox_live_full.py +1 -0
  39. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_cli_smoke.py +2 -2
  40. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_docs_structure.py +3 -1
  41. kaiten_cli-0.3.5/tests/test_document_sync.py +444 -0
  42. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_documents_and_tree.py +1 -0
  43. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_release.py +27 -3
  44. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/SECURITY.md +0 -0
  45. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/docs/public-api/automation-tables.json +0 -0
  46. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/docs/public-api/contracts.json +0 -0
  47. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/docs/public-api/coverage.json +0 -0
  48. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/docs/public-api/decisions.json +0 -0
  49. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/scripts/audit_public_api.py +0 -0
  50. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/scripts/benchmark_reference_workflows.py +0 -0
  51. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/scripts/extract_automation_docs.cjs +0 -0
  52. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/scripts/generate_reference_docs.py +0 -0
  53. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/scripts/normalize_automation_docs.py +0 -0
  54. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/skills/kaiten-cli-heavy-data/SKILL.md +0 -0
  55. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/skills/kaiten-cli-metrics/SKILL.md +0 -0
  56. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/__main__.py +0 -0
  57. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/agent_gateway.py +0 -0
  58. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/app.py +0 -0
  59. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/completion.py +0 -0
  60. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/discovery.py +0 -0
  61. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/errors.py +0 -0
  62. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/i18n.py +0 -0
  63. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/localized_click.py +0 -0
  64. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/models.py +0 -0
  65. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/profiles.py +0 -0
  66. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/__init__.py +0 -0
  67. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/addons.py +0 -0
  68. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/audit_and_analytics.py +0 -0
  69. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/automation_schema.py +0 -0
  70. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/automation_schemas.json +0 -0
  71. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/automations.py +0 -0
  72. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/base.py +0 -0
  73. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/blockers.py +0 -0
  74. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/boards.py +0 -0
  75. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/card_relations.py +0 -0
  76. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/card_types.py +0 -0
  77. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/cards.py +0 -0
  78. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/charts.py +0 -0
  79. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/checklists.py +0 -0
  80. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/columns.py +0 -0
  81. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/comments.py +0 -0
  82. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/custom_directories.py +0 -0
  83. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/custom_properties.py +0 -0
  84. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/dashboards.py +0 -0
  85. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/external_links.py +0 -0
  86. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/files.py +0 -0
  87. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/github_addon.py +0 -0
  88. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/iterations.py +0 -0
  89. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/lanes.py +0 -0
  90. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/live_contracts.py +0 -0
  91. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/members.py +0 -0
  92. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/module_docs.py +0 -0
  93. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/projects.py +0 -0
  94. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/query.py +0 -0
  95. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/restrictions.py +0 -0
  96. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/roles_and_groups.py +0 -0
  97. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/scim.py +0 -0
  98. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/service_desk.py +0 -0
  99. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/snapshot.py +0 -0
  100. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/spaces.py +0 -0
  101. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/subscribers.py +0 -0
  102. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/tags.py +0 -0
  103. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/time_logs.py +0 -0
  104. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/tree.py +0 -0
  105. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/utilities.py +0 -0
  106. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/registry/webhooks.py +0 -0
  107. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/__init__.py +0 -0
  108. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/automation_validation.py +0 -0
  109. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/cache.py +0 -0
  110. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/client.py +0 -0
  111. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/endpoints.py +0 -0
  112. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/executor.py +1 -1
  113. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/fs_security.py +0 -0
  114. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/input.py +0 -0
  115. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/output.py +0 -0
  116. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/public_validation.py +0 -0
  117. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/snapshot_build.py +0 -0
  118. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/snapshot_common.py +0 -0
  119. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/snapshot_query.py +0 -0
  120. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/snapshot_store.py +0 -0
  121. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/snapshots.py +0 -0
  122. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/sqlite_errors.py +0 -0
  123. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/__init__.py +0 -0
  124. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/addons.py +0 -0
  125. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/audit.py +0 -0
  126. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/batch.py +0 -0
  127. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/card_move_url.py +0 -0
  128. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/cards.py +0 -0
  129. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/checklists.py +0 -0
  130. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/company_users.py +0 -0
  131. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/dashboards.py +0 -0
  132. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/files.py +0 -0
  133. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/markdown_export.py +0 -0
  134. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/pagination.py +0 -0
  135. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/projects.py +0 -0
  136. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/relations.py +0 -0
  137. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/restrictions.py +0 -0
  138. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/spaces.py +0 -0
  139. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/time_logs.py +0 -0
  140. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/tree.py +0 -0
  141. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/support/tree_sharing.py +0 -0
  142. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/runtime/transforms.py +0 -0
  143. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/schema_docs.py +0 -0
  144. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/src/kaiten_cli/update_check.py +0 -0
  145. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/conftest.py +0 -0
  146. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/data/mcp_aliases.txt +0 -0
  147. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/live/conftest.py +0 -0
  148. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/live/test_automation_contract.py +0 -0
  149. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/live/test_restrictions_live.py +0 -0
  150. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_addons_and_github_addon.py +0 -0
  151. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_agent_gateway.py +0 -0
  152. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_audit_and_analytics.py +0 -0
  153. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_automation_schemas.py +0 -0
  154. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_card_types_and_custom_properties.py +0 -0
  155. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_cards_move_by_url.py +0 -0
  156. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_charts.py +0 -0
  157. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_column_settings.py +0 -0
  158. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_command_resolution.py +0 -0
  159. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_completion_tail.py +0 -0
  160. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_dashboards.py +0 -0
  161. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_developer_parity_gaps.py +0 -0
  162. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_discovery.py +0 -0
  163. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_domain_expansion.py +0 -0
  164. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_entrypoints.py +0 -0
  165. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_executor_architecture.py +0 -0
  166. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_executor_http.py +0 -0
  167. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_file_downloads.py +0 -0
  168. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_file_uploads.py +0 -0
  169. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_fs_security.py +0 -0
  170. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_generated_docs.py +0 -0
  171. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_input_parsing.py +0 -0
  172. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_investigation_workflows.py +0 -0
  173. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_iterations.py +0 -0
  174. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_live_contracts.py +0 -0
  175. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_local_snapshots.py +0 -0
  176. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_localization.py +0 -0
  177. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_markdown_export.py +0 -0
  178. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_narrow_list_fields.py +0 -0
  179. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_output_human.py +0 -0
  180. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_output_json.py +0 -0
  181. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_pagination.py +0 -0
  182. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_private_files.py +0 -0
  183. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_profiles.py +0 -0
  184. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_public_api_cutover.py +0 -0
  185. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_public_contract_parity.py +0 -0
  186. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_public_input_transport.py +0 -0
  187. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_rate_limit_policy.py +0 -0
  188. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_registry_examples.py +0 -0
  189. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_restrictions.py +0 -0
  190. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_roles_groups_and_subscribers.py +0 -0
  191. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_runtime_cache.py +0 -0
  192. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_service_desk.py +0 -0
  193. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_shell_completion.py +0 -0
  194. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_skills_structure.py +0 -0
  195. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_timeout_policy.py +0 -0
  196. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_transforms.py +0 -0
  197. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_tree_entity_sharing.py +0 -0
  198. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_update_check.py +0 -0
  199. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_utilities_remainder.py +0 -0
  200. {kaiten_cli-0.3.3 → kaiten_cli-0.3.5}/tests/test_webhooks_and_automations.py +0 -0
@@ -12,6 +12,7 @@ htmlcov/
12
12
  .bin/
13
13
  .pipx/
14
14
  .uv-tools/
15
+ node_modules/
15
16
  build/
16
17
  dist/
17
18
  *.egg-info/
@@ -5,6 +5,10 @@ This file only captures agent-specific guidance.
5
5
  For install, human-oriented usage, and the full docs map, start with [README.md](README.md).
6
6
  For the full command catalog, use [COMMAND_REFERENCE.md](COMMAND_REFERENCE.md).
7
7
  For the system map, use [ARCHITECTURE.md](ARCHITECTURE.md).
8
+ For the PyPI publishing process, use [docs/PYPI_PUBLISHING.md](docs/PYPI_PUBLISHING.md).
9
+ For a stable install, start with `pip install kaiten-cli`; pipx and uv are alternatives.
10
+ Use a Git install when the requested source is a branch or tag. Check the installed
11
+ version separately from the checkout: they can differ.
8
12
  For optimized LLM workflows, start with:
9
13
 
10
14
  - [skills/kaiten-cli-heavy-data/SKILL.md](skills/kaiten-cli-heavy-data/SKILL.md)
@@ -95,3 +99,4 @@ kaiten profile add main --domain <company-subdomain-or-url> --token <api-token>
95
99
  - Attaching a PR to a card usually means the GitHub addon, not `external-links create`; check both sources when looking for every PR a card references.
96
100
  - The GitHub addon UUID is derived from its mount path only on on-premises Kaiten; elsewhere it is random. `addons uid` returns the derived guess, `space-addons list` and `company-addons list` return the real one, and the `github-addon` commands re-resolve it from the card's space when the guess finds no data.
97
101
  - Live validation is opt-in and documented in [LIVE_VALIDATION.md](LIVE_VALIDATION.md).
102
+ - For installations without the verified server-side API fix, document content updates should use the explicitly selected temporary compatibility fallback `documents update --content-mode yjs` (requires an existing Node.js 20+). It is a future removal candidate, not deprecated; see the retirement criteria in `docs/DOCUMENT_YJS_VERIFICATION.md`. API replacement of `data`/`text` is blocked without `--allow-unsafe-content-replace` because synchronization with an open editor may duplicate the entire document. Never treat this flag as an automatic fallback after a failed Yjs update; an unacknowledged write may already have been saved.
@@ -8,18 +8,25 @@
8
8
 
9
9
  | Поле | Значение |
10
10
  |------|----------|
11
- | Contract baseline | `kaiten-cli v0.1.23` |
11
+ | Исторический contract baseline | `kaiten-cli v0.1.23` |
12
12
  | Tenant class | Kaiten sandbox test tenant |
13
- | Текущий аудит | `2026-07-09`; live suite **не запускался** |
13
+ | Последний зафиксированный аудит | `2026-07-09`; live suite **не запускался** |
14
14
  | Последняя полная live campaign | `TBD`: дата и commit не подтверждены в репозитории |
15
- | Источник до следующего live run | checked-in contracts и `tests/live/`; записи ниже нельзя считать повторно подтверждёнными текущим аудитом |
15
+ | Источник до следующего live run | checked-in contracts и `tests/live/`; записи ниже не являются свежей live-проверкой текущего выпуска |
16
16
 
17
17
  После следующей полной live campaign эту таблицу нужно обновить точными датой, commit SHA, версией CLI и tenant class. Secrets, tenant URL и идентификаторы тестовых сущностей сюда не записываются.
18
18
 
19
+ Публикация новой версии CLI и успешный offline CI не меняют дату или статус
20
+ исторической live-проверки. Текущий command surface задаёт реестр CLI.
21
+
19
22
  ## Default rule
20
23
 
21
24
  Все canonical команды из registry, которые не перечислены ниже, считаются `live_passed`: они должны проходить по normal success-path в полном live suite.
22
25
 
26
+ Это правило интерпретации закодированной матрицы и ожидаемого success-path,
27
+ а не свидетельство нового прогона каждой команды. Для добавленных позднее команд
28
+ сохраняется явный статус `live_not_validated` до фактической live-проверки.
29
+
23
30
  ## Validated success-path contracts with special notes
24
31
 
25
32
  | Command | Verb / Path | Status | Notes |
@@ -111,6 +111,30 @@ Git URL, and installer commands are passed directly to `subprocess` without a
111
111
  shell. A confirmed update is a separate local side effect and does not alter the
112
112
  already completed Kaiten command.
113
113
 
114
+ PyPI installations do not use this post-command check. They are updated manually
115
+ through the same installer: pip, pipx, or uv. Git installations retain their Git
116
+ source; the updater does not migrate them to PyPI.
117
+
118
+ ## Packaging and Releases
119
+
120
+ Hatchling builds the Python 3.11+ wheel and sdist from `pyproject.toml`; the package
121
+ version comes from `src/kaiten_cli/__init__.py`. Stable installations use PyPI;
122
+ Git installations can follow a branch or a specific tag.
123
+
124
+ Pushing a stable `vX.Y.Z` tag runs release preflight, the full reusable CI and then
125
+ the PyPI upload. Preflight checks the tag/version, triggering commit, ancestry in
126
+ `origin/master` and absence of the version on PyPI. CI checks both archives and
127
+ their installation; the upload job publishes those same artifacts without a rebuild.
128
+ PRs and ordinary `master` pushes run CI without uploading.
129
+
130
+ The upload uses Trusted Publishing through the GitHub environment `pypi`, which
131
+ allows only tags matching `v*`. Only the upload job has `id-token: write`; no
132
+ long-lived PyPI API token is stored in the repository. See the
133
+ [publishing guide](docs/PYPI_PUBLISHING.md) for setup, release and readback steps.
134
+
135
+ The PyPI project description is packaged from README at build time. Updating the
136
+ repository docs does not replace metadata in an already published release.
137
+
114
138
  ## Mutation Safety
115
139
 
116
140
  - Transport retries are limited to safe HTTP methods. An ambiguous timeout, connection failure, HTTP 5xx, or malformed successful response for a remote mutation is returned without retry and explicitly tells the caller to verify remote state.
@@ -164,6 +188,7 @@ Primary docs:
164
188
  - [README.md](README.md) for install, usage, config, and operator guidance
165
189
  - [COMMAND_REFERENCE.md](COMMAND_REFERENCE.md) for the full generated command catalog
166
190
  - [AGENTS.md](AGENTS.md) for agent-specific usage and safety shortcuts
191
+ - [docs/PYPI_PUBLISHING.md](docs/PYPI_PUBLISHING.md) for PyPI setup, release and verification
167
192
  - `skills/` for repo-local LLM workflows in `SKILL.md` format
168
193
  - [LIVE_VALIDATION.md](LIVE_VALIDATION.md) for live test process
169
194
  - [API_BEHAVIOR_MATRIX.md](API_BEHAVIOR_MATRIX.md) for documented sandbox contracts
@@ -175,7 +200,7 @@ Primary docs:
175
200
 
176
201
  - The manual registry is easy to inspect, but large and maintenance-heavy.
177
202
  - Runtime behaviors are now explicit, but still centralized in one behavior module.
178
- - Request-scoped cache is built in, but persistent cache deliberately stays conservative and opt-in.
203
+ - Request-scoped cache is built in; persistent cache defaults to `auto` with adaptive TTLs. Freshness overrides remain explicit.
179
204
  - Snapshot refresh is still rebuild-oriented in v1; there is no incremental sync yet.
180
205
  - Local metric semantics are still generic; tenant-specific flow profiles are intentionally deferred.
181
206
  - The default local card path is intentionally summary-first to reduce token and payload cost before LLM involvement.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Viktor Ognev
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.
@@ -6,11 +6,14 @@
6
6
 
7
7
  ## Статус проверки
8
8
 
9
- - На `2026-07-09` в рамках текущего аудита live suite **не запускался**.
10
- - Текущий contract baseline — `kaiten-cli v0.1.23`; tenant class ранее зафиксированных контрактов — Kaiten sandbox test tenant.
9
+ - В последнем зафиксированном аудите от `2026-07-09` live suite **не запускался**.
10
+ - Исторический contract baseline — `kaiten-cli v0.1.23`; tenant class ранее зафиксированных контрактов — Kaiten sandbox test tenant.
11
11
  - Дата и commit последней полной live campaign не подтверждены в репозитории и остаются `TBD`.
12
12
  - До нового запуска [API_BEHAVIOR_MATRIX.md](API_BEHAVIOR_MATRIX.md) описывает ранее наблюдавшиеся и закодированные контракты, а не свежую проверку production или sandbox API.
13
13
 
14
+ Версия baseline и дата аудита относятся к истории live-проверок, а не к текущему
15
+ выпуску CLI. Успешный CI и публикация пакета в PyPI не обновляют эти свидетельства.
16
+
14
17
  После каждой полной campaign нужно записать в оба документа дату, commit SHA, версию CLI и tenant class, не сохраняя credentials, tenant URL и идентификаторы временных сущностей.
15
18
 
16
19
  ## Ограничения пространства
@@ -108,11 +111,12 @@ Harness делает следующее:
108
111
  - если live API отвечает `405`, CLI делает `GET /projects/{project_id}?with_cards_data=true`
109
112
  - затем извлекает embedded cards list из project payload
110
113
  - `checklists.list`
111
- - direct `GET /cards/{card_id}/checklists` возвращает `405`
114
+ - direct `GET /cards/{card_id}/checklists` ранее возвращал `405` на проверенном tenant
112
115
  - CLI делает `GET /cards/{card_id}` и извлекает embedded `checklists`
113
116
  - `checklist-items.list`
114
- - direct `GET /cards/{card_id}/checklists/{checklist_id}/items` возвращает `405`
115
- - CLI делает `GET /cards/{card_id}` и извлекает `items` из matching checklist
117
+ - direct `GET /cards/{card_id}/checklists/{checklist_id}/items` ранее возвращал `405` на проверенных экземплярах
118
+ - CLI делает `GET /cards/{card_id}/checklists/{checklist_id}` и извлекает `items` из отдельного чеклиста
119
+ - ошибки API, включая отсутствие чеклиста, сохраняются; чтения всей карточки как fallback нет
116
120
 
117
121
  ## Expected-error contracts
118
122
 
@@ -1,11 +1,13 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: kaiten-cli
3
- Version: 0.3.3
3
+ Version: 0.3.5
4
4
  Summary: LLM-oriented CLI for Kaiten
5
5
  Project-URL: Homepage, https://github.com/ViktorOgnev/kaiten-cli
6
6
  Project-URL: Repository, https://github.com/ViktorOgnev/kaiten-cli
7
7
  Project-URL: Issues, https://github.com/ViktorOgnev/kaiten-cli/issues
8
8
  Author: Viktor Ognev
9
+ License-Expression: MIT
10
+ License-File: LICENSE
9
11
  Keywords: api,automation,cli,kaiten,llm
10
12
  Classifier: Development Status :: 4 - Beta
11
13
  Classifier: Environment :: Console
@@ -16,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.11
16
18
  Classifier: Programming Language :: Python :: 3.12
17
19
  Classifier: Programming Language :: Python :: 3.13
18
20
  Classifier: Programming Language :: Python :: 3.14
21
+ Classifier: Programming Language :: Python :: 3.15
19
22
  Classifier: Topic :: Utilities
20
23
  Requires-Python: >=3.11
21
24
  Requires-Dist: click>=8.1
@@ -55,50 +58,137 @@ Description-Content-Type: text/markdown
55
58
 
56
59
  Источник истины для CLI — локальный реестр `src/kaiten_cli/registry/`.
57
60
 
61
+ ## Обновление содержимого документов
62
+
63
+ **Временный резервный механизм совместимости.** Режим `--content-mode yjs`
64
+ предназначен для установок, где исправленный серверный API ещё не выпущен или
65
+ не включён. Он сохраняет историю совместного редактирования и остаётся нужен
66
+ для поддержки старых облачных и on-premise установок.
67
+
68
+ Этот fallback выбирается только явно; CLI не переключается на него автоматически
69
+ при ошибках API. Механизм — кандидат на последующее удаление, но пока не объявлен
70
+ deprecated и даты удаления нет.
71
+
72
+ ```bash
73
+ kaiten --locale ru --json --profile main documents update \
74
+ --document-uid <uid> --content-mode yjs --data @document.json
75
+ ```
76
+
77
+ Можно передать `--text` вместо `--data`. В этом режиме метаданные, например
78
+ `--title`, обновляются отдельной командой. Если Socket.IO работает на отдельном
79
+ сервере, укажите его origin через `--socket-url https://socket.example.com`.
80
+ По умолчанию используется origin выбранного профиля, путь Socket.IO — `/socket.io`.
81
+ Режим использует внутренний протокол Kaiten, а не гарантированный Public API;
82
+ совместимость конкретной установки требует проверки на тестовом документе.
83
+
84
+ Для Yjs нужен заранее установленный **Node.js 20+**. JavaScript-помощник,
85
+ библиотеки и схемы документов уже входят в пакет CLI. CLI не устанавливает Node,
86
+ не запускает npm и не скачивает зависимости. Без Node остальные команды работают;
87
+ Yjs-обновление завершится до записи с `config_error` и кодом выхода `3`.
88
+
89
+ **Полная API-запись может создать дубль всего документа при синхронизации
90
+ с открытым редактором.** Поэтому `documents update` с `data` или `text` без
91
+ Yjs-режима заблокирован (`mutation_blocked`, код `6`). Для осознанного разрешения
92
+ старого PATCH укажите `--allow-unsafe-content-replace`; предупреждение о риске
93
+ будет выведено в stderr, JSON в stdout сохранит прежний формат.
94
+
95
+ Автоматического перехода с Yjs на PATCH и автоматических повторов записи нет.
96
+ Успех Yjs означает подтверждение и проверку сохранённого состояния через повторную
97
+ синхронизацию. При обрыве после отправки CLI сообщает, что результат записи
98
+ неизвестен. При параллельных правках возможен конфликт проверки: CLI не
99
+ перезаписывает чужие изменения повторной попыткой. Результат Yjs содержит
100
+ `document_uid`, `content_mode`, `schema_version`, `data` и `status`
101
+ (`verified` или `unchanged`); это результат синхронизации, а не REST-снимок метаданных.
102
+ Сокетные попытки отражаются в `stats.document_sync` отдельно от HTTP-запросов.
103
+
104
+ Серверные исправления уже смержены, но это не подтверждает их rollout на конкретной
105
+ установке. Удалить резервный путь можно после проверки обычного PATCH с сохранением
106
+ старого состояния редактора, включения исправления на поддерживаемых установках
107
+ и пересмотра минимальной поддерживаемой версии сервера. Подробности и состав
108
+ удаляемого слоя — в [протоколе проверки](docs/DOCUMENT_YJS_VERIFICATION.md#temporary-fallback-and-retirement).
109
+
58
110
  ## Быстрый старт
59
111
 
112
+ ### Установка через Homebrew
113
+
114
+ На macOS и Linux:
115
+
116
+ ```bash
117
+ brew install ViktorOgnev/tap/kaiten-cli
118
+ kaiten --locale ru --version
119
+ ```
120
+
121
+ Homebrew устанавливает Python, Node.js для Yjs и зависимости CLI в управляемое
122
+ окружение. Отдельно устанавливать pipx или uv не требуется. Формула находится в
123
+ [публичном tap](https://github.com/ViktorOgnev/homebrew-tap); пока она не входит
124
+ в основной каталог Homebrew.
125
+
126
+ Обновление:
127
+
128
+ ```bash
129
+ brew update
130
+ brew upgrade kaiten-cli
131
+ ```
132
+
133
+ При переходе с pipx или uv сначала удалите прежнюю установку соответствующим
134
+ менеджером (`pipx uninstall kaiten-cli` или `uv tool uninstall kaiten-cli`).
135
+ Для pip используйте `python -m pip uninstall kaiten-cli` именно в прежнем
136
+ окружении. Эти команды не удаляют профили Kaiten. После установки проверьте
137
+ `command -v kaiten` и `type -a kaiten`: запускаемый файл должен принадлежать
138
+ Homebrew. При необходимости выполните `hash -r` или откройте новый терминал.
139
+ Обновляйте Homebrew-установку только через `brew upgrade`.
140
+
60
141
  ### Установка из PyPI
61
142
 
62
- Требуется Python 3.11 или новее. Начиная с выпуска `0.3.3`, стабильные версии
63
- публикуются в PyPI.
143
+ Требуется Python 3.11 или новее. Стабильные версии доступны в
144
+ [PyPI](https://pypi.org/project/kaiten-cli/), начиная с выпуска `0.3.3`.
64
145
 
65
146
  Рекомендуемый путь:
66
147
 
67
148
  ```bash
68
- uv tool install kaiten-cli
149
+ pip install kaiten-cli
69
150
  ```
70
151
 
71
- Альтернатива:
152
+ Установка CLI в отдельное окружение через pipx:
72
153
 
73
154
  ```bash
74
155
  pipx install kaiten-cli
75
156
  ```
76
157
 
77
- Установка в локальное виртуальное окружение:
158
+ Альтернатива через uv:
159
+
160
+ ```bash
161
+ uv tool install kaiten-cli
162
+ ```
163
+
164
+ Для установки через pip можно предварительно создать и активировать виртуальное
165
+ окружение. На macOS и Linux:
78
166
 
79
167
  ```bash
80
168
  python3 -m venv .venv
81
- .venv/bin/python -m pip install kaiten-cli
169
+ source .venv/bin/activate
170
+ pip install kaiten-cli
82
171
  ```
83
172
 
84
- В уже активированном виртуальном окружении достаточно `pip install kaiten-cli`.
173
+ В Windows PowerShell окружение активируется командой `.\.venv\Scripts\Activate.ps1`.
85
174
 
86
175
  ### Установка из Git
87
176
 
88
- Для установки текущего состояния `master`:
177
+ PyPI устанавливает опубликованный выпуск. Для установки текущего состояния
178
+ `master`, которое может содержать ещё не выпущенные изменения, используйте Git:
89
179
 
90
180
  ```bash
91
- uv tool install git+https://github.com/ViktorOgnev/kaiten-cli.git
181
+ pip install git+https://github.com/ViktorOgnev/kaiten-cli.git
92
182
  ```
93
183
 
94
184
  Для установки конкретного выпуска:
95
185
 
96
186
  ```bash
97
- uv tool install "git+https://github.com/ViktorOgnev/kaiten-cli.git@v0.3.3"
187
+ pip install "git+https://github.com/ViktorOgnev/kaiten-cli.git@v0.3.5"
98
188
  ```
99
189
 
100
- Вместо `uv tool install` можно использовать `pipx install` или
101
- `python -m pip install` в виртуальном окружении.
190
+ Вместо `pip install` можно использовать `pipx install` или `uv tool install`.
191
+ Чтобы выбрать конкретный Python для pip, используйте `python -m pip install`.
102
192
 
103
193
  ### Проверка установки
104
194
 
@@ -239,39 +329,41 @@ PowerShell необходимо использовать отдельную ру
239
329
  Для установки из PyPI обновление выполняется вручную тем же менеджером:
240
330
 
241
331
  ```bash
242
- uv tool upgrade kaiten-cli
243
- pipx upgrade kaiten-cli
244
332
  python -m pip install --upgrade kaiten-cli
333
+ pipx upgrade kaiten-cli
334
+ uv tool upgrade kaiten-cli
245
335
  ```
246
336
 
247
337
  Выберите команду своего менеджера; для pip используйте Python того окружения,
248
338
  куда установлен пакет. Встроенное предложение обновиться для установок из PyPI
249
339
  пока не поддерживается.
250
340
 
251
- Если CLI установлен по адресу ветки Git, обновление выполняется вручную:
341
+ Для установки из Git-ветки `master` обновление выполняется вручную:
252
342
 
253
343
  ```bash
254
- uv tool upgrade kaiten-cli
344
+ python -m pip install --upgrade git+https://github.com/ViktorOgnev/kaiten-cli.git
255
345
  pipx upgrade kaiten-cli
346
+ uv tool upgrade kaiten-cli
256
347
  ```
257
348
 
258
349
  Установка из Git без тега использует текущую версию из ветки `master`.
259
350
  Установку можно закрепить на конкретном выпуске с помощью тега:
260
351
 
261
352
  ```bash
262
- uv tool install "git+https://github.com/ViktorOgnev/kaiten-cli.git@v0.3.3"
353
+ pip install "git+https://github.com/ViktorOgnev/kaiten-cli.git@v0.3.5"
263
354
  ```
264
355
 
265
- Для установки из Git после успешной команды в интерактивном терминале CLI не чаще одного раза в сутки
266
- проверяет стабильные теги `vX.Y.Z` в том же Git-репозитории. Если найден новый
267
- релиз, появляется вопрос `Update now ...? [y/N]`. Основная команда к этому
356
+ При установке из Git CLI после успешной команды в интерактивном терминале
357
+ не чаще одного раза в сутки проверяет стабильные теги `vX.Y.Z` в том же
358
+ Git-репозитории. Если найден новый релиз, появляется вопрос `Update now ...? [y/N]`.
359
+ Основная команда к этому
268
360
  моменту уже завершена; подтверждённое обновление применяется со следующего запуска.
269
361
 
270
362
  Способ обновления соответствует способу установки:
271
363
 
272
- - `uv tool` → `uv tool upgrade kaiten-cli`;
364
+ - виртуальное окружение и pip → текущий `python -m pip install --upgrade <git-source>`;
273
365
  - `pipx` → `pipx upgrade kaiten-cli`;
274
- - виртуальное окружение и pip → текущий `python -m pip install --upgrade <git-source>`.
366
+ - `uv tool` → `uv tool upgrade kaiten-cli`.
275
367
 
276
368
  Для установки, закреплённой на `@vX.Y.Z`, подтверждение заменяет текущий тег на
277
369
  новый с помощью того же менеджера. Проверка не запускается в режиме `--json`,
@@ -10,50 +10,137 @@
10
10
 
11
11
  Источник истины для CLI — локальный реестр `src/kaiten_cli/registry/`.
12
12
 
13
+ ## Обновление содержимого документов
14
+
15
+ **Временный резервный механизм совместимости.** Режим `--content-mode yjs`
16
+ предназначен для установок, где исправленный серверный API ещё не выпущен или
17
+ не включён. Он сохраняет историю совместного редактирования и остаётся нужен
18
+ для поддержки старых облачных и on-premise установок.
19
+
20
+ Этот fallback выбирается только явно; CLI не переключается на него автоматически
21
+ при ошибках API. Механизм — кандидат на последующее удаление, но пока не объявлен
22
+ deprecated и даты удаления нет.
23
+
24
+ ```bash
25
+ kaiten --locale ru --json --profile main documents update \
26
+ --document-uid <uid> --content-mode yjs --data @document.json
27
+ ```
28
+
29
+ Можно передать `--text` вместо `--data`. В этом режиме метаданные, например
30
+ `--title`, обновляются отдельной командой. Если Socket.IO работает на отдельном
31
+ сервере, укажите его origin через `--socket-url https://socket.example.com`.
32
+ По умолчанию используется origin выбранного профиля, путь Socket.IO — `/socket.io`.
33
+ Режим использует внутренний протокол Kaiten, а не гарантированный Public API;
34
+ совместимость конкретной установки требует проверки на тестовом документе.
35
+
36
+ Для Yjs нужен заранее установленный **Node.js 20+**. JavaScript-помощник,
37
+ библиотеки и схемы документов уже входят в пакет CLI. CLI не устанавливает Node,
38
+ не запускает npm и не скачивает зависимости. Без Node остальные команды работают;
39
+ Yjs-обновление завершится до записи с `config_error` и кодом выхода `3`.
40
+
41
+ **Полная API-запись может создать дубль всего документа при синхронизации
42
+ с открытым редактором.** Поэтому `documents update` с `data` или `text` без
43
+ Yjs-режима заблокирован (`mutation_blocked`, код `6`). Для осознанного разрешения
44
+ старого PATCH укажите `--allow-unsafe-content-replace`; предупреждение о риске
45
+ будет выведено в stderr, JSON в stdout сохранит прежний формат.
46
+
47
+ Автоматического перехода с Yjs на PATCH и автоматических повторов записи нет.
48
+ Успех Yjs означает подтверждение и проверку сохранённого состояния через повторную
49
+ синхронизацию. При обрыве после отправки CLI сообщает, что результат записи
50
+ неизвестен. При параллельных правках возможен конфликт проверки: CLI не
51
+ перезаписывает чужие изменения повторной попыткой. Результат Yjs содержит
52
+ `document_uid`, `content_mode`, `schema_version`, `data` и `status`
53
+ (`verified` или `unchanged`); это результат синхронизации, а не REST-снимок метаданных.
54
+ Сокетные попытки отражаются в `stats.document_sync` отдельно от HTTP-запросов.
55
+
56
+ Серверные исправления уже смержены, но это не подтверждает их rollout на конкретной
57
+ установке. Удалить резервный путь можно после проверки обычного PATCH с сохранением
58
+ старого состояния редактора, включения исправления на поддерживаемых установках
59
+ и пересмотра минимальной поддерживаемой версии сервера. Подробности и состав
60
+ удаляемого слоя — в [протоколе проверки](docs/DOCUMENT_YJS_VERIFICATION.md#temporary-fallback-and-retirement).
61
+
13
62
  ## Быстрый старт
14
63
 
64
+ ### Установка через Homebrew
65
+
66
+ На macOS и Linux:
67
+
68
+ ```bash
69
+ brew install ViktorOgnev/tap/kaiten-cli
70
+ kaiten --locale ru --version
71
+ ```
72
+
73
+ Homebrew устанавливает Python, Node.js для Yjs и зависимости CLI в управляемое
74
+ окружение. Отдельно устанавливать pipx или uv не требуется. Формула находится в
75
+ [публичном tap](https://github.com/ViktorOgnev/homebrew-tap); пока она не входит
76
+ в основной каталог Homebrew.
77
+
78
+ Обновление:
79
+
80
+ ```bash
81
+ brew update
82
+ brew upgrade kaiten-cli
83
+ ```
84
+
85
+ При переходе с pipx или uv сначала удалите прежнюю установку соответствующим
86
+ менеджером (`pipx uninstall kaiten-cli` или `uv tool uninstall kaiten-cli`).
87
+ Для pip используйте `python -m pip uninstall kaiten-cli` именно в прежнем
88
+ окружении. Эти команды не удаляют профили Kaiten. После установки проверьте
89
+ `command -v kaiten` и `type -a kaiten`: запускаемый файл должен принадлежать
90
+ Homebrew. При необходимости выполните `hash -r` или откройте новый терминал.
91
+ Обновляйте Homebrew-установку только через `brew upgrade`.
92
+
15
93
  ### Установка из PyPI
16
94
 
17
- Требуется Python 3.11 или новее. Начиная с выпуска `0.3.3`, стабильные версии
18
- публикуются в PyPI.
95
+ Требуется Python 3.11 или новее. Стабильные версии доступны в
96
+ [PyPI](https://pypi.org/project/kaiten-cli/), начиная с выпуска `0.3.3`.
19
97
 
20
98
  Рекомендуемый путь:
21
99
 
22
100
  ```bash
23
- uv tool install kaiten-cli
101
+ pip install kaiten-cli
24
102
  ```
25
103
 
26
- Альтернатива:
104
+ Установка CLI в отдельное окружение через pipx:
27
105
 
28
106
  ```bash
29
107
  pipx install kaiten-cli
30
108
  ```
31
109
 
32
- Установка в локальное виртуальное окружение:
110
+ Альтернатива через uv:
111
+
112
+ ```bash
113
+ uv tool install kaiten-cli
114
+ ```
115
+
116
+ Для установки через pip можно предварительно создать и активировать виртуальное
117
+ окружение. На macOS и Linux:
33
118
 
34
119
  ```bash
35
120
  python3 -m venv .venv
36
- .venv/bin/python -m pip install kaiten-cli
121
+ source .venv/bin/activate
122
+ pip install kaiten-cli
37
123
  ```
38
124
 
39
- В уже активированном виртуальном окружении достаточно `pip install kaiten-cli`.
125
+ В Windows PowerShell окружение активируется командой `.\.venv\Scripts\Activate.ps1`.
40
126
 
41
127
  ### Установка из Git
42
128
 
43
- Для установки текущего состояния `master`:
129
+ PyPI устанавливает опубликованный выпуск. Для установки текущего состояния
130
+ `master`, которое может содержать ещё не выпущенные изменения, используйте Git:
44
131
 
45
132
  ```bash
46
- uv tool install git+https://github.com/ViktorOgnev/kaiten-cli.git
133
+ pip install git+https://github.com/ViktorOgnev/kaiten-cli.git
47
134
  ```
48
135
 
49
136
  Для установки конкретного выпуска:
50
137
 
51
138
  ```bash
52
- uv tool install "git+https://github.com/ViktorOgnev/kaiten-cli.git@v0.3.3"
139
+ pip install "git+https://github.com/ViktorOgnev/kaiten-cli.git@v0.3.5"
53
140
  ```
54
141
 
55
- Вместо `uv tool install` можно использовать `pipx install` или
56
- `python -m pip install` в виртуальном окружении.
142
+ Вместо `pip install` можно использовать `pipx install` или `uv tool install`.
143
+ Чтобы выбрать конкретный Python для pip, используйте `python -m pip install`.
57
144
 
58
145
  ### Проверка установки
59
146
 
@@ -194,39 +281,41 @@ PowerShell необходимо использовать отдельную ру
194
281
  Для установки из PyPI обновление выполняется вручную тем же менеджером:
195
282
 
196
283
  ```bash
197
- uv tool upgrade kaiten-cli
198
- pipx upgrade kaiten-cli
199
284
  python -m pip install --upgrade kaiten-cli
285
+ pipx upgrade kaiten-cli
286
+ uv tool upgrade kaiten-cli
200
287
  ```
201
288
 
202
289
  Выберите команду своего менеджера; для pip используйте Python того окружения,
203
290
  куда установлен пакет. Встроенное предложение обновиться для установок из PyPI
204
291
  пока не поддерживается.
205
292
 
206
- Если CLI установлен по адресу ветки Git, обновление выполняется вручную:
293
+ Для установки из Git-ветки `master` обновление выполняется вручную:
207
294
 
208
295
  ```bash
209
- uv tool upgrade kaiten-cli
296
+ python -m pip install --upgrade git+https://github.com/ViktorOgnev/kaiten-cli.git
210
297
  pipx upgrade kaiten-cli
298
+ uv tool upgrade kaiten-cli
211
299
  ```
212
300
 
213
301
  Установка из Git без тега использует текущую версию из ветки `master`.
214
302
  Установку можно закрепить на конкретном выпуске с помощью тега:
215
303
 
216
304
  ```bash
217
- uv tool install "git+https://github.com/ViktorOgnev/kaiten-cli.git@v0.3.3"
305
+ pip install "git+https://github.com/ViktorOgnev/kaiten-cli.git@v0.3.5"
218
306
  ```
219
307
 
220
- Для установки из Git после успешной команды в интерактивном терминале CLI не чаще одного раза в сутки
221
- проверяет стабильные теги `vX.Y.Z` в том же Git-репозитории. Если найден новый
222
- релиз, появляется вопрос `Update now ...? [y/N]`. Основная команда к этому
308
+ При установке из Git CLI после успешной команды в интерактивном терминале
309
+ не чаще одного раза в сутки проверяет стабильные теги `vX.Y.Z` в том же
310
+ Git-репозитории. Если найден новый релиз, появляется вопрос `Update now ...? [y/N]`.
311
+ Основная команда к этому
223
312
  моменту уже завершена; подтверждённое обновление применяется со следующего запуска.
224
313
 
225
314
  Способ обновления соответствует способу установки:
226
315
 
227
- - `uv tool` → `uv tool upgrade kaiten-cli`;
316
+ - виртуальное окружение и pip → текущий `python -m pip install --upgrade <git-source>`;
228
317
  - `pipx` → `pipx upgrade kaiten-cli`;
229
- - виртуальное окружение и pip → текущий `python -m pip install --upgrade <git-source>`.
318
+ - `uv tool` → `uv tool upgrade kaiten-cli`.
230
319
 
231
320
  Для установки, закреплённой на `@vX.Y.Z`, подтверждение заменяет текущий тег на
232
321
  новый с помощью того же менеджера. Проверка не запускается в режиме `--json`,