Skip to content

Mac Access: extract the owned connector into reusable mac-connector-core #700

Description

@100yenadmin

Parent epic: #698
Depends on: #699 and merged/superseding PR #697 baseline.

Context

PR #697 places the owned Python bridge in Workbench resources. That removes the archived-repo dependency but still leaves Workbench packaging as the source layout. Mac Access and Workbench need one reusable package with one digest, one contract suite, and no copied runtime tree.

Required change

Create packages/mac-connector-core as the canonical connector source and packaging boundary. Move the PR #697 runtime into that package, then make existing Workbench resource preparation consume the package rather than a second source tree.

The mature Python implementation may remain for v0.1. If it does, expose it as an embedded runtime component with deterministic entry points and no dependency on system Python, Homebrew, or a customer-managed environment.

Implementation requirements

  • Preserve the current audited command, readiness, policy, queue, state, redaction, CUA adapter, kill-switch, and canary behavior.
  • Separate pure contracts/policy from filesystem, process, Keychain/native-host, HTTP, and WebSocket IO.
  • Provide a versioned manifest containing connector-core version, source commit, content digest, schema versions, supported engine capabilities, and build provenance.
  • Make scripts/prepareEvaosDesktopBridgeResource.js and Workbench packaging consume the core package deterministically.
  • Add a host interface so Mac Access can own lifecycle and native custody without importing Electron renderer or Workbench UI code.
  • Keep raw secrets, tokens, private endpoints, selected customer data, and screenshots out of default logs and fixtures.

Acceptance criteria

  1. packages/mac-connector-core is the only repository source of connector runtime modules.
  2. resources/evaos-beta/bridge is generated/copied from the package at build time or removed as a source location; tests fail if the two can drift.
  3. Workbench packages the same core digest reported by the package manifest.
  4. Core behavior and contract tests run without Electron UI and cover readiness, pairing envelopes, selected scope, CUA dispatch, audit, stop/revoke, kill switch, redaction, corrupt state, and restart recovery.
  5. A clean supported Mac can run the packaged core through a bundled runtime without /usr/bin/python3, Homebrew Python, pip, or a separately installed bridge.
  6. The package exposes a narrow host API for status, pair/unpair, connect/disconnect, access mode, action dispatch, audit summary, pause/revoke/kill, and shutdown.
  7. Existing Workbench focused tests remain green and no archived-repo checkout or runtime reference returns.
  8. Directory layout obeys repository architecture rules and no directory exceeds 10 direct children.

Testing plan

Layer Proof
Unit contract, policy, state, redaction, replay/expiry, and manifest digest fixtures
Integration host starts core, loopback/local IPC request, action response, stop, restart, corrupt state recovery
Packaging Workbench and Mac Access fixtures resolve the identical core digest
Regression existing PR #697 bridge/resource preparation and canary suites

Rollback

Revert the extraction while keeping the PR #697 vendored source and v2.1.36 publication gates intact. Never restore the archived repository as a build source.

Non-goals

  • no full Swift rewrite;
  • no menu-bar UI;
  • no live broker mutation;
  • no standalone release or customer-ready claim.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:native-companionNative macOS companion boundaryblockedCannot proceed without an external dependency or decisionenhancementNew feature or requestevaosevaOS public beta R&D workkind:integrationIntegration implementation issuerelease-train:runtime-reliabilityCross-version Workbench/runtime reliability release trainrisk:securitySecurity, auth, secrets, permission risk

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions