highhxcli 0.3.2__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (599) hide show
  1. {highhxcli-0.3.2 → highhxcli-0.4.0}/CHANGELOG.md +57 -0
  2. {highhxcli-0.3.2 → highhxcli-0.4.0}/PKG-INFO +80 -19
  3. {highhxcli-0.3.2 → highhxcli-0.4.0}/README.md +79 -18
  4. {highhxcli-0.3.2 → highhxcli-0.4.0}/docs/agent.md +37 -8
  5. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/__init__.py +1 -1
  6. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/bootstrap.py +12 -1
  7. highhxcli-0.4.0/src/highhx/agent/input.py +70 -0
  8. highhxcli-0.4.0/src/highhx/agent/launch.py +76 -0
  9. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/model/platform.py +1 -1
  10. highhxcli-0.4.0/src/highhx/agent/repl.py +926 -0
  11. highhxcli-0.4.0/src/highhx/agent/router.py +129 -0
  12. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/ui.py +126 -15
  13. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/cli.py +24 -14
  14. highhxcli-0.4.0/src/highhx/cloud/capabilities.py +160 -0
  15. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/cloud/plans.py +2 -1
  16. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/cloud/account.py +6 -2
  17. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/cloud/agent.py +19 -10
  18. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/cloud/login.py +4 -2
  19. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/computer/intents.py +91 -2
  20. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/core/errors.py +3 -0
  21. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/ui/branding.py +13 -5
  22. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/agent/test_cloud_and_cli.py +1 -1
  23. highhxcli-0.4.0/tests/unit/agent/test_free_pro_boundary.py +469 -0
  24. highhxcli-0.4.0/tests/unit/agent/test_interactive_shell.py +698 -0
  25. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/agent/test_repl.py +1 -1
  26. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/ui/test_branding.py +1 -1
  27. highhxcli-0.3.2/src/highhx/agent/repl.py +0 -460
  28. {highhxcli-0.3.2 → highhxcli-0.4.0}/.gitignore +0 -0
  29. {highhxcli-0.3.2 → highhxcli-0.4.0}/CODE_OF_CONDUCT.md +0 -0
  30. {highhxcli-0.3.2 → highhxcli-0.4.0}/CONTRIBUTING.md +0 -0
  31. {highhxcli-0.3.2 → highhxcli-0.4.0}/LICENSE +0 -0
  32. {highhxcli-0.3.2 → highhxcli-0.4.0}/SECURITY.md +0 -0
  33. {highhxcli-0.3.2 → highhxcli-0.4.0}/docs/architecture.md +0 -0
  34. {highhxcli-0.3.2 → highhxcli-0.4.0}/docs/commands.md +0 -0
  35. {highhxcli-0.3.2 → highhxcli-0.4.0}/docs/computer-use.md +0 -0
  36. {highhxcli-0.3.2 → highhxcli-0.4.0}/docs/configuration.md +0 -0
  37. {highhxcli-0.3.2 → highhxcli-0.4.0}/docs/development.md +0 -0
  38. {highhxcli-0.3.2 → highhxcli-0.4.0}/docs/platform.md +0 -0
  39. {highhxcli-0.3.2 → highhxcli-0.4.0}/docs/plugins.md +0 -0
  40. {highhxcli-0.3.2 → highhxcli-0.4.0}/docs/security.md +0 -0
  41. {highhxcli-0.3.2 → highhxcli-0.4.0}/docs/troubleshooting.md +0 -0
  42. {highhxcli-0.3.2 → highhxcli-0.4.0}/docs/workflows.md +0 -0
  43. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/README.md +0 -0
  44. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/basic/.highhx/config.yaml +0 -0
  45. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/basic/.highhx/workflows/check.yaml +0 -0
  46. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/basic/README.md +0 -0
  47. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/basic/calc.py +0 -0
  48. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/basic/tests/__init__.py +0 -0
  49. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/basic/tests/test_calc.py +0 -0
  50. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/ci/.highhx/config.yaml +0 -0
  51. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/ci/.highhx/workflows/pipeline.yaml +0 -0
  52. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/ci/.highhx/workflows/tests.yaml +0 -0
  53. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/docker/.highhx/config.yaml +0 -0
  54. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/docker/.highhx/workflows/up.yaml +0 -0
  55. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/flutter/.highhx/config.yaml +0 -0
  56. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/flutter/.highhx/workflows/build.yaml +0 -0
  57. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/monorepo/.highhx/config.yaml +0 -0
  58. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/monorepo/.highhx/workflows/test-all.yaml +0 -0
  59. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/node/.highhx/config.yaml +0 -0
  60. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/node/.highhx/workflows/ci.yaml +0 -0
  61. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/production/.highhx/config.yaml +0 -0
  62. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/production/.highhx/environment.yaml +0 -0
  63. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/production/.highhx/policies.yaml +0 -0
  64. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/production/.highhx/workflows/deploy.yaml +0 -0
  65. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/production/db/migrations/001_create_users.sql +0 -0
  66. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/production/db/migrations/002_add_name.sql +0 -0
  67. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/python/.highhx/config.yaml +0 -0
  68. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/python/.highhx/workflows/check.yaml +0 -0
  69. {highhxcli-0.3.2 → highhxcli-0.4.0}/examples/python/.highhx/workflows/release.yaml +0 -0
  70. {highhxcli-0.3.2 → highhxcli-0.4.0}/pyproject.toml +0 -0
  71. {highhxcli-0.3.2 → highhxcli-0.4.0}/schemas/config.schema.json +0 -0
  72. {highhxcli-0.3.2 → highhxcli-0.4.0}/schemas/plugin.schema.json +0 -0
  73. {highhxcli-0.3.2 → highhxcli-0.4.0}/schemas/workflow.schema.json +0 -0
  74. {highhxcli-0.3.2 → highhxcli-0.4.0}/scripts/generate_docs.py +0 -0
  75. {highhxcli-0.3.2 → highhxcli-0.4.0}/scripts/generate_schemas.py +0 -0
  76. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/README.md +0 -0
  77. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/__init__.py +0 -0
  78. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/__main__.py +0 -0
  79. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/accounts.py +0 -0
  80. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/app.py +0 -0
  81. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/billing.py +0 -0
  82. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/config.py +0 -0
  83. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/db.py +0 -0
  84. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/deps.py +0 -0
  85. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/gateway.py +0 -0
  86. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/migrations/__init__.py +0 -0
  87. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/migrations/env.py +0 -0
  88. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/migrations/script.py.mako +0 -0
  89. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/migrations/versions/0001_initial_schema.py +0 -0
  90. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/migrations/versions/0002_security_and_metering.py +0 -0
  91. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/migrations/versions/0003_shared_stream_state.py +0 -0
  92. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/migrations/versions/__init__.py +0 -0
  93. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/models.py +0 -0
  94. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/routers/__init__.py +0 -0
  95. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/routers/account.py +0 -0
  96. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/routers/ai.py +0 -0
  97. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/routers/auth.py +0 -0
  98. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/routers/billing.py +0 -0
  99. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/routers/web.py +0 -0
  100. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/security.py +0 -0
  101. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/src/highhx_platform/streams.py +0 -0
  102. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/tests/conftest.py +0 -0
  103. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/tests/helpers.py +0 -0
  104. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/tests/test_cli_integration.py +0 -0
  105. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/tests/test_e2e_final.py +0 -0
  106. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/tests/test_hardening.py +0 -0
  107. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/tests/test_multi_instance.py +0 -0
  108. {highhxcli-0.3.2 → highhxcli-0.4.0}/server/tests/test_platform.py +0 -0
  109. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/__main__.py +0 -0
  110. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/__init__.py +0 -0
  111. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/context.py +0 -0
  112. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/history.py +0 -0
  113. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/memory.py +0 -0
  114. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/messages.py +0 -0
  115. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/model/__init__.py +0 -0
  116. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/model/anthropic.py +0 -0
  117. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/model/base.py +0 -0
  118. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/model/gemini.py +0 -0
  119. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/model/openai.py +0 -0
  120. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/model/registry.py +0 -0
  121. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/model/resilience.py +0 -0
  122. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/permissions.py +0 -0
  123. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/planner.py +0 -0
  124. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/prompts.py +0 -0
  125. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/running.py +0 -0
  126. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/session.py +0 -0
  127. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/settings.py +0 -0
  128. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/state.py +0 -0
  129. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/streaming.py +0 -0
  130. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/sync.py +0 -0
  131. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/tools/__init__.py +0 -0
  132. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/tools/base.py +0 -0
  133. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/tools/commands.py +0 -0
  134. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/tools/computer.py +0 -0
  135. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/tools/devops.py +0 -0
  136. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/tools/files.py +0 -0
  137. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/tools/git.py +0 -0
  138. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/tools/project.py +0 -0
  139. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/agent/tools/registry.py +0 -0
  140. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/approvals/__init__.py +0 -0
  141. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/approvals/manager.py +0 -0
  142. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/approvals/policy.py +0 -0
  143. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/approvals/risk.py +0 -0
  144. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/approvals/rules.py +0 -0
  145. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/automation/__init__.py +0 -0
  146. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/automation/cron.py +0 -0
  147. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/automation/hooks.py +0 -0
  148. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/automation/scheduler.py +0 -0
  149. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/automation/triggers.py +0 -0
  150. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/automation/watcher.py +0 -0
  151. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/building/__init__.py +0 -0
  152. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/building/artifacts.py +0 -0
  153. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/building/builder.py +0 -0
  154. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/building/cleanup.py +0 -0
  155. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/building/packaging.py +0 -0
  156. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/cloud/__init__.py +0 -0
  157. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/cloud/account.py +0 -0
  158. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/cloud/client.py +0 -0
  159. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/cloud/credentials.py +0 -0
  160. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/cloud/protocol.py +0 -0
  161. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/cloud/sse.py +0 -0
  162. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/__init__.py +0 -0
  163. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/automation/__init__.py +0 -0
  164. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/automation/hook.py +0 -0
  165. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/automation/schedule.py +0 -0
  166. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/automation/trigger.py +0 -0
  167. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/automation/watch.py +0 -0
  168. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/build/__init__.py +0 -0
  169. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/build/artifacts.py +0 -0
  170. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/build/build.py +0 -0
  171. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/build/clean.py +0 -0
  172. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/build/package.py +0 -0
  173. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/cloud/__init__.py +0 -0
  174. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/code/__init__.py +0 -0
  175. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/code/exec.py +0 -0
  176. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/code/fix.py +0 -0
  177. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/code/run.py +0 -0
  178. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/code/script.py +0 -0
  179. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/code/task.py +0 -0
  180. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/code/watch.py +0 -0
  181. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/computer/__init__.py +0 -0
  182. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/computer/do.py +0 -0
  183. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/computer/main.py +0 -0
  184. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/database/__init__.py +0 -0
  185. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/database/backup.py +0 -0
  186. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/database/main.py +0 -0
  187. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/database/migrate.py +0 -0
  188. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/database/restore.py +0 -0
  189. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/database/seed.py +0 -0
  190. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/database/status.py +0 -0
  191. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/dependencies/__init__.py +0 -0
  192. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/dependencies/audit.py +0 -0
  193. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/dependencies/clean.py +0 -0
  194. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/dependencies/install.py +0 -0
  195. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/dependencies/main.py +0 -0
  196. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/dependencies/outdated.py +0 -0
  197. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/dependencies/update.py +0 -0
  198. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/deployment/__init__.py +0 -0
  199. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/deployment/deploy.py +0 -0
  200. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/deployment/environments.py +0 -0
  201. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/deployment/logs.py +0 -0
  202. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/deployment/rollback.py +0 -0
  203. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/deployment/status.py +0 -0
  204. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/diagnostics/__init__.py +0 -0
  205. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/diagnostics/debug.py +0 -0
  206. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/diagnostics/diagnose.py +0 -0
  207. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/diagnostics/doctor.py +0 -0
  208. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/diagnostics/repair.py +0 -0
  209. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/diagnostics/trace.py +0 -0
  210. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/docker/__init__.py +0 -0
  211. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/docker/down.py +0 -0
  212. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/docker/logs.py +0 -0
  213. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/docker/main.py +0 -0
  214. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/docker/up.py +0 -0
  215. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/environment/__init__.py +0 -0
  216. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/environment/check.py +0 -0
  217. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/environment/diff.py +0 -0
  218. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/environment/main.py +0 -0
  219. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/environment/profile.py +0 -0
  220. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/environment/set.py +0 -0
  221. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/git/__init__.py +0 -0
  222. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/git/branch.py +0 -0
  223. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/git/commit.py +0 -0
  224. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/git/diff.py +0 -0
  225. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/git/history.py +0 -0
  226. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/git/main.py +0 -0
  227. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/git/status.py +0 -0
  228. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/git/sync.py +0 -0
  229. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/git/tag.py +0 -0
  230. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/groups.py +0 -0
  231. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/observability/__init__.py +0 -0
  232. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/observability/audit.py +0 -0
  233. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/observability/history.py +0 -0
  234. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/observability/logs.py +0 -0
  235. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/observability/report.py +0 -0
  236. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/plugins/__init__.py +0 -0
  237. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/plugins/install.py +0 -0
  238. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/plugins/list.py +0 -0
  239. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/plugins/main.py +0 -0
  240. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/plugins/remove.py +0 -0
  241. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/plugins/search.py +0 -0
  242. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/plugins/trust.py +0 -0
  243. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/plugins/update.py +0 -0
  244. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/project/__init__.py +0 -0
  245. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/project/check.py +0 -0
  246. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/project/dev.py +0 -0
  247. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/project/doctor.py +0 -0
  248. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/project/info.py +0 -0
  249. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/project/init.py +0 -0
  250. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/project/restart.py +0 -0
  251. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/project/start.py +0 -0
  252. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/project/status.py +0 -0
  253. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/project/stop.py +0 -0
  254. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/registry.py +0 -0
  255. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/release/__init__.py +0 -0
  256. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/release/changelog.py +0 -0
  257. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/release/publish.py +0 -0
  258. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/release/release.py +0 -0
  259. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/release/version.py +0 -0
  260. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/security/__init__.py +0 -0
  261. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/security/config.py +0 -0
  262. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/security/dependencies.py +0 -0
  263. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/security/main.py +0 -0
  264. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/security/report.py +0 -0
  265. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/security/scan.py +0 -0
  266. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/security/secrets.py +0 -0
  267. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/services/__init__.py +0 -0
  268. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/services/main.py +0 -0
  269. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/services/ports.py +0 -0
  270. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/team/__init__.py +0 -0
  271. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/team/config.py +0 -0
  272. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/team/policy.py +0 -0
  273. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/team/profile.py +0 -0
  274. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/team/workspace.py +0 -0
  275. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/testing/__init__.py +0 -0
  276. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/testing/benchmark.py +0 -0
  277. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/testing/test.py +0 -0
  278. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/workflows/__init__.py +0 -0
  279. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/workflows/create.py +0 -0
  280. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/workflows/graph.py +0 -0
  281. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/workflows/list.py +0 -0
  282. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/workflows/main.py +0 -0
  283. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/commands/workflows/validate.py +0 -0
  284. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/computer/__init__.py +0 -0
  285. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/computer/browser.py +0 -0
  286. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/computer/desktop.py +0 -0
  287. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/computer/flows.py +0 -0
  288. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/computer/model.py +0 -0
  289. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/computer/providers.py +0 -0
  290. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/computer/runtime.py +0 -0
  291. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/computer/session.py +0 -0
  292. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/computer/websocket.py +0 -0
  293. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/config/__init__.py +0 -0
  294. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/config/defaults.py +0 -0
  295. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/config/loader.py +0 -0
  296. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/config/schema.py +0 -0
  297. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/config/validation.py +0 -0
  298. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/core/__init__.py +0 -0
  299. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/core/context.py +0 -0
  300. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/core/engine.py +0 -0
  301. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/core/events.py +0 -0
  302. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/core/executor.py +0 -0
  303. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/core/lifecycle.py +0 -0
  304. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/core/result.py +0 -0
  305. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/database/__init__.py +0 -0
  306. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/database/backup.py +0 -0
  307. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/database/manager.py +0 -0
  308. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/database/migrations.py +0 -0
  309. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/database/restore.py +0 -0
  310. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/database/seeding.py +0 -0
  311. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/dependencies/__init__.py +0 -0
  312. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/dependencies/audit.py +0 -0
  313. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/dependencies/detector.py +0 -0
  314. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/dependencies/installer.py +0 -0
  315. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/dependencies/manager.py +0 -0
  316. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/dependencies/outdated.py +0 -0
  317. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/dependencies/updater.py +0 -0
  318. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/deployment/__init__.py +0 -0
  319. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/deployment/health.py +0 -0
  320. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/deployment/manager.py +0 -0
  321. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/deployment/rollback.py +0 -0
  322. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/deployment/state.py +0 -0
  323. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/deployment/strategy.py +0 -0
  324. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/deployment/target.py +0 -0
  325. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/detection/__init__.py +0 -0
  326. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/detection/container.py +0 -0
  327. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/detection/database.py +0 -0
  328. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/detection/framework.py +0 -0
  329. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/detection/language.py +0 -0
  330. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/detection/operating_system.py +0 -0
  331. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/detection/package_manager.py +0 -0
  332. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/detection/runtime.py +0 -0
  333. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/detection/tools.py +0 -0
  334. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/diagnostics/__init__.py +0 -0
  335. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/diagnostics/diagnose.py +0 -0
  336. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/diagnostics/doctor.py +0 -0
  337. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/diagnostics/repair.py +0 -0
  338. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/environment/__init__.py +0 -0
  339. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/environment/dotenv.py +0 -0
  340. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/environment/manager.py +0 -0
  341. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/environment/profiles.py +0 -0
  342. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/environment/secrets.py +0 -0
  343. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/environment/validation.py +0 -0
  344. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/environment/variables.py +0 -0
  345. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/execution/__init__.py +0 -0
  346. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/execution/cancellation.py +0 -0
  347. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/execution/command.py +0 -0
  348. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/execution/environment.py +0 -0
  349. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/execution/isolation.py +0 -0
  350. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/execution/parallel.py +0 -0
  351. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/execution/process.py +0 -0
  352. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/execution/retry.py +0 -0
  353. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/execution/shell.py +0 -0
  354. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/execution/timeout.py +0 -0
  355. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/git/__init__.py +0 -0
  356. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/git/branches.py +0 -0
  357. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/git/commits.py +0 -0
  358. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/git/diff.py +0 -0
  359. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/git/history.py +0 -0
  360. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/git/manager.py +0 -0
  361. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/git/repository.py +0 -0
  362. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/git/status.py +0 -0
  363. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/git/tags.py +0 -0
  364. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/__init__.py +0 -0
  365. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/cloud/__init__.py +0 -0
  366. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/cloud/registry.py +0 -0
  367. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/databases/__init__.py +0 -0
  368. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/databases/base.py +0 -0
  369. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/databases/mysql.py +0 -0
  370. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/databases/postgres.py +0 -0
  371. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/databases/sqlite.py +0 -0
  372. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/databases/url.py +0 -0
  373. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/docker/__init__.py +0 -0
  374. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/docker/client.py +0 -0
  375. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/kubernetes/__init__.py +0 -0
  376. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/kubernetes/client.py +0 -0
  377. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/ssh/__init__.py +0 -0
  378. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/ssh/client.py +0 -0
  379. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/terraform/__init__.py +0 -0
  380. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/integrations/terraform/client.py +0 -0
  381. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/observability/__init__.py +0 -0
  382. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/observability/events.py +0 -0
  383. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/observability/logger.py +0 -0
  384. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/observability/metrics.py +0 -0
  385. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/observability/tracing.py +0 -0
  386. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/plugins/__init__.py +0 -0
  387. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/plugins/interface.py +0 -0
  388. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/plugins/loader.py +0 -0
  389. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/plugins/manager.py +0 -0
  390. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/plugins/manifest.py +0 -0
  391. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/plugins/registry.py +0 -0
  392. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/plugins/sandbox.py +0 -0
  393. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/policy/__init__.py +0 -0
  394. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/policy/engine.py +0 -0
  395. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/policy/rules.py +0 -0
  396. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/policy/validator.py +0 -0
  397. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/project/__init__.py +0 -0
  398. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/project/context.py +0 -0
  399. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/project/detector.py +0 -0
  400. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/project/initializer.py +0 -0
  401. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/project/manifest.py +0 -0
  402. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/project/monorepo.py +0 -0
  403. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/project/scanner.py +0 -0
  404. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/project/status.py +0 -0
  405. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/project/workspace.py +0 -0
  406. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/release/__init__.py +0 -0
  407. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/release/changelog.py +0 -0
  408. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/release/manager.py +0 -0
  409. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/release/publisher.py +0 -0
  410. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/release/versioning.py +0 -0
  411. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/safety/__init__.py +0 -0
  412. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/safety/actions.py +0 -0
  413. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/safety/audit.py +0 -0
  414. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/safety/classifier.py +0 -0
  415. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/safety/confirmation.py +0 -0
  416. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/safety/gate.py +0 -0
  417. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/safety/injection.py +0 -0
  418. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/security/__init__.py +0 -0
  419. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/security/dependencies.py +0 -0
  420. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/security/filesystem.py +0 -0
  421. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/security/permissions.py +0 -0
  422. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/security/policies.py +0 -0
  423. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/security/report.py +0 -0
  424. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/security/scanner.py +0 -0
  425. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/security/secrets.py +0 -0
  426. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/security/secrets_scan.py +0 -0
  427. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/services/__init__.py +0 -0
  428. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/services/health.py +0 -0
  429. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/services/manager.py +0 -0
  430. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/services/ports.py +0 -0
  431. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/services/registry.py +0 -0
  432. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/storage/__init__.py +0 -0
  433. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/storage/cache.py +0 -0
  434. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/storage/database.py +0 -0
  435. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/storage/history.py +0 -0
  436. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/storage/logs.py +0 -0
  437. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/storage/migrations.py +0 -0
  438. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/testing/__init__.py +0 -0
  439. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/testing/benchmark.py +0 -0
  440. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/testing/coverage.py +0 -0
  441. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/testing/discovery.py +0 -0
  442. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/testing/runner.py +0 -0
  443. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/ui/__init__.py +0 -0
  444. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/ui/dashboard.py +0 -0
  445. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/ui/errors.py +0 -0
  446. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/ui/output.py +0 -0
  447. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/ui/progress.py +0 -0
  448. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/ui/prompts.py +0 -0
  449. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/ui/reporting.py +0 -0
  450. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/ui/tables.py +0 -0
  451. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/ui/terminal.py +0 -0
  452. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/utils/__init__.py +0 -0
  453. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/utils/filesystem.py +0 -0
  454. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/utils/hashing.py +0 -0
  455. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/utils/paths.py +0 -0
  456. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/utils/platform.py +0 -0
  457. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/utils/processes.py +0 -0
  458. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/utils/time.py +0 -0
  459. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/utils/validation.py +0 -0
  460. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/workflows/__init__.py +0 -0
  461. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/workflows/conditions.py +0 -0
  462. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/workflows/dependency_graph.py +0 -0
  463. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/workflows/engine.py +0 -0
  464. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/workflows/loader.py +0 -0
  465. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/workflows/parser.py +0 -0
  466. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/workflows/resolver.py +0 -0
  467. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/workflows/scheduler.py +0 -0
  468. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/workflows/schema.py +0 -0
  469. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/workflows/templates.py +0 -0
  470. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/workflows/validator.py +0 -0
  471. {highhxcli-0.3.2 → highhxcli-0.4.0}/src/highhx/workflows/variables.py +0 -0
  472. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/cpp/config.yaml +0 -0
  473. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/cpp/workflows/build.yaml +0 -0
  474. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/docker/config.yaml +0 -0
  475. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/docker/workflows/build.yaml +0 -0
  476. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/flutter/config.yaml +0 -0
  477. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/flutter/workflows/test.yaml +0 -0
  478. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/generic/config.yaml +0 -0
  479. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/generic/environment.yaml +0 -0
  480. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/generic/policies.yaml +0 -0
  481. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/generic/workflows/build.yaml +0 -0
  482. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/generic/workflows/ci.yaml +0 -0
  483. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/generic/workflows/deploy.yaml +0 -0
  484. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/generic/workflows/dev.yaml +0 -0
  485. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/generic/workflows/release.yaml +0 -0
  486. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/generic/workflows/rollback.yaml +0 -0
  487. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/generic/workflows/test.yaml +0 -0
  488. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/java/config.yaml +0 -0
  489. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/monorepo/config.yaml +0 -0
  490. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/monorepo/workflows/test.yaml +0 -0
  491. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/nextjs/config.yaml +0 -0
  492. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/node/config.yaml +0 -0
  493. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/python/config.yaml +0 -0
  494. {highhxcli-0.3.2 → highhxcli-0.4.0}/templates/react/config.yaml +0 -0
  495. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/__init__.py +0 -0
  496. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/conftest.py +0 -0
  497. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/e2e/__init__.py +0 -0
  498. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/e2e/_helpers.py +0 -0
  499. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/e2e/test_deploy.py +0 -0
  500. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/e2e/test_dev.py +0 -0
  501. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/e2e/test_examples.py +0 -0
  502. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/e2e/test_free_without_ai.py +0 -0
  503. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/e2e/test_init.py +0 -0
  504. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/e2e/test_interrupts.py +0 -0
  505. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/e2e/test_long_running.py +0 -0
  506. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/e2e/test_paths_with_spaces.py +0 -0
  507. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/e2e/test_rollback.py +0 -0
  508. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/e2e/test_services_lifecycle.py +0 -0
  509. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/fixtures/docker_project/Dockerfile +0 -0
  510. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/fixtures/docker_project/compose.yaml +0 -0
  511. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/fixtures/monorepo/package.json +0 -0
  512. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/fixtures/monorepo/packages/api/package.json +0 -0
  513. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/fixtures/monorepo/packages/web/package.json +0 -0
  514. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/fixtures/node_project/package.json +0 -0
  515. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/fixtures/node_project/pnpm-lock.yaml +0 -0
  516. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/fixtures/node_project/tsconfig.json +0 -0
  517. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/fixtures/python_project/pyproject.toml +0 -0
  518. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/fixtures/python_project/src/pyapp/__init__.py +0 -0
  519. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/fixtures/python_project/src/pyapp/calc.py +0 -0
  520. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/fixtures/python_project/tests/test_calc.py +0 -0
  521. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/integration/__init__.py +0 -0
  522. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/integration/docker/__init__.py +0 -0
  523. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/integration/docker/test_docker_project.py +0 -0
  524. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/integration/git/__init__.py +0 -0
  525. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/integration/git/test_release_flow.py +0 -0
  526. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/integration/node/__init__.py +0 -0
  527. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/integration/node/test_node_project.py +0 -0
  528. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/integration/python/__init__.py +0 -0
  529. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/integration/python/test_python_project.py +0 -0
  530. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/integration/test_external_tool_contracts.py +0 -0
  531. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/integration/test_mysql_real.py +0 -0
  532. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/integration/workflows/__init__.py +0 -0
  533. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/integration/workflows/test_cli_workflows.py +0 -0
  534. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/security/__init__.py +0 -0
  535. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/security/test_permissions.py +0 -0
  536. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/security/test_policies.py +0 -0
  537. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/security/test_secrets.py +0 -0
  538. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/__init__.py +0 -0
  539. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/agent/__init__.py +0 -0
  540. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/agent/conftest.py +0 -0
  541. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/agent/test_injection_surfaces.py +0 -0
  542. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/agent/test_live_providers.py +0 -0
  543. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/agent/test_provider_wire.py +0 -0
  544. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/agent/test_providers.py +0 -0
  545. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/agent/test_resilience_and_state.py +0 -0
  546. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/agent/test_safety.py +0 -0
  547. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/agent/test_session.py +0 -0
  548. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/agent/test_tools.py +0 -0
  549. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/commands/__init__.py +0 -0
  550. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/commands/test_cli.py +0 -0
  551. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/commands/test_docs.py +0 -0
  552. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/commands/test_json_contract.py +0 -0
  553. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/commands/test_project_commands.py +0 -0
  554. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/computer/__init__.py +0 -0
  555. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/computer/conftest.py +0 -0
  556. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/computer/test_browser_resilience.py +0 -0
  557. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/computer/test_browser_scripts.py +0 -0
  558. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/computer/test_computer.py +0 -0
  559. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/computer/test_live_browser.py +0 -0
  560. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/computer/test_live_ocr.py +0 -0
  561. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/computer/test_ocr_and_platforms.py +0 -0
  562. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/core/__init__.py +0 -0
  563. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/core/test_engine.py +0 -0
  564. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/core/test_errors_events.py +0 -0
  565. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/core/test_executor.py +0 -0
  566. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/detection/__init__.py +0 -0
  567. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/detection/test_detection.py +0 -0
  568. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/execution/__init__.py +0 -0
  569. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/execution/test_command.py +0 -0
  570. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/execution/test_process.py +0 -0
  571. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/execution/test_retry_parallel_cancel.py +0 -0
  572. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/git/__init__.py +0 -0
  573. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/git/test_parsers.py +0 -0
  574. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/git/test_repository.py +0 -0
  575. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/security/__init__.py +0 -0
  576. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/security/test_hardening_review.py +0 -0
  577. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/security/test_secrets_scanner.py +0 -0
  578. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/storage/__init__.py +0 -0
  579. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/storage/test_storage.py +0 -0
  580. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/test_approvals_policy.py +0 -0
  581. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/test_audit_regressions.py +0 -0
  582. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/test_automation.py +0 -0
  583. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/test_config_environment.py +0 -0
  584. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/test_cross_platform.py +0 -0
  585. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/test_dependencies_testing.py +0 -0
  586. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/test_deployment_database.py +0 -0
  587. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/test_gap_coverage.py +0 -0
  588. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/test_packaging.py +0 -0
  589. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/test_plugins.py +0 -0
  590. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/test_release.py +0 -0
  591. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/test_schemas_examples.py +0 -0
  592. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/test_services_docker.py +0 -0
  593. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/ui/__init__.py +0 -0
  594. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/workflows/__init__.py +0 -0
  595. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/workflows/test_conditions.py +0 -0
  596. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/workflows/test_dependency_graph.py +0 -0
  597. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/workflows/test_engine.py +0 -0
  598. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/workflows/test_parser_validator.py +0 -0
  599. {highhxcli-0.3.2 → highhxcli-0.4.0}/tests/unit/workflows/test_templates.py +0 -0
@@ -6,6 +6,63 @@ project uses [Semantic Versioning](https://semver.org/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.4.0] - 2026-09-27
10
+
11
+ One interactive HighhX for both plans: run `highhx` and describe what you want.
12
+
13
+ ### Added
14
+
15
+ - **Interactive session.** `highhx` with no arguments in a terminal opens the HighhX session
16
+ (`highhx agent` opens the same one). Free and Pro share the interface; the plan decides
17
+ which capabilities are attached. Status line: `Free • Local`, `Free • Connected`,
18
+ `Pro • Connected`, `Pro • Offline (cached)`, `… • Platform unavailable`.
19
+ - **Capabilities** (`highhx.cloud.capabilities`): local capabilities (commands, shell,
20
+ deterministic intents, deterministic automation) plus the platform-reported plan
21
+ features. The platform stays authoritative and enforces every AI request.
22
+ - **Free in the session:** known plain-language requests run the matching HighhX command
23
+ deterministically (the `highhx do` rules, no AI); `!command` runs shell commands through
24
+ the engine (risk, policy, approval, history); `highhx <command>` runs any command in place.
25
+ Requests that need AI show a **HighhX Pro capability** panel naming the capability, with
26
+ local alternatives (`[1-3] Continue locally`, `[p] View Pro`).
27
+ - **Platform resilience:** without the platform, local capabilities keep working; when the
28
+ AI gateway fails during a request, the session says so and offers the local route.
29
+ - **Plan changes apply in place:** `highhx login` / `/account` in the session re-checks the
30
+ account and attaches or detaches the AI agent.
31
+ - Slash commands `/tools`, `/config`, `/account`, `/pro`; agent-only commands explain
32
+ that they need Pro on Free.
33
+ - Input: `"""` blocks for multi-line input, readline-safe coloured prompt (clean redraw of
34
+ long lines and history), Ctrl+C at the prompt no longer cancels the application token.
35
+ - Tool outcomes distinguish blocked / declined (⊘) and cancelled (○) from failures (✗);
36
+ approvals render as panels.
37
+
38
+ ### Security
39
+
40
+ - The AI agent runtime is only constructed on a live confirmation from the platform:
41
+ `create_session` refuses a cached account, and a cached account grants no platform
42
+ capability (the cache is an editable local file). Previously an edited cache could start
43
+ the runtime offline (it still could not reach a model — the gateway checks every request).
44
+ - Free/Pro boundary tests: tripwires on every AI entry point, a static scan for
45
+ bring-your-own-key paths and vendor SDK imports, and an instrumented interpreter that
46
+ records environment lookups (no provider key is ever read on Free).
47
+
48
+ ### Fixed
49
+
50
+ - `highhx do` and the session no longer treat file names as websites or applications
51
+ (`open main.py` opened `https://main.py`).
52
+ - `highhx -v agent …`, `highhx -C DIR agent …` or a bare `highhx -v` typed inside the
53
+ session no longer start a nested session.
54
+ - An unexpected error in one command or agent turn no longer ends the session.
55
+ - Known requests that change files (`fix`, `install dependencies`) are confirmed first when
56
+ typed as free-form text in the session.
57
+ - A signed-in session that started offline attaches the AI agent once the platform is back.
58
+
59
+ ### Changed
60
+
61
+ - The startup banner is the same for Free and Pro ("Developer command center" with git
62
+ state and plan status).
63
+ - `highhx` outside a terminal, and with `--json` or `--quiet`, still prints the help (CI and
64
+ scripts are unaffected). One-shot `highhx agent "…"` requests still require Pro (exit 10).
65
+
9
66
  ## [0.3.0] - 2026-09-27
10
67
 
11
68
  Two plans, one platform: **Free** is deterministic HighhX; **Pro** adds the AI agent and AI
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: highhxcli
3
- Version: 0.3.2
3
+ Version: 0.4.0
4
4
  Summary: HighhX — the developer command center CLI, with HighhX Pro: an AI developer agent in your terminal.
5
5
  Author: HighhX contributors
6
6
  License-Expression: MIT
@@ -50,11 +50,13 @@ history of everything it did. Every risky action is classified and needs approva
50
50
 
51
51
  | | |
52
52
  |---|---|
53
- | **HighhX Free** | Deterministic HighhX: the full developer CLI plus browser/desktop automation with known targets (`highhx computer`, `highhx do`). Local, no account, no AI. |
54
- | **HighhX Pro** | Everything in Free plus `highhx agent` — an AI developer agent that plans, changes code, runs your tools, operates browsers and apps (AI computer use), recovers from failures and verifies the result. |
53
+ | **HighhX Free** | The interactive `highhx` session and the full developer CLI: known requests in plain language run locally without AI, plus every command, shell commands with risk checks and approvals, and browser/desktop automation with known targets (`highhx computer`, `highhx do`). Local, no account, no AI. |
54
+ | **HighhX Pro** | The same session with the AI developer agent attached — it plans, changes code, runs your tools, operates browsers and apps (AI computer use), recovers from failures and verifies the result. |
55
55
 
56
- Free and Pro share one execution platform: the same tools, safety policy, confirmations,
57
- verification and audit trail. The AI only chooses actions; it never gets its own way to run them.
56
+ Run `highhx` in a terminal and describe what you want. Free and Pro share one interface and
57
+ one execution platform: the same tools, safety policy, confirmations, verification and audit
58
+ trail. Your plan only decides which capabilities the session has — the HighhX platform grants
59
+ and enforces them. The AI only chooses actions; it never gets its own way to run them.
58
60
 
59
61
  ```text
60
62
  $ highhx doctor
@@ -79,6 +81,7 @@ Suggested actions
79
81
  - [Why HighhX](#why-highhx)
80
82
  - [Installation](#installation)
81
83
  - [Quick start](#quick-start)
84
+ - [The interactive session](#the-interactive-session)
82
85
  - [HighhX Pro: the AI developer agent](#highhx-pro-the-ai-developer-agent)
83
86
  - [Commands](#commands)
84
87
  - [Workflows](#workflows)
@@ -159,20 +162,79 @@ highhx logs # output of the last execution (secrets redacted)
159
162
  └── logs/ # execution logs (git-ignored)
160
163
  ```
161
164
 
165
+ ## The interactive session
166
+
167
+ `highhx` with no arguments, in a terminal, opens the HighhX session (`highhx agent` opens the
168
+ same one). Outside a terminal, and with `--json` or `--quiet`, it prints the help as before,
169
+ so scripts and CI are unaffected.
170
+
171
+ ```text
172
+ $ highhx
173
+
174
+ (the Knight) HighhX v0.4.0
175
+ Developer command center
176
+ ~/code/shop
177
+ main • clean
178
+ Free • Local
179
+
180
+ ❯ show git status
181
+
182
+ ◉ highhx git status
183
+ ✓ Working tree clean
184
+ ✓ highhx git status (0.1s)
185
+
186
+ ❯ Fix the failing tests
187
+
188
+ ╭─ HighhX Pro capability ─────────────────────────────╮
189
+ │ AI code changes require HighhX Pro. │
190
+ │ │
191
+ │ Available locally, without AI: │
192
+ │ 1 Run the tests highhx test │
193
+ │ 2 Diagnose the project highhx diagnose │
194
+ │ 3 Show recent logs highhx logs │
195
+ │ │
196
+ │ [1-3] Continue locally [p] View Pro │
197
+ ╰─────────────────────────────────────────────────────╯
198
+ ```
199
+
200
+ - **Plain language first.** On Free, requests that map to a known action (*run the tests*,
201
+ *run the checks*, *build*, *show git status*, *security scan*, *open localhost:3000* …)
202
+ run the matching HighhX command — deterministically, no AI. Requests that need
203
+ understanding name the Pro capability they need and offer the local commands that can
204
+ do part of the job. On Pro the AI agent handles every request.
205
+ - **`!command`** runs a shell command through the HighhX engine (risk classification,
206
+ policy, approval, history); **`highhx <command>`** runs any HighhX command in the session.
207
+ - **Input.** ↑/↓ history (kept across sessions), line editing, `\` at the end of a line or
208
+ a `"""` block for multi-line input, Ctrl+C interrupts the running request, Ctrl+D exits.
209
+ - **Status line.** `Free • Local`, `Free • Connected`, `Pro • Connected`,
210
+ `Pro • Offline (cached)` or `… • Platform unavailable`. Only a live answer from the
211
+ platform attaches the AI agent. When the platform cannot be reached, local capabilities
212
+ keep working and the session re-checks when a request needs the agent; if the gateway
213
+ fails during a Pro request, the session says so and offers the local route for it.
214
+ - **Deterministic means predictable.** Free never calls a model or reads a provider API key.
215
+ File names are never treated as websites (`open main.py` is not `https://main.py`), and
216
+ known requests that change files (`fix`, `install dependencies`) ask first.
217
+ - **Plan changes apply in place.** Run `highhx login` (or `/account` after upgrading) inside
218
+ the session and it re-checks your account: the AI agent attaches when the platform grants
219
+ it, and detaches when it no longer does.
220
+ - **Slash commands.** `/help` `/status` `/tools` `/context` `/config` `/account` `/usage`
221
+ `/history` `/memory` `/pro` `/clear` `/quit`, plus the agent's `/plan` `/model` `/mode`
222
+ `/changes` `/undo` (Pro).
223
+
162
224
  ## HighhX Pro: the AI developer agent
163
225
 
164
226
  ```text
165
- $ highhx agent
227
+ $ highhx
166
228
 
167
229
  ▗█▖
168
230
  ▐▀▌
169
231
  ▗ ▄ ▖
170
232
  ▗▚▐█▌▞▖
171
- ▗▚█▐█▌█▞▖ HighhX v0.3.0
172
- ▟█▐█▌█▙ AI Developer Agent · Pro
233
+ ▗▚█▐█▌█▞▖ HighhX v0.4.0
234
+ ▟█▐█▌█▙ Developer command center
173
235
  ▐▐█▌█▐█▌▌ ~/code/shop
174
- █▗▜▌█▐▛▖█
175
- █▐▙▘█▝▟▌█
236
+ █▗▜▌█▐▛▖█ main • clean
237
+ █▐▙▘█▝▟▌█ Pro • Connected
176
238
  ▐▐▜▌▄▐▛▌▌
177
239
  ▗▝▐▐▌█▐▌▌▘▖
178
240
  █▙▝█▌█▐█▘▟█
@@ -180,10 +242,7 @@ $ highhx agent
180
242
  ▀█▟▀ █ ▀▙█▀
181
243
  ▀▌ █ ▐▀
182
244
 
183
- Project shop
184
- Stack Python, FastAPI
185
- Branch main
186
- Status clean
245
+ Project shop Python, FastAPI
187
246
  AI Connected HighhX (managed)
188
247
 
189
248
  What would you like me to do? (/help for commands)
@@ -200,8 +259,10 @@ Proceed? [Y/n]
200
259
 
201
260
  ✓ Run tests — 3 tests failing (4.1s)
202
261
  ✓ Read src/shop/cart.py — 88 lines
203
- ⚠ Action requires approval
204
- Edit src/shop/cart.py (+2 -1)
262
+
263
+ ╭─ ⚠ Action requires approval ─────────────────────╮
264
+ │ Edit src/shop/cart.py (+2 -1) │
265
+ ╰──────────────────────────────────────────────────╯
205
266
  …diff…
206
267
  Proceed? [y/N/a=always this session] y
207
268
  ✓ Edit src/shop/cart.py — +2 -1
@@ -227,8 +288,8 @@ summarises it.
227
288
  choose `--mode auto-edit`); pushes, deploys and rollbacks always ask; production
228
289
  deploys need typed confirmation. The agent cannot leave the project, read secret files
229
290
  or touch `.git/`. `--mode read-only` investigates without changing anything.
230
- - **Slash commands.** `/help` `/status` `/plan` `/context` `/model` `/mode` `/history`
231
- `/changes` `/undo` `/memory` `/usage` `/clear` `/quit`.
291
+ - **Slash commands.** Everything from the [interactive session](#the-interactive-session), plus
292
+ `/plan` `/model` `/mode` `/changes` `/undo`.
232
293
  - **Sessions.** Saved per project: `highhx agent --continue`, `--resume ID`, `highhx agent sessions`.
233
294
  - **Scriptable.** `highhx agent "…"` outside a terminal (or with `--json`) handles one request
234
295
  and exits — `--yes --mode auto-edit` for unattended runs in CI.
@@ -243,7 +304,7 @@ summarises it.
243
304
  ```bash
244
305
  highhx login # browser sign-in (creates your account)
245
306
  highhx account upgrade # HighhX Pro checkout
246
- highhx agent # interactive
307
+ highhx # interactive session (also: highhx agent)
247
308
  highhx agent "why is the application crashing?"
248
309
  ```
249
310
 
@@ -7,11 +7,13 @@ history of everything it did. Every risky action is classified and needs approva
7
7
 
8
8
  | | |
9
9
  |---|---|
10
- | **HighhX Free** | Deterministic HighhX: the full developer CLI plus browser/desktop automation with known targets (`highhx computer`, `highhx do`). Local, no account, no AI. |
11
- | **HighhX Pro** | Everything in Free plus `highhx agent` — an AI developer agent that plans, changes code, runs your tools, operates browsers and apps (AI computer use), recovers from failures and verifies the result. |
10
+ | **HighhX Free** | The interactive `highhx` session and the full developer CLI: known requests in plain language run locally without AI, plus every command, shell commands with risk checks and approvals, and browser/desktop automation with known targets (`highhx computer`, `highhx do`). Local, no account, no AI. |
11
+ | **HighhX Pro** | The same session with the AI developer agent attached — it plans, changes code, runs your tools, operates browsers and apps (AI computer use), recovers from failures and verifies the result. |
12
12
 
13
- Free and Pro share one execution platform: the same tools, safety policy, confirmations,
14
- verification and audit trail. The AI only chooses actions; it never gets its own way to run them.
13
+ Run `highhx` in a terminal and describe what you want. Free and Pro share one interface and
14
+ one execution platform: the same tools, safety policy, confirmations, verification and audit
15
+ trail. Your plan only decides which capabilities the session has — the HighhX platform grants
16
+ and enforces them. The AI only chooses actions; it never gets its own way to run them.
15
17
 
16
18
  ```text
17
19
  $ highhx doctor
@@ -36,6 +38,7 @@ Suggested actions
36
38
  - [Why HighhX](#why-highhx)
37
39
  - [Installation](#installation)
38
40
  - [Quick start](#quick-start)
41
+ - [The interactive session](#the-interactive-session)
39
42
  - [HighhX Pro: the AI developer agent](#highhx-pro-the-ai-developer-agent)
40
43
  - [Commands](#commands)
41
44
  - [Workflows](#workflows)
@@ -116,20 +119,79 @@ highhx logs # output of the last execution (secrets redacted)
116
119
  └── logs/ # execution logs (git-ignored)
117
120
  ```
118
121
 
122
+ ## The interactive session
123
+
124
+ `highhx` with no arguments, in a terminal, opens the HighhX session (`highhx agent` opens the
125
+ same one). Outside a terminal, and with `--json` or `--quiet`, it prints the help as before,
126
+ so scripts and CI are unaffected.
127
+
128
+ ```text
129
+ $ highhx
130
+
131
+ (the Knight) HighhX v0.4.0
132
+ Developer command center
133
+ ~/code/shop
134
+ main • clean
135
+ Free • Local
136
+
137
+ ❯ show git status
138
+
139
+ ◉ highhx git status
140
+ ✓ Working tree clean
141
+ ✓ highhx git status (0.1s)
142
+
143
+ ❯ Fix the failing tests
144
+
145
+ ╭─ HighhX Pro capability ─────────────────────────────╮
146
+ │ AI code changes require HighhX Pro. │
147
+ │ │
148
+ │ Available locally, without AI: │
149
+ │ 1 Run the tests highhx test │
150
+ │ 2 Diagnose the project highhx diagnose │
151
+ │ 3 Show recent logs highhx logs │
152
+ │ │
153
+ │ [1-3] Continue locally [p] View Pro │
154
+ ╰─────────────────────────────────────────────────────╯
155
+ ```
156
+
157
+ - **Plain language first.** On Free, requests that map to a known action (*run the tests*,
158
+ *run the checks*, *build*, *show git status*, *security scan*, *open localhost:3000* …)
159
+ run the matching HighhX command — deterministically, no AI. Requests that need
160
+ understanding name the Pro capability they need and offer the local commands that can
161
+ do part of the job. On Pro the AI agent handles every request.
162
+ - **`!command`** runs a shell command through the HighhX engine (risk classification,
163
+ policy, approval, history); **`highhx <command>`** runs any HighhX command in the session.
164
+ - **Input.** ↑/↓ history (kept across sessions), line editing, `\` at the end of a line or
165
+ a `"""` block for multi-line input, Ctrl+C interrupts the running request, Ctrl+D exits.
166
+ - **Status line.** `Free • Local`, `Free • Connected`, `Pro • Connected`,
167
+ `Pro • Offline (cached)` or `… • Platform unavailable`. Only a live answer from the
168
+ platform attaches the AI agent. When the platform cannot be reached, local capabilities
169
+ keep working and the session re-checks when a request needs the agent; if the gateway
170
+ fails during a Pro request, the session says so and offers the local route for it.
171
+ - **Deterministic means predictable.** Free never calls a model or reads a provider API key.
172
+ File names are never treated as websites (`open main.py` is not `https://main.py`), and
173
+ known requests that change files (`fix`, `install dependencies`) ask first.
174
+ - **Plan changes apply in place.** Run `highhx login` (or `/account` after upgrading) inside
175
+ the session and it re-checks your account: the AI agent attaches when the platform grants
176
+ it, and detaches when it no longer does.
177
+ - **Slash commands.** `/help` `/status` `/tools` `/context` `/config` `/account` `/usage`
178
+ `/history` `/memory` `/pro` `/clear` `/quit`, plus the agent's `/plan` `/model` `/mode`
179
+ `/changes` `/undo` (Pro).
180
+
119
181
  ## HighhX Pro: the AI developer agent
120
182
 
121
183
  ```text
122
- $ highhx agent
184
+ $ highhx
123
185
 
124
186
  ▗█▖
125
187
  ▐▀▌
126
188
  ▗ ▄ ▖
127
189
  ▗▚▐█▌▞▖
128
- ▗▚█▐█▌█▞▖ HighhX v0.3.0
129
- ▟█▐█▌█▙ AI Developer Agent · Pro
190
+ ▗▚█▐█▌█▞▖ HighhX v0.4.0
191
+ ▟█▐█▌█▙ Developer command center
130
192
  ▐▐█▌█▐█▌▌ ~/code/shop
131
- █▗▜▌█▐▛▖█
132
- █▐▙▘█▝▟▌█
193
+ █▗▜▌█▐▛▖█ main • clean
194
+ █▐▙▘█▝▟▌█ Pro • Connected
133
195
  ▐▐▜▌▄▐▛▌▌
134
196
  ▗▝▐▐▌█▐▌▌▘▖
135
197
  █▙▝█▌█▐█▘▟█
@@ -137,10 +199,7 @@ $ highhx agent
137
199
  ▀█▟▀ █ ▀▙█▀
138
200
  ▀▌ █ ▐▀
139
201
 
140
- Project shop
141
- Stack Python, FastAPI
142
- Branch main
143
- Status clean
202
+ Project shop Python, FastAPI
144
203
  AI Connected HighhX (managed)
145
204
 
146
205
  What would you like me to do? (/help for commands)
@@ -157,8 +216,10 @@ Proceed? [Y/n]
157
216
 
158
217
  ✓ Run tests — 3 tests failing (4.1s)
159
218
  ✓ Read src/shop/cart.py — 88 lines
160
- ⚠ Action requires approval
161
- Edit src/shop/cart.py (+2 -1)
219
+
220
+ ╭─ ⚠ Action requires approval ─────────────────────╮
221
+ │ Edit src/shop/cart.py (+2 -1) │
222
+ ╰──────────────────────────────────────────────────╯
162
223
  …diff…
163
224
  Proceed? [y/N/a=always this session] y
164
225
  ✓ Edit src/shop/cart.py — +2 -1
@@ -184,8 +245,8 @@ summarises it.
184
245
  choose `--mode auto-edit`); pushes, deploys and rollbacks always ask; production
185
246
  deploys need typed confirmation. The agent cannot leave the project, read secret files
186
247
  or touch `.git/`. `--mode read-only` investigates without changing anything.
187
- - **Slash commands.** `/help` `/status` `/plan` `/context` `/model` `/mode` `/history`
188
- `/changes` `/undo` `/memory` `/usage` `/clear` `/quit`.
248
+ - **Slash commands.** Everything from the [interactive session](#the-interactive-session), plus
249
+ `/plan` `/model` `/mode` `/changes` `/undo`.
189
250
  - **Sessions.** Saved per project: `highhx agent --continue`, `--resume ID`, `highhx agent sessions`.
190
251
  - **Scriptable.** `highhx agent "…"` outside a terminal (or with `--json`) handles one request
191
252
  and exits — `--yes --mode auto-edit` for unattended runs in CI.
@@ -200,7 +261,7 @@ summarises it.
200
261
  ```bash
201
262
  highhx login # browser sign-in (creates your account)
202
263
  highhx account upgrade # HighhX Pro checkout
203
- highhx agent # interactive
264
+ highhx # interactive session (also: highhx agent)
204
265
  highhx agent "why is the application crashing?"
205
266
  ```
206
267
 
@@ -4,18 +4,46 @@ HighhX has exactly two plans:
4
4
 
5
5
  | | |
6
6
  |---|---|
7
- | **Free** | Deterministic HighhX: every CLI command, workflows, diagnostics, build/test, git, deploy, deterministic browser/desktop automation (`highhx computer`, `highhx do`). No AI, no account needed. |
8
- | **Pro** | Everything in Free **plus** `highhx agent`: natural-language tasks, AI planning, adaptive multi-step execution, recovery and replanning, and AI computer use. |
9
-
10
- Free and Pro share one execution platform: the same tools, safety policy, human
11
- confirmation, verification, audit trail, sessions and engine. Pro adds an intelligence
12
- layer that *chooses* actions; it never gets its own way to execute them.
7
+ | **Free** | The interactive `highhx` session with local capabilities: known plain-language requests run deterministically (no AI), every CLI command, `!shell` commands with approvals, workflows, diagnostics, build/test, git, deploy, deterministic browser/desktop automation (`highhx computer`, `highhx do`). No AI, no account needed. |
8
+ | **Pro** | The same session **plus** the AI agent: natural-language tasks, AI planning, adaptive multi-step execution, recovery and replanning, and AI computer use. |
9
+
10
+ Free and Pro share one interface and one execution platform: the same session, tools,
11
+ safety policy, human confirmation, verification, audit trail and engine. Pro adds an
12
+ intelligence layer that *chooses* actions; it never gets its own way to execute them.
13
+
14
+ ## Capabilities
15
+
16
+ `highhx.cloud.capabilities` decides what a session can do. Local capabilities
17
+ (`local.commands`, `local.shell`, `local.intents`, `local.automation`) are always
18
+ there. Platform capabilities are the plan features (`agent`, `agent.code_changes`,
19
+ `agent.commands`, `agent.git`, `agent.deploy`, `agent.computer_use`, `cloud.sessions`)
20
+ and exist only when the HighhX platform reports them for your account. The result
21
+ shapes the CLI only: the platform checks the plan on every AI request, so nothing
22
+ local can unlock a Pro capability. Only a live answer from the platform attaches the
23
+ agent: the locally cached account copy is shown (`Pro • Offline (cached)`) but grants
24
+ nothing, and `create_session` — the one constructor of the agent runtime — refuses it.
25
+ While the platform is unreachable the session keeps its local capabilities and re-checks
26
+ the platform (at most every 20 seconds) when a request needs the agent; when the platform
27
+ is back and grants Pro, the agent attaches and handles that request. If the gateway fails
28
+ during a Pro request, the session says so and offers the local route for it.
29
+
30
+ Free never calls a model, never reads a provider API key (there is no bring-your-own-key
31
+ path; provider keys live only on the platform) and never constructs the agent runtime —
32
+ `tests/unit/agent/test_free_pro_boundary.py` checks this with tripwires on every AI entry
33
+ point, a static scan of the package and an instrumented interpreter.
34
+
35
+ Requests that need a capability the session lacks show a **HighhX Pro capability**
36
+ panel naming it (AI code changes, AI git operations, AI-driven deployment, AI browser
37
+ and desktop automation, or the agent itself) with the HighhX commands that can do part
38
+ of the job locally — `[1-3] Continue locally` runs one of them, `[p] View Pro` shows the
39
+ plans. Nothing is blocked that Free can do: known requests run directly.
13
40
 
14
41
  ## Starting
15
42
 
16
43
  ```bash
17
44
  highhx login # once (Pro)
18
- highhx agent # interactive session in this project
45
+ highhx # interactive session in this project
46
+ highhx agent # the same session
19
47
  highhx agent "fix my failing tests" # interactive, starting with this request
20
48
  highhx agent --continue # continue the last session in this project
21
49
  highhx agent --resume s-20260927T101500-3f9a1c
@@ -31,7 +59,8 @@ highhx agent --json --mode read-only "find security issues" | jq -r .text
31
59
  ```
32
60
 
33
61
  Exit codes: `0` completed, `1` stopped early (step limit, output limit, refusal,
34
- cancellation, provider failure), `10` no HighhX Pro account.
62
+ cancellation, provider failure), `10` no HighhX Pro account. (One-shot requests are AI
63
+ requests, so they need Pro; the interactive session works on every plan.)
35
64
 
36
65
  ## How a request runs
37
66
 
@@ -1,5 +1,5 @@
1
1
  """HighhX — a local-first developer operations command center."""
2
2
 
3
- __version__ = "0.3.2"
3
+ __version__ = "0.4.0"
4
4
 
5
5
  __all__ = ["__version__"]
@@ -15,6 +15,7 @@ from highhx.agent.session import AgentSession, AgentUI
15
15
  from highhx.agent.settings import AgentSettings
16
16
  from highhx.agent.sync import SessionSync
17
17
  from highhx.cloud.plans import AGENT, CLOUD_SESSIONS
18
+ from highhx.core.errors import CloudError
18
19
 
19
20
  if TYPE_CHECKING:
20
21
  from highhx.cloud.account import Account, CloudAccount
@@ -62,8 +63,18 @@ def create_session(
62
63
  overrides: dict[str, Any] | None = None,
63
64
  resume: Resume | None = None,
64
65
  ) -> tuple[AgentSession, Account, bool]:
65
- """Returns ``(session, account, resumed)``. Raises unless the account includes the agent."""
66
+ """Returns ``(session, account, resumed)``. Raises unless the platform confirms the agent.
67
+
68
+ This is the only production path that constructs the agent runtime. It requires a live
69
+ answer from the platform: a cached account (platform unreachable) is refused, so an
70
+ edited local cache can never start the runtime (and every model request is checked by
71
+ the platform again anyway)."""
66
72
  account = cloud.require(AGENT, what="The HighhX AI developer agent")
73
+ if account.cached:
74
+ raise CloudError(
75
+ "The HighhX AI agent needs the HighhX platform, which cannot be reached right now.",
76
+ hint="Local HighhX commands keep working; try again when you are back online.",
77
+ )
67
78
  settings = resolve_settings(app, account, overrides or {})
68
79
  provider = build_provider(settings, cloud, account)
69
80
  context = gather(app)
@@ -0,0 +1,70 @@
1
+ """Reading requests in the interactive session.
2
+
3
+ Line editing, ↑/↓ history (persisted across sessions), Ctrl+R search and redraw on
4
+ terminal resize come from the platform's readline (GNU readline or libedit). The
5
+ prompt's colour codes are wrapped in readline's ignore markers so wrapped long lines
6
+ and recalled history redraw cleanly.
7
+
8
+ Multi-line input: end a line with ``\\`` to continue it, or open a block with a line
9
+ containing only ``\"\"\"`` and close it the same way (for pasting logs or code).
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ import contextlib
15
+ from collections.abc import Callable
16
+
17
+ from highhx.utils.paths import user_data_dir
18
+
19
+ HISTORY_FILE = "agent-input-history"
20
+ HISTORY_LENGTH = 1000
21
+ BLOCK = '"""'
22
+ PROMPT = "❯ " # noqa: RUF001
23
+ CONTINUATION = "… "
24
+ PROMPT_MARKUP = f"[bold magenta]{PROMPT}[/bold magenta]"
25
+ CONTINUATION_MARKUP = f"[dim]{CONTINUATION}[/dim]"
26
+
27
+
28
+ def setup_readline() -> Callable[[], None]:
29
+ """Load the input history; returns a function that saves it."""
30
+ try:
31
+ import readline
32
+ except ImportError: # pragma: no cover - Windows without pyreadline
33
+ return lambda: None
34
+ path = user_data_dir() / HISTORY_FILE
35
+ with contextlib.suppress(OSError):
36
+ readline.read_history_file(str(path))
37
+ readline.set_history_length(HISTORY_LENGTH)
38
+ with contextlib.suppress(Exception): # libedit and GNU readline name the binding differently
39
+ readline.parse_and_bind("tab: complete")
40
+
41
+ def save() -> None:
42
+ with contextlib.suppress(OSError):
43
+ path.parent.mkdir(parents=True, exist_ok=True)
44
+ readline.write_history_file(str(path))
45
+
46
+ return save
47
+
48
+
49
+ def ansi_prompt(text: str, sgr: str, *, color: bool) -> str:
50
+ """``text`` coloured with SGR ``sgr``, with the escapes hidden from readline's width count."""
51
+ if not color:
52
+ return text
53
+ return f"\001\033[{sgr}m\002{text}\001\033[0m\002"
54
+
55
+
56
+ def read_request(read_line: Callable[[str], str], *, prompt: str, continuation: str) -> str:
57
+ """One request: a line, ``\\``-continued lines, or a ``\"\"\"`` block. Raises EOFError / KeyboardInterrupt."""
58
+ first = read_line(prompt)
59
+ if first.strip() == BLOCK:
60
+ lines: list[str] = []
61
+ while True:
62
+ line = read_line(continuation)
63
+ if line.strip() == BLOCK:
64
+ return "\n".join(lines)
65
+ lines.append(line)
66
+ lines = [first]
67
+ while lines[-1].endswith("\\"):
68
+ lines[-1] = lines[-1][:-1]
69
+ lines.append(read_line(continuation))
70
+ return "\n".join(lines)
@@ -0,0 +1,76 @@
1
+ """Start the interactive HighhX session — used by bare ``highhx`` and by ``highhx agent``.
2
+
3
+ One entry point, one UI. The account's capabilities decide whether the AI agent
4
+ session is attached (HighhX Pro) or requests are handled locally (HighhX Free); a
5
+ platform that is unreachable or refuses the agent leaves the local capabilities.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import dataclasses
11
+ from typing import TYPE_CHECKING, Any
12
+
13
+ from highhx.cloud import capabilities
14
+ from highhx.cloud.capabilities import LOCAL, Capability, Connection
15
+ from highhx.core.errors import CloudError, HighhXError, UsageError
16
+
17
+ if TYPE_CHECKING:
18
+ from highhx.agent.bootstrap import Resume
19
+ from highhx.agent.session import AgentSession
20
+ from highhx.cloud.account import Account
21
+ from highhx.commands import App
22
+
23
+
24
+ def interactive_terminal(app: App) -> bool:
25
+ """True when the interactive session may start: a terminal on both ends and no --json / --quiet."""
26
+ options = app.options
27
+ if options.json or options.quiet or not options.is_interactive():
28
+ return False
29
+ return bool(app.output.console.is_terminal)
30
+
31
+
32
+ def start_interactive(
33
+ app: App,
34
+ *,
35
+ first: str | None = None,
36
+ overrides: dict[str, Any] | None = None,
37
+ resume: Resume | None = None,
38
+ ) -> int:
39
+ from highhx.agent.bootstrap import Resume, create_session
40
+ from highhx.agent.repl import AgentREPL
41
+ from highhx.agent.running import registered
42
+ from highhx.agent.ui import TerminalUI
43
+
44
+ if getattr(app, "interactive_session", False):
45
+ raise UsageError("You are already in the HighhX session.", hint="Type your request at the prompt.")
46
+ app.interactive_session = True # type: ignore[attr-defined]
47
+ out = app.output
48
+ cloud = app.cloud
49
+ ui = TerminalUI(out.console, out.symbols, interactive=True)
50
+ entitlements = capabilities.resolve(cloud)
51
+
52
+ def factory() -> tuple[AgentSession, Account, bool]:
53
+ return create_session(app, cloud, ui, overrides=overrides or {}, resume=Resume())
54
+
55
+ session: AgentSession | None = None
56
+ account: Account | None = entitlements.account
57
+ resumed = False
58
+ if entitlements.has(Capability.AI_AGENT):
59
+ try:
60
+ session, account, resumed = create_session(app, cloud, ui, overrides=overrides or {}, resume=resume)
61
+ except HighhXError as exc:
62
+ # The platform decides: when it refuses or cannot be reached (or the agent cannot be
63
+ # set up), the session starts with local capabilities instead of not at all.
64
+ problem = "HighhX platform unavailable." if isinstance(exc, CloudError) else exc.message
65
+ entitlements = dataclasses.replace(
66
+ entitlements,
67
+ capabilities=LOCAL,
68
+ connection=Connection.UNAVAILABLE,
69
+ problem=f"{problem} Local capabilities remain available.",
70
+ )
71
+ elif resume is not None and (resume.session_id or resume.latest):
72
+ ui.notice("info", "Saved agent sessions are part of HighhX Pro — starting a local session.")
73
+ repl = AgentREPL(session, ui, cloud, account, app=app, entitlements=entitlements, session_factory=factory)
74
+ session_id = session.record.id if session is not None and session.record else None
75
+ with registered(session_id, app.root):
76
+ return repl.run(first, resumed=resumed)
@@ -89,7 +89,7 @@ class PlatformProvider:
89
89
  ) from None
90
90
  if resumes >= MAX_RESUMES or (cancel is not None and cancel.cancelled):
91
91
  raise ModelProviderError(
92
- f"Streaming from the HighhX platform failed: {exc.message}", retryable=True
92
+ f"Streaming from the HighhX platform failed: {exc.message}", retryable=True, connection=True
93
93
  ) from None
94
94
  except _Gap as exc:
95
95
  reason = str(exc)