diff --git a/README.md b/README.md index ff37195..18c7505 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # Matrix SDK Matrix SDK is the package-author layer for building Matrix actors, browser -surfaces, and broker-connected applications without depending on the HiveCast +surfaces, and broker-connected applications without depending on a managed platform repo. -This repository contains the SDK packages that were split out of Matrix-3 and -renamed to their publishable `@open-matrix/*` package names. The split is +This repository contains the SDK packages renamed to their publishable +`@open-matrix/*` package names. The workspace is proven as a standalone workspace: a fresh clone can install, build, test, type-check, pack every package, and compile an external consumer against the packed tarballs. @@ -19,9 +19,15 @@ packed tarballs. - Browser host integrations for Matrix web surfaces - Package-author CLIs and project scaffolds -Matrix SDK is provider-neutral. It does not require HiveCast, Device Link, Host -Link, Host Service, or a local HiveCast install. HiveCast is one managed provider -that can issue broker credentials and host runtimes on top of the SDK. +Matrix SDK is provider-neutral. It does not require a managed platform account, +device-link ceremony, host-link implementation, managed host service, local +platform install, Postgres database, or provider-owned broker authority. A +provider overlay can issue broker credentials and host runtimes on top of the +SDK, but the SDK itself must remain usable against any compatible broker. + +See [STANDALONE-AUDIT.md](STANDALONE-AUDIT.md) for the current standalone +boundary audit, including the remaining Omega/oracle extraction debt that is not +part of the package-author SDK proof. ## Packages @@ -142,12 +148,13 @@ pnpm prove:cli-uat ``` The command name uses `uat`, but its scope is only the SDK package-author CLI -flow. It is not HiveCast product UAT, browser UAT, signup/login UAT, API-key UI -UAT, or live platform deployment proof. +flow. It is not managed-platform product UAT, browser signup/login UAT, +API-key UI UAT, or live deployment proof. The CLI is intended to let a package author initialize a folder, add actors, -configure broker access, run actors, and invoke them without importing HiveCast -product packages into the SDK layer. +configure broker access, run actors, and invoke them without importing provider +overlay packages into the SDK layer. Managed-host promotion is optional and is +only exercised when `MATRIX_SDK_RUNTIME_HOST_BIN` is supplied. ## Repository Layout @@ -170,7 +177,7 @@ scripts/ Done and proven: -- The SDK packages build independently from Matrix-3. +- The SDK packages build independently from their original source monorepo. - Package identities use final `@open-matrix/*` names. - `@open-matrix/sdk` re-exports the public actor facade. - A fresh clone passes `pnpm install --frozen-lockfile && pnpm prove`. @@ -180,17 +187,17 @@ Done and proven: Still planned: - Provider-neutral credential resolution for `matrix configure` and SDK users. -- `matrix login --provider hivecast` to write the same config shape as +- Provider login commands that write the same config shape as `matrix configure`. - Direct broker mode with explicit broker URL/JWT/seed credentials. -- HiveCast provider mode where HiveCast issues scoped broker credentials. +- Managed-provider mode where an overlay issues scoped broker credentials. - Publishing the packages to npm after the provider-login contract is complete. -## Relationship To HiveCast +## Relationship To Provider Overlays -Matrix SDK is the open, provider-neutral actor SDK. +Matrix SDK is the provider-neutral actor SDK. -HiveCast is a managed overlay on top of Matrix SDK. HiveCast can provide account -management, Spaces, API keys, broker credential issuance, runtime hosting, -package distribution, and operator UI. SDK users should still be able to connect -to another broker directly when they already manage their own broker credentials. +Provider overlays can provide account management, namespaces, API keys, broker +credential issuance, runtime hosting, package distribution, and operator UI. +SDK users should still be able to connect to another broker directly when they +already manage their own broker credentials. diff --git a/STANDALONE-AUDIT.md b/STANDALONE-AUDIT.md new file mode 100644 index 0000000..db22a1f --- /dev/null +++ b/STANDALONE-AUDIT.md @@ -0,0 +1,89 @@ +# Standalone SDK Audit + +Date: 2026-06-07 + +This repository is intended to be a standalone Matrix SDK repository. The SDK +packages must be usable without the HiveCast application monorepo, without +Matrix-3 path assumptions, and without platform-only concepts such as Device +Link, Host Link, system-auth, or gateway internals. + +## Current Result + +The SDK package surface is standalone enough for the current authoring proof: + +- A fresh consumer installs the SDK CLI as a package-manager dependency. +- `matrix init` creates a fresh author package. +- `matrix add actor` creates an actor importing `@open-matrix/core`. +- `matrix configure` writes package-local `.matrix` credentials/config. +- `matrix run` starts the actor directly. +- `matrix invoke` calls the actor through the SDK CLI. +- The generated package can be packed, installed into a separate consumer, run, + and invoked again. + +The proof script also checks that generated author-package files do not contain +legacy monorepo paths or upper-layer package dependencies. + +## Cleanup Completed + +- Root README now describes this as a provider-neutral SDK, not a HiveCast + application shard. +- Core package README and metadata use `@open-matrix/*` names and this repo URL. +- Browser host strings describe generic managed HTTP/broker surfaces instead of + HiveCast-specific local/dev URLs. +- CLI contracts describe standalone SDK boundaries and optional managed-host + integration without naming product-only packages as part of the SDK. +- The SDK CLI UAT proof no longer defaults to a HiveCast binary or + `dev.hivecast.ai`; managed-host proof requires explicit + `MATRIX_SDK_RUNTIME_HOST_BIN`. +- The internal theme manifest uses `@open-matrix/theme`. + +## Intentional Guard Strings + +Some upper-layer names remain only as forbidden-token checks inside proof +scripts. They are not dependencies, defaults, or runtime integration points. +They fail the proof if a generated SDK author package leaks those names. + +Examples: + +- `hivecast` +- `projects/matrix-3` +- `matrix-work-harness` +- `@matrix/mx-cli` + +## Remaining Structural Debt + +The repo still contains extraction residue that should be cleaned in the next +repo-hygiene slice: + +- Top-level `src/` is an Omega source tree used by `@open-matrix/omega-core` + through relative imports. +- `packages/oracle/` is not part of the current SDK workspace packages, but it + remains in the repository and some top-level Omega files reference it. +- Some non-workspace Omega/oracle files reference `@open-matrix/inference`. + Those are not part of the current SDK authoring proof, but they are not clean + standalone SDK shape. +- `packages/omega-core/build.mjs` still emits declarations from the broad Omega + tree with `--skipLibCheck` because the extraction has not yet been narrowed to + package-local source only. + +The next cleanup should copy the exact Omega subset used by +`@open-matrix/omega-core` into that package (or an explicit sibling package), +switch imports to package-local paths, remove the broad root `src/` dependency +from the build, and archive or extract oracle-specific code outside the SDK +repo surface. + +## Verification Commands + +Run from the repository root: + +```bash +pnpm prove:cli-uat +pnpm prove +``` + +Expected: + +- `prove:cli-uat` reports `ok: true`. +- `legacyMonorepoPathReferences` is `false`. +- `managedHostProof` is skipped unless `MATRIX_SDK_RUNTIME_HOST_BIN` is supplied. +- `prove` builds, tests, type-checks, and packs all workspace packages. diff --git a/packages/browser-host/src/HostedRuntimeRecovery.ts b/packages/browser-host/src/HostedRuntimeRecovery.ts index 11effe5..09286f1 100644 --- a/packages/browser-host/src/HostedRuntimeRecovery.ts +++ b/packages/browser-host/src/HostedRuntimeRecovery.ts @@ -88,7 +88,7 @@ export function resolveHostedRuntimeRecoveryPlan( if (href) { try { - const currentUrl = new URL(href, 'https://hivecast.ai'); + const currentUrl = new URL(href, 'https://matrix.invalid'); const hasExplicitTarget = currentUrl.searchParams.has('daemonRoot') || currentUrl.searchParams.has('daemonRealm'); const relativeCurrentHref = serializeRelativeUrl(currentUrl); actions.push({ @@ -105,14 +105,14 @@ export function resolveHostedRuntimeRecoveryPlan( key: 'auto', label: 'Use Auto', href: serializeRelativeUrl(autoUrl), - title: 'Clear the explicit runtime target and let HiveCast pick the current live target.', + title: 'Clear the explicit runtime target and let the shell pick the current live target.', }); } actions.push({ key: 'shell', label: 'Open Shell', href: `/apps/web/#dashboard?redirect=${encodeURIComponent(relativeCurrentHref)}`, - title: 'Open the HiveCast shell and return to this app after choosing a target.', + title: 'Open the Matrix shell and return to this app after choosing a target.', }); return { requestedRoot, @@ -131,7 +131,7 @@ export function resolveHostedRuntimeRecoveryPlan( key: 'shell', label: 'Open Shell', href: '/apps/web/#dashboard', - title: 'Open the HiveCast shell to inspect or switch attached leaves.', + title: 'Open the Matrix shell to inspect or switch attached runtimes.', }); return { diff --git a/packages/browser-host/src/MatrixDSLHost.ts b/packages/browser-host/src/MatrixDSLHost.ts index 4494468..eacac4b 100644 --- a/packages/browser-host/src/MatrixDSLHost.ts +++ b/packages/browser-host/src/MatrixDSLHost.ts @@ -334,7 +334,7 @@ export interface BootstrapOptions { * @example Federated (NATS backbone for cross-root) * ```html * - * + * * * * ``` @@ -2008,7 +2008,7 @@ export class MatrixDSLHost extends HTMLElement { || this._isAuthoritativeBootstrapIdentitySource(selectedAuthorityRootSource); const authenticated = this.dataset.authenticated === 'true' || this._isAuthenticated === true; - // Host Service deployments discover authority runtime state through + // Managed host deployments discover authority runtime state through // system.runtimes. Retired actor paths are not a product path. return authenticated && rootCameFromAuthoritativeBootstrap && selectedAuthorityRoot === root; } @@ -2101,7 +2101,7 @@ export class MatrixDSLHost extends HTMLElement { lines.push(healthLine, bootstrapLine); return classify( 'nats-jwt-bootstrap', - 'The HiveCast HTTP surface may still be up. This usually means session-to-bus auth or first-boot provisioning failed, not that the whole Host is down.', + 'The Matrix HTTP surface may still be up. This usually means session-to-bus auth or first-boot provisioning failed, not that the whole host is down.', ); } @@ -2111,13 +2111,13 @@ export class MatrixDSLHost extends HTMLElement { lines.push(`HTTP /healthz: ${healthResp.status} ${healthResp.ok ? 'ok' : 'not ok'}`); return classify( 'http-bootstrap', - 'The browser reached the HiveCast origin but a bootstrap HTTP request failed. Check /api/bootstrap and auth/session routes before assuming the Host is down.', + 'The browser reached the Matrix origin but a bootstrap HTTP request failed. Check /api/bootstrap and auth/session routes before assuming the host is down.', ); } catch (error) { lines.push(`HTTP /healthz: unreachable (${error instanceof Error ? error.message : String(error)})`); return classify( 'host-gateway-unreachable', - 'The browser cannot reach the HiveCast HTTP gateway at all. This is the closest thing to “Host is down” in the bootstrap path.', + 'The browser cannot reach the Matrix HTTP gateway at all. This is the closest thing to “host is down” in the bootstrap path.', ); } } @@ -3230,7 +3230,7 @@ export class MatrixDSLHost extends HTMLElement { lastError = err instanceof Error ? err.message : String(err); // eslint-disable-next-line no-console -- browser bootstrap, not an actor console.warn( - `[MatrixDSLHost] Host Service runtime discovery failed at "${discoveryTarget.target}": ${lastError}.`, + `[MatrixDSLHost] Managed host runtime discovery failed at "${discoveryTarget.target}": ${lastError}.`, ); } } @@ -3445,13 +3445,13 @@ export class MatrixDSLHost extends HTMLElement { * (`system.runtimes`). Browser tabs claim child actors in `system.registry` * via `registry.claim`, but `system.runtimes.runtimes.list` is fed by * runtime presence — without this call, browser tabs are invisible to - * Director Topology, Host Ops Workloads, and any other consumer of the + * runtime inventory UIs, workload views, and any other consumer of the * runtime directory. * * We route through the explicit `runtimes.presence.update` op via * `RequestReply.execute("${controlPlaneRoot}/system.runtimes", ...)`, NOT through * `publishRuntimePresence(ctx, record, event)`. The pub/sub path uses bare - * `$runtime.*` topics on the local transport — in federated HiveCast mode + * `$runtime.*` topics on the local transport — in federated broker mode * the tab realm is a synthetic per-tab root (`s-b-root-*`) so the publish * lands on a NATS subject prefix the `RuntimeManagerActor` at the * authority root never subscribes to. Routed RequestReply.execute uses @@ -3683,7 +3683,7 @@ export class MatrixDSLHost extends HTMLElement { // Explicit authority URLs already declare the target identity in the // path. Do not probe platform-local actors such as system.auth or // system.directory here; that turns a shareable user URL into a hidden - // HiveCast-local lookup and can wait on unrelated platform timeouts. + // provider-local lookup and can wait on unrelated platform timeouts. console.info('[MatrixDSLHost] Phase B platform probe skipped for explicit authority URL - retaining explicit authority root'); finishPhaseBProfile({ result: 'skipped-explicit-authority', @@ -4091,7 +4091,7 @@ const RESERVED_ROUTE_KEYS = new Set([ 'well-known', 'favicon.ico', 'manifest.json', - 'hivecast', + 'provider', 'open-matrix', 'me', ]); diff --git a/packages/browser-host/src/__tests__/BundleFreshness.spec.ts b/packages/browser-host/src/__tests__/BundleFreshness.spec.ts index 352bf4e..0c981cb 100644 --- a/packages/browser-host/src/__tests__/BundleFreshness.spec.ts +++ b/packages/browser-host/src/__tests__/BundleFreshness.spec.ts @@ -9,8 +9,8 @@ describe('htmlReferencesBundle', () => { assert.equal( htmlReferencesBundle( html, - 'https://dev.hivecast.ai/apps/director/assets/index-new.js', - 'https://dev.hivecast.ai/apps/director/', + 'https://example.invalid/apps/director/assets/index-new.js', + 'https://example.invalid/apps/director/', ), true, ); @@ -21,8 +21,8 @@ describe('htmlReferencesBundle', () => { assert.equal( htmlReferencesBundle( html, - 'https://local.hivecast.ai/apps/web/index.ts', - 'https://local.hivecast.ai/apps/web/', + 'https://local.example.invalid/apps/web/index.ts', + 'https://local.example.invalid/apps/web/', ), true, ); @@ -33,8 +33,8 @@ describe('htmlReferencesBundle', () => { assert.equal( htmlReferencesBundle( html, - 'https://dev.hivecast.ai/apps/director/assets/index-old.js', - 'https://dev.hivecast.ai/apps/director/', + 'https://example.invalid/apps/director/assets/index-old.js', + 'https://example.invalid/apps/director/', ), false, ); diff --git a/packages/browser-host/src/boundary-identifiers.md b/packages/browser-host/src/boundary-identifiers.md index c561af1..0b80f11 100644 --- a/packages/browser-host/src/boundary-identifiers.md +++ b/packages/browser-host/src/boundary-identifiers.md @@ -1,9 +1,9 @@ # Boundary Identifiers — In-Package Reference If you're editing files in this package, you must know which identifier -you're touching. Full spec: -`WORKSTREAMS/platform-control-plane-freeze/FOUR-ROOTS-DISENTANGLE.md` -(working title preserved for grep continuity). +you're touching. This file is the in-package boundary contract for the SDK +browser host. Provider overlays may maintain their own deployment-specific +mapping docs, but boundary names exported by this package stay provider-neutral. ## The Four Boundary Identifiers @@ -41,10 +41,9 @@ discipline is at the seams. in new code. The `root` attribute is ambiguous — it has meant all four identifiers at different times in git history. Pick the specific one. -3. **No fallbacks.** Per CLAUDE.md "no fallbacks or legacy crutches," - if `appName` is missing from a bootstrap that needs it, **throw**. - Do not silently degrade to using `subjectScope` in the `appName` slot — - that's the wire-crossing bug this workstream exists to fix. +3. **No implicit substitution.** If `appName` is missing from a bootstrap that + needs it, **throw**. Do not silently degrade to using `subjectScope` in the + `appName` slot; that creates wire-crossing bugs. 4. **Forbidden boundary names** (do not introduce in new code at boundaries): - `root` — meant all four at different times diff --git a/packages/cli/CONTRACT.md b/packages/cli/CONTRACT.md index fba8d26..fb1dd9e 100644 --- a/packages/cli/CONTRACT.md +++ b/packages/cli/CONTRACT.md @@ -10,13 +10,11 @@ It may depend on: It must not depend on: -- `@matrix/mx-cli` -- `@open-matrix/host-service` -- `@open-matrix/host-control` -- `@open-matrix/system-*` -- `@open-matrix/system-auth` -- `@open-matrix/system-gateway-http` -- `@open-matrix/nats-auth` -- `hivecast` +- legacy product CLI packages +- provider overlay CLIs +- managed host or host-control packages +- platform system actor packages +- gateway/auth packages +- broker-authority/signing packages User packages must depend on SDK libraries, not on this CLI package. diff --git a/packages/cli/README.md b/packages/cli/README.md index 2f841f1..26301bc 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -3,8 +3,8 @@ Package-author CLI for the Matrix SDK layer. This package owns the SDK/package-author `matrix` binary. It does not depend on -Matrix-3 product packages, Host Service, Host Control, system actors, HiveCast, -Device Link, or NATS authority packages. +provider overlay packages, managed host packages, platform system actors, +device-link implementations, or broker-authority/signing packages. Initial command surface: @@ -17,7 +17,7 @@ matrix run --mount matrix invoke [json] ``` -`matrix run` starts a standalone actor runner in the current folder. `matrix -invoke` sends a Matrix request envelope to that runner through its local control -port. Managed Runtime Host promotion belongs to the later Matrix-3/Runtime Host -repoint phase. +`matrix run` starts a standalone actor runner in the current folder. +`matrix invoke` sends a Matrix request envelope to that runner through its local +control port. Managed host promotion belongs to provider overlays that consume +the SDK; it is not an SDK-layer requirement. diff --git a/packages/cli/src/__tests__/cli.test.ts b/packages/cli/src/__tests__/cli.test.ts index 76482cc..3bd842b 100644 --- a/packages/cli/src/__tests__/cli.test.ts +++ b/packages/cli/src/__tests__/cli.test.ts @@ -56,7 +56,7 @@ test('init, add actor, and configure write package-local SDK state', async () => assert.equal(credentialMode, 0o600); }); -test('up delegates a Host-runnable package to an explicit Runtime Host command', async () => { +test('up delegates a host-runnable package to an explicit managed host command', async () => { const root = await mkdtemp(join(tmpdir(), 'matrix-sdk-cli-up-test.')); const fakeRuntimeHost = join(root, 'fake-runtime-host.mjs'); const calledPath = join(root, 'runtime-host-called.json'); diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts index a44452f..e6ced73 100644 --- a/packages/cli/src/cli.ts +++ b/packages/cli/src/cli.ts @@ -663,7 +663,7 @@ async function upCommand(rawArgs: string[]): Promise { ?? optionalString(config.runtimeHostBin) ?? process.env.MATRIX_RUNTIME_HOST_BIN; if (!runtimeHostBin) { - throw new Error('MATRIX_RUNTIME_HOST_BIN_REQUIRED: matrix up requires --runtime-host-bin or MATRIX_RUNTIME_HOST_BIN pointing to the Runtime Host matrix command'); + throw new Error('MATRIX_RUNTIME_HOST_BIN_REQUIRED: matrix up requires --runtime-host-bin or MATRIX_RUNTIME_HOST_BIN pointing to a managed host matrix command'); } const routing = stringOption(parsed.options, 'runtime-host-routing') ?? optionalString(config.runtimeHostRouting) @@ -696,7 +696,7 @@ async function upCommand(rawArgs: string[]): Promise { }); if (result.error) throw result.error; if (result.status !== 0) { - throw new Error(`matrix up Runtime Host command failed with exit ${result.status ?? 'unknown'}`); + throw new Error(`matrix up managed host command failed with exit ${result.status ?? 'unknown'}`); } } diff --git a/packages/contracts/src/runtime-presence.ts b/packages/contracts/src/runtime-presence.ts index 6d9fdd8..5c06eea 100644 --- a/packages/contracts/src/runtime-presence.ts +++ b/packages/contracts/src/runtime-presence.ts @@ -59,7 +59,7 @@ export interface RuntimePresenceRecordV1 { /** Optional: authority root for deployment/ownership plane. */ authorityRoot?: string; - /** Optional: platform root for HiveCast/hosting plane. */ + /** Optional: provider overlay root for hosting plane metadata. */ platformRoot?: string; /** Optional: human-readable application name. */ diff --git a/packages/core/README.md b/packages/core/README.md index c9c3d93..83fbb61 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -1,11 +1,11 @@ -# @matrix/core +# @open-matrix/core Matrix runtime SDK — actors, Web Components, transports, serialization, and LISP-on-Protocol. ## Install ```bash -npm install @matrix/core +npm install @open-matrix/core ``` ## Usage @@ -13,7 +13,7 @@ npm install @matrix/core ### Headless Actor (daemon-side) ```typescript -import { MatrixActor } from '@matrix/core'; +import { MatrixActor } from '@open-matrix/core'; class PingActor extends MatrixActor { static accepts = { @@ -32,7 +32,7 @@ class PingActor extends MatrixActor { ### Browser Web Component ```typescript -import { MatrixActorHtmlElement } from '@matrix/core'; +import { MatrixActorHtmlElement } from '@open-matrix/core'; class StatusPanel extends MatrixActorHtmlElement { static accepts = { showStatus: { text: 'string' } }; @@ -50,11 +50,11 @@ customElements.define('status-panel', StatusPanel); ### Programmatic Runtime ```typescript -import { MatrixRuntime, InMemoryBroker } from '@matrix/core'; +import { InMemoryBroker, InMemoryTransport, MatrixRuntime } from '@open-matrix/core'; const broker = new InMemoryBroker(); -const runtime = new MatrixRuntime({ broker }); -await runtime.start(); +const transport = new InMemoryTransport(broker, { name: 'demo' }); +const runtime = new MatrixRuntime({ transport }); ``` ## What's Included diff --git a/packages/core/package.json b/packages/core/package.json index afc8298..5b201ce 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -7,7 +7,7 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/nicholasgalante/Matrix-3.git", + "url": "https://github.com/matrix-sdk/matrix-sdk.git", "directory": "packages/core" }, "keywords": [ diff --git a/packages/core/src/contracts/WellKnownServiceContracts.ts b/packages/core/src/contracts/WellKnownServiceContracts.ts index 0b6c58c..22b1aee 100644 --- a/packages/core/src/contracts/WellKnownServiceContracts.ts +++ b/packages/core/src/contracts/WellKnownServiceContracts.ts @@ -61,7 +61,7 @@ export const UserDevicesContract: ServiceContract = { }, }, 'devices.revoke': { - description: 'Revoke/unlink one account-level Device Link.', + description: 'Revoke/unlink one account-level device credential.', payload: { authorityRoot: { type: 'string', required: false }, deviceId: { type: 'string', required: true }, diff --git a/packages/core/src/framework/components/matrix.json b/packages/core/src/framework/components/matrix.json index 5f447e5..29d5a00 100644 --- a/packages/core/src/framework/components/matrix.json +++ b/packages/core/src/framework/components/matrix.json @@ -1,5 +1,5 @@ { - "name": "@matrix/theme", + "name": "@open-matrix/theme", "version": "0.1.0", "description": "Design token management and theme switching for Matrix components", "components": [ diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 094c3e3..dd9d2e6 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -354,7 +354,7 @@ export type { // Browser Runtime export { BrowserDomStrategy } from './runtime/BrowserDomStrategy'; // MatrixDSLHost and BootstrapOptions moved to @open-matrix/browser-host -// during Phase 1 of core-decontamination (see WORKSTREAMS/core-decontamination). +// during the core package split. // Import from '@open-matrix/browser-host/host' instead. // Remoting — ComponentProxy diff --git a/packages/core/src/lisp/core/SExprParser.ts b/packages/core/src/lisp/core/SExprParser.ts index f4b2e99..85c5936 100644 --- a/packages/core/src/lisp/core/SExprParser.ts +++ b/packages/core/src/lisp/core/SExprParser.ts @@ -4,7 +4,7 @@ // Input: (define (square x) (* x x)) // Output: ["define", ["square", "x"], ["*", "x", "x"]] // -// This enables running actual Scheme/LISP code on Matrix-3 +// This enables running actual Scheme/LISP code on Matrix. import type { SExpr } from '../SExpr'; diff --git a/packages/core/src/lisp/index.ts b/packages/core/src/lisp/index.ts index 8e05e79..faabbe0 100644 --- a/packages/core/src/lisp/index.ts +++ b/packages/core/src/lisp/index.ts @@ -1,7 +1,7 @@ // src/lisp/index.ts // LISP-on-Protocol - Public API // -// This module provides the core LISP evaluation engine for Matrix-3. +// This module provides the core LISP evaluation engine for Matrix. // It enables: // - S-expression parsing (traditional LISP syntax to JSON wire format) // - Pure LISP evaluation (standalone or Matrix-integrated) diff --git a/packages/core/src/runtime/MatrixRuntime.ts b/packages/core/src/runtime/MatrixRuntime.ts index cb8fc07..f5fd6c1 100644 --- a/packages/core/src/runtime/MatrixRuntime.ts +++ b/packages/core/src/runtime/MatrixRuntime.ts @@ -76,7 +76,7 @@ interface ComponentInfo { } /** - * MatrixRuntime — the ONE unified runtime for Matrix-3. + * MatrixRuntime — the unified runtime for Matrix actors. * * Supports both headless (no DOM) and browser (with IDomStrategy) modes. * diff --git a/packages/sdk/CONTRACT.md b/packages/sdk/CONTRACT.md index 263d410..d01f284 100644 --- a/packages/sdk/CONTRACT.md +++ b/packages/sdk/CONTRACT.md @@ -13,6 +13,6 @@ It may export from the Node-safe root: Browser app build utilities remain in `@open-matrix/browser-kit` and are imported directly from that package. -It must not depend on Matrix-3 product packages, Host Service, Host Control, -system actors, HiveCast installer state, Device Link state, Postgres, or NATS -authority/signing packages. +It must not depend on provider overlay packages, managed host packages, +platform system actors, installer state, device-link state, Postgres, or +broker-authority/signing packages. diff --git a/scripts/prove-sdk-cli-uat.mjs b/scripts/prove-sdk-cli-uat.mjs index 2fd03f1..5356fbd 100644 --- a/scripts/prove-sdk-cli-uat.mjs +++ b/scripts/prove-sdk-cli-uat.mjs @@ -10,8 +10,6 @@ import { fileURLToPath } from 'node:url'; const scriptDir = path.dirname(fileURLToPath(import.meta.url)); const sourceWorkspaceDir = path.resolve(scriptDir, '..'); let workspaceDir = sourceWorkspaceDir; -const repoProjectsDir = path.resolve(sourceWorkspaceDir, '..'); -const defaultRuntimeHostBin = path.join(repoProjectsDir, 'matrix-3', 'packages', 'hivecast', 'bin', 'matrix.mjs'); const packages = [ '@open-matrix/contracts', @@ -236,8 +234,10 @@ async function main() { let keep = process.env.MATRIX_SDK_KEEP_CLI_UAT === '1'; let runner; let packageRunner; - const runtimeHostBin = process.env.MATRIX_SDK_RUNTIME_HOST_BIN || defaultRuntimeHostBin; + const runtimeHostBin = envString('MATRIX_SDK_RUNTIME_HOST_BIN'); + const managedHostProofEnabled = Boolean(runtimeHostBin); let runtimeHostStarted = false; + let managedHostProof = null; try { await mkdir(tarballDir, { recursive: true }); @@ -296,19 +296,24 @@ async function main() { if (liveKeyConfig) { liveKeyValidation = await validateLiveKeyConfig(liveKeyConfig); } - const configureKey = liveKeyConfig?.key ?? 'hc_uat_key_redacted'; - const configureCloud = liveKeyConfig?.cloud ?? 'https://dev.hivecast.ai'; + const configureKey = liveKeyConfig?.key ?? 'matrix_sdk_test_key_redacted'; + const configureCloud = liveKeyConfig?.cloud ?? 'https://example.invalid'; const configureSpace = liveKeyConfig?.space ?? 'fresh-sdk-space'; - run('pnpm', [ + const configureArgs = [ 'exec', 'matrix', 'configure', '--dir', authorDir, '--key', configureKey, '--cloud', configureCloud, '--space', configureSpace, - '--runtime-host-bin', runtimeHostBin, - '--runtime-host-routing', 'workspace-source', - ], { cwd: toolingDir }); + ]; + if (runtimeHostBin) { + configureArgs.push( + '--runtime-host-bin', runtimeHostBin, + '--runtime-host-routing', 'workspace-source', + ); + } + run('pnpm', configureArgs, { cwd: toolingDir }); run('pnpm', ['install', '--ignore-scripts'], { cwd: authorDir }); run('pnpm', ['run', 'build'], { cwd: authorDir }); @@ -365,39 +370,55 @@ async function main() { await stopChild(runner); runner = undefined; - if (!existsSync(runtimeHostBin)) { - throw new Error(`Runtime Host matrix command not found for managed proof: ${runtimeHostBin}`); - } - const up = run('pnpm', [ - 'exec', 'matrix', 'up', - '--dir', authorDir, - '--http-port', 'auto', - '--host-nats-port', 'auto', - '--host-nats-ws-port', 'auto', - '--runtime-id', 'SDK-UAT-GREETER', - '--json', - '--timeout', '45000', - ], { cwd: toolingDir, stdio: 'pipe' }); - runtimeHostStarted = true; - const upResult = parseJsonFromOutput(up.stdout, 'matrix up'); - if (upResult.ok !== true || upResult.mode !== 'natural-launch-up') { - throw new Error(`Unexpected matrix up output: ${up.stdout}`); - } - const upService = upResult.services?.find?.((service) => service.runtimeId === 'SDK-UAT-GREETER'); - if (!upService || upService.ok !== true) { - throw new Error(`matrix up did not start SDK-UAT-GREETER: ${up.stdout}`); - } - const managedInvokeOutput = runRuntimeHost(runtimeHostBin, [ - 'invoke', - 'demo.greeter', - 'getStatus', - '{}', - '--json', - '--timeout', '10000', - ], { cwd: authorDir, stdio: 'pipe' }); - const managedInvoke = parseJsonFromOutput(managedInvokeOutput.stdout, 'managed matrix invoke'); - if (managedInvoke.ok !== true || managedInvoke.result?.mount !== 'demo.greeter') { - throw new Error(`Unexpected managed matrix invoke output: ${managedInvokeOutput.stdout}`); + if (managedHostProofEnabled) { + if (!runtimeHostBin || !existsSync(runtimeHostBin)) { + throw new Error(`Managed host matrix command not found for optional managed proof: ${runtimeHostBin}`); + } + const up = run('pnpm', [ + 'exec', 'matrix', 'up', + '--dir', authorDir, + '--http-port', 'auto', + '--host-nats-port', 'auto', + '--host-nats-ws-port', 'auto', + '--runtime-id', 'SDK-UAT-GREETER', + '--json', + '--timeout', '45000', + ], { cwd: toolingDir, stdio: 'pipe' }); + runtimeHostStarted = true; + const upResult = parseJsonFromOutput(up.stdout, 'matrix up'); + if (upResult.ok !== true || upResult.mode !== 'natural-launch-up') { + throw new Error(`Unexpected matrix up output: ${up.stdout}`); + } + const upService = upResult.services?.find?.((service) => service.runtimeId === 'SDK-UAT-GREETER'); + if (!upService || upService.ok !== true) { + throw new Error(`matrix up did not start SDK-UAT-GREETER: ${up.stdout}`); + } + const managedInvokeOutput = runRuntimeHost(runtimeHostBin, [ + 'invoke', + 'demo.greeter', + 'getStatus', + '{}', + '--json', + '--timeout', '10000', + ], { cwd: authorDir, stdio: 'pipe' }); + const managedInvoke = parseJsonFromOutput(managedInvokeOutput.stdout, 'managed matrix invoke'); + if (managedInvoke.ok !== true || managedInvoke.result?.mount !== 'demo.greeter') { + throw new Error(`Unexpected managed matrix invoke output: ${managedInvokeOutput.stdout}`); + } + managedHostProof = { + runtimeHostBin, + up: { + ok: upResult.ok, + mode: upResult.mode, + runtimeId: upService.runtimeId, + packageDir: upService.packageDir, + }, + invoke: { + ok: managedInvoke.ok, + target: managedInvoke.target, + result: managedInvoke.result, + }, + }; } run('pnpm', ['pack', '--pack-destination', packageTarballDir], { cwd: authorDir, stdio: 'pipe' }); @@ -461,7 +482,7 @@ async function main() { authorDir, cliInstalledSeparately: true, authorPackageDependsOnCli: false, - matrix3PathReferences: false, + legacyMonorepoPathReferences: false, actorImport: '@open-matrix/core', configuredKeyStored: existsSync(path.join(authorDir, '.matrix', 'credentials', 'matrix-api-key.json')), validKeyConfigSupplied: Boolean(liveKeyConfig), @@ -471,19 +492,9 @@ async function main() { ok: invoked.ok, result: invoked.result, }, - managedRuntimeHost: { - runtimeHostBin, - up: { - ok: upResult.ok, - mode: upResult.mode, - runtimeId: upService.runtimeId, - packageDir: upService.packageDir, - }, - invoke: { - ok: managedInvoke.ok, - target: managedInvoke.target, - result: managedInvoke.result, - }, + managedHostProof: managedHostProof ?? { + skipped: true, + reason: 'MATRIX_SDK_RUNTIME_HOST_BIN not supplied', }, packageManagerInstall: { tarball: path.basename(authorPackageTarball), @@ -503,11 +514,11 @@ async function main() { } finally { if (runner) await stopChild(runner); if (packageRunner) await stopChild(packageRunner); - if (runtimeHostStarted) { + if (runtimeHostStarted && runtimeHostBin) { try { runRuntimeHost(runtimeHostBin, ['stop', '--timeout', '15000'], { cwd: authorDir, stdio: 'pipe' }); } catch (error) { - console.error(`[prove-sdk-cli-uat] failed to stop Runtime Host: ${error instanceof Error ? error.message : String(error)}`); + console.error(`[prove-sdk-cli-uat] failed to stop managed host: ${error instanceof Error ? error.message : String(error)}`); } } if (!keep) {