Skip to content

Release 0.4.0a1#19

Open
github-actions[bot] wants to merge 20 commits into
masterfrom
release-0.4.0a1
Open

Release 0.4.0a1#19
github-actions[bot] wants to merge 20 commits into
masterfrom
release-0.4.0a1

Conversation

@github-actions

@github-actions github-actions Bot commented Jul 5, 2026

Copy link
Copy Markdown

Human review requested!

JarbasAl and others added 20 commits August 3, 2023 15:14
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* feat!: modernize to hivemind-bus-client + pyproject packaging

Port the pre-rename Mycroft-era stack to the modern HiveMind ecosystem and
move packaging off setup.py.

- packaging: setup.py -> pyproject.toml with dynamic version
  (attr=hivemind_webchat.version.__version__); add __version__ + VERSION_BLOCK
  to version.py; drop tracked build/dist/egg-info artifacts; add .gitignore.
- deps: requirements.txt now tornado + hivemind-bus-client>=0.9.0,<1.0.0 +
  ovos-utils. all_in_one/requirements.txt drops jarbas_hive_mind==0.10.7 and
  the mycroft-lib pins.
- client port: new hivemind_webchat/bridge.py provides an optional headless
  WebchatBridge built on HiveMessageBusClient/HiveMessage/HiveMessageType.
  The browser UI keeps talking to the hub directly via HiveMind-js.
- all_in_one: launch.py rewritten to serve the UI + optional bridge; the
  bundled Mycroft bus.py/skills.py/config.json and the jarbas_hive_mind
  listener are removed (hub=hivemind-core, skills=ovos-core now). Dockerfile
  updated to python:3.11 + modern deps.
- CI: replace legacy publish_*/build/license/dev2master workflows with the
  OpenVoiceOS/gh-automations reusable set @dev (build-tests, license-check,
  publish-alpha/stable, conventional labels).
- tests: consolidate to a single tests/ dir; add tests/test_smoke.py covering
  import, version, server construction (no socket), and bridge construction
  (mocked client, no connect).

Refs #12

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat!: modernize JS consumer to HiveMind Protocol V1 client

Load the modernized HiveMind-js V1 client (PBKDF2 password handshake +
AES-GCM, native Web Crypto) from jsDelivr and drop the no-longer-needed
asmcrypto.js / webcrypto-shim.js. Wire app.js + index.html to the V1 API:
the connection form now takes a Password (used for the handshake) instead of
a raw encryption key, passed straight to connect(host, port, user, key, pw).

Add a Node end-to-end test (tests/e2e.mjs) that loads the exact client the
page ships, connects to a real loopback hivemind-core hub (tests/hub_fixture.py
via hivescope), performs the V1 handshake, and asserts the hub decrypts and
receives an encrypted utterance — plus an npm test script and a node CI
workflow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(ci): pin hivescope prerelease floor for js-e2e hub fixture

The js-e2e job installed plain `pip install hivescope`, which resolves
the stable hivescope 0.1.0 — that release predates the loopback +
get_client_by_id fixes (hivescope#26), so the loopback hub fixture saw 0
injected utterances and the handshake/round-trip test failed despite the
V1 handshake completing.

Pin the published prerelease floors so a plain pip install (no --pre, no
git branch) resolves the 2.x stack: hivescope>=0.5.1a1 and
hivemind-bus-client>=0.9.2a1.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(ci): floor hivemind-core to the 2.x prerelease line for js-e2e

The previous floor still let plain pip pull stable hivemind-core 4.0.0,
which pins an old bus-client and so conflicts with
hivemind-bus-client>=0.9.2a1 (ResolutionImpossible: 4.0.0 vs
ovos_bus_client>=2.0.0a3). Floor hivemind-core>=4.6.7a1 so the whole 2.x
stack (core + bus-client + ovos-bus-client>=2.0.0a3 + hivescope>=0.5.1a1)
resolves under a plain pip install with no --pre and no git branch.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat!: full-scope modernization — pyproject deps, shared CI, docs, Python e2e

Bring the modernization PR to the same bar as the modernized satellites.

Packaging (pyproject = single source of truth)
- Inline runtime deps into pyproject [project.dependencies]; drop
  requirements.txt, MANIFEST.in, and all_in_one/requirements.txt.
- Floor hivemind-bus-client>=0.9.2a1,<1.0.0 (2.x line; prerelease min-pin, no
  --pre). package-data ships static/ + templates/.
- Add [e2e] extra with the HiveMind 2.x stack + transitive prerelease floors
  (hivescope, hivemind-core, ovos-bus-client, ovos-plugin-manager,
  hivemind-ovos-agent-plugin, hivemind-plugin-manager, json-database,
  hivemind-sqlite-database, hivemind-json-db-plugin, hivemind-websocket-protocol,
  ovos-utils, ovos-workshop). `test` alias kept for shared CI. Resolves with uv,
  no --pre. Dockerfile no longer pins deps separately.

CI (shared OpenVoiceOS/gh-automations @dev only)
- build_tests: install_extras=e2e + smoke tests across py3.10-3.13.
- Add e2e_tests, coverage, lint, pip_audit, release_preview, repo_health.
- license_tests: exclude first-party HiveMind/OVOS packages. Keep js_e2e_tests.

docs/
- Full tree: index, getting-started, configuration, architecture (Python
  backend + JS frontend + headless bridge), deployment, dependencies, testing,
  troubleshooting. README gains docs + deps notes and a two-suite Tests section.

Python e2e (tests/e2e/)
- Real hivemind-core master in-process (hivescope loopback) + the real
  WebchatBridge over a real HiveMessageBusClient. Chat message -> hub ->
  recognizer_loop:utterance; hub speak -> routed back -> rendered. Only the
  browser/websocket frontend is mocked. No importorskip/skipif. Single tests/
  dir. JS e2e (js_e2e_tests) kept and verified.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test: use strong e2e satellite passphrase for poorman_handshake strength floor

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat: adopt HiveMind-js protocol v3 (Noise) with v1 fallback

The CDN-loaded hivemind-js client (dev) negotiates the highest protocol
version both peers support: v3 over the AES-GCM Noise suite where the hub
offers it, else the legacy v1 password handshake.

- connect() now forwards an options object (provisioned psk, server key pin)
  read from a new optional 'Protocol v3' section of the connect dialog
- password alone negotiates v3 against a PBKDF2-KDF hub; document the argon2id
  limitation (Web Crypto has no argon2id -> provisioned PSK required)
- add tests/v3_negotiation.test.mjs (+ test:v3 script) exercising the browser
  v3 negotiation + PBKDF2 PSK derivation path directly

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs: describe full v3 ChaChaPoly+argon2id parity (password alone suffices)

Against a v3 hub HiveMind-js negotiates the default ChaChaPoly Noise suite and
derives PSK = argon2id(password, SHA-256(node_id)) in-browser via @noble, with
full cipher parity to hivemind-core and no server-side configuration. Update the
README, the connect-dialog Protocol v3 help text, and code comments: the
password alone is enough; provisioned PSK and PBKDF2 remain optional fallbacks;
only a minimal bundle without @noble falls back to AES-GCM/PBKDF2. Code wiring
unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs: name the central server hivemind-core, not hub

Refer to the central server explicitly as hivemind-core throughout the README.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs: add pre-release warning

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant