Browse Source

chore(repo): move every package to the @controlstack scope

Consolidates four packages that were spread across three unrelated scopes:

  @nextsystems/oac                        -> @controlstack/oac         (root, published)
  @nextsystems/oac-cli                    -> @controlstack/oac-cli
  @openagents-control/compatibility-layer -> @controlstack/compatibility-layer
  @opencode-agents/eval-framework         -> @controlstack/eval-framework

Verified against the npm registry: only @nextsystems/oac was ever published (0.7.0).
@nextsystems/oac-cli and @openagents-control/compatibility-layer both 404 — they were
never published, so they need no deprecation and are simply abandoned. 08 claimed all
three were live at 0.7.1/1.0.0/0.1.0; all three numbers were wrong, and its deprecation
bullet is corrected to say what the registry actually shows. Stage 6 therefore needs one
`npm deprecate @nextsystems/oac`, not three.

The compatibility-layer keeps its name rather than becoming @controlstack/core: it still
holds both the IR and the adapters, so `core` would misdescribe it until the package split
lands. It becomes core + adapters then.

docs/archive/planning/** deliberately keeps the old names — it is archived history and
renaming it there would make it misreport what was true at the time.

Two claims the rename would have made false are now honest rather than silently wrong:
the publishing guide no longer says we are published as @controlstack/oac, and the scope
is no longer ticked as protected. The @controlstack scope holds zero packages and is
unverified — claiming it is a hard prerequisite for publishing, now an open action item.

Note doctor.ts polls the registry for @controlstack/oac, which 404s until first publish.

Verified on a clean HEAD + this change: pnpm -r build green; compatibility-layer 870 pass
/3 skipped (the known deferred three); cli 150 pass.
darrenhinde 3 weeks ago
parent
commit
597fa75b9a

+ 4 - 4
.opencode/context/openagents-repo/features/oac-package-refactor.md

@@ -13,7 +13,7 @@
 
 ## Vision
 
-Transform `@nextsystems/oac` from a simple installer into a comprehensive CLI package manager that:
+Transform `@controlstack/oac` from a simple installer into a comprehensive CLI package manager that:
 - ✅ Manages agents, skills, and contexts across multiple IDEs (OpenCode, Cursor, Claude Code, Windsurf)
 - ✅ Provides flexible configuration for agent behavior and permissions
 - ✅ Supports community contributions via shadcn-like component registry
@@ -1987,7 +1987,7 @@ oac help [command]
 ### Directory Structure
 
 ```
-@nextsystems/oac/
+@controlstack/oac/
 ├── bin/
 │   └── oac.js                  # CLI entry point
 ├── src/
@@ -2272,11 +2272,11 @@ oac help [command]
 **Migration path**:
 ```bash
 # Old way (still works)
-npm install -g @nextsystems/oac
+npm install -g @controlstack/oac
 oac developer
 
 # New way (enhanced)
-npm install -g @nextsystems/oac
+npm install -g @controlstack/oac
 oac configure
 oac install opencode
 oac add agent:rust-specialist

+ 1 - 1
.opencode/context/openagents-repo/features/oac-refactor-feedback.md

@@ -352,7 +352,7 @@ interface ComponentMarketplace {
 ### Use Monorepo (pnpm workspaces)
 
 ```
-@nextsystems/oac/
+@controlstack/oac/
 ├── packages/
 │   ├── core/                  # Core CLI package
 │   │   ├── src/

+ 1 - 1
.opencode/context/openagents-repo/features/oac-refactor-quickstart.md

@@ -181,7 +181,7 @@ oac context validate
 ## Project Structure (Phase 1)
 
 ```
-@nextsystems/oac/
+@controlstack/oac/
 ├── bin/
 │   └── oac.js                  # Updated entry point
 ├── src/

+ 16 - 9
.opencode/context/openagents-repo/guides/npm-publishing.md

@@ -10,7 +10,12 @@
 
 ## Core Concept
 
-OpenAgents Control is published as `@nextsystems/oac` on npm. Users install globally and run `oac [profile]` to set up their projects.
+OpenAgents Control publishes as `@controlstack/oac` on npm. Users install globally and run `oac [profile]` to set up their projects.
+
+> **Status (2026-07-15):** `@controlstack/oac` is **not published yet** — the scope must be
+> claimed first (see Security below). The last published release is the legacy
+> `@nextsystems/oac` at **0.7.0**, which gets `npm deprecate`d with a pointer at the new name
+> when `@controlstack/oac` first ships.
 
 **Key files**:
 - `package.json` - Package configuration
@@ -49,7 +54,7 @@ oac --version
 oac --help
 
 # Uninstall
-npm uninstall -g @nextsystems/oac
+npm uninstall -g @controlstack/oac
 ```
 
 ### 3. Publish
@@ -66,10 +71,10 @@ npm publish --access public
 
 ```bash
 # Check it's live
-npm view @nextsystems/oac
+npm view @controlstack/oac
 
 # Test installation
-npm install -g @nextsystems/oac
+npm install -g @controlstack/oac
 oac --version
 ```
 
@@ -89,11 +94,11 @@ Once published, users can:
 
 ```bash
 # Global install (recommended)
-npm install -g @nextsystems/oac
+npm install -g @controlstack/oac
 oac developer
 
 # Or use npx (no install)
-npx @nextsystems/oac developer
+npx @controlstack/oac developer
 ```
 
 ---
@@ -140,14 +145,16 @@ npm profile get  # Check email verification status
 
 - ✅ Enable 2FA: `npm profile enable-2fa auth-and-writes`
 - ✅ Use strong npm password
-- ✅ `@nextsystems` scope is protected (only you can publish)
+- ⬜ Claim the `@controlstack` scope on npmjs.com and confirm it is protected (only you can
+  publish). Not yet verified — the scope currently holds zero packages. Publishing
+  `@controlstack/oac` is blocked until this is done.
 
 ---
 
 ## References
 
-- **Package**: https://www.npmjs.com/package/@nextsystems/oac
-- **Stats**: https://npm-stat.com/charts.html?package=@nextsystems/oac
+- **Package**: https://www.npmjs.com/package/@controlstack/oac
+- **Stats**: https://npm-stat.com/charts.html?package=@controlstack/oac
 - **Codebase**: `package.json`, `bin/oac.js`, `.npmignore`
 
 ---

+ 1 - 1
docs/architecture/canonical-refactor/05-impact-migration-tests.md

@@ -129,7 +129,7 @@ Two populations, two mechanisms, both must keep working through the whole migrat
 
 ### 1.4 Evals impact (the free end-to-end check)
 
-`evals/framework` (`@opencode-agents/eval-framework`, v0.1.1) is an npm workspace that loads
+`evals/framework` (`@controlstack/eval-framework`, v0.1.1) is an npm workspace that loads
 agents through `@opencode-ai/sdk` and runs behavioral suites; root `npm test` delegates to it
 (`test:all` → `cd evals/framework && npm run eval:sdk`). Because it reads the **`.opencode/`
 tree**, and `.opencode/` becomes **build output**, the evals automatically become an

+ 9 - 5
docs/architecture/canonical-refactor/08-STRUCTURE-AND-PACKAGING.md

@@ -125,11 +125,15 @@ Why one package:
   counter-example).
 - **One install, one tarball, offline-complete** — nothing to resolve at runtime.
 - **Smaller supply-chain surface** — users audit one package, not three.
-- All three existing names — `@nextsystems/oac` (0.7.1), `@nextsystems/oac-cli` (1.0.0),
-  and `@openagents-control/compatibility-layer` (0.1.0) — are **deprecated on npm** with
-  pointers at `@controlstack/oac` (`npm deprecate` keeps old installs working while steering
-  new ones). If programmatic consumers show up later, publishing `@controlstack/core`
-  separately is an additive, non-breaking step.
+- Of the three legacy names, **only `@nextsystems/oac` was ever published** (verified against
+  the registry 2026-07-15: it sits at **0.7.0**). `@nextsystems/oac-cli` and
+  `@openagents-control/compatibility-layer` both 404 — they were never published, so they
+  need no deprecation and can simply be abandoned. (An earlier revision of this doc listed
+  them at 1.0.0 and 0.1.0 and `@nextsystems/oac` at 0.7.1; all three were wrong.)
+  `npm deprecate @nextsystems/oac` with a pointer at `@controlstack/oac` is therefore the
+  **only** deprecation required, and it runs at Stage 6 release — it keeps existing 0.7.0
+  installs working while steering new ones. If programmatic consumers show up later,
+  publishing `@controlstack/core` separately is an additive, non-breaking step.
 
 ---
 

+ 1 - 1
evals/framework/package.json

@@ -1,5 +1,5 @@
 {
-  "name": "@opencode-agents/eval-framework",
+  "name": "@controlstack/eval-framework",
   "version": "1.1.0",
   "type": "module",
   "description": "Evaluation framework for OpenCode agents",

+ 1 - 1
package.json

@@ -1,5 +1,5 @@
 {
-  "name": "@nextsystems/oac",
+  "name": "@controlstack/oac",
   "version": "1.1.0",
   "description": "AI agent framework for plan-first development workflows with approval-based execution. Multi-language support for TypeScript, Python, Go, Rust and more.",
   "packageManager": "pnpm@10.33.4",

+ 2 - 2
packages/cli/package.json

@@ -1,5 +1,5 @@
 {
-  "name": "@nextsystems/oac-cli",
+  "name": "@controlstack/oac-cli",
   "version": "1.1.0",
   "description": "OAC CLI — install, manage, and update AI agents and context files",
   "type": "module",
@@ -18,7 +18,7 @@
     "typecheck": "tsc --noEmit"
   },
   "dependencies": {
-    "@openagents-control/compatibility-layer": "workspace:*",
+    "@controlstack/compatibility-layer": "workspace:*",
     "commander": "12.1.0",
     "chalk": "5.6.2",
     "ora": "8.2.0",

+ 2 - 2
packages/cli/src/commands/apply.ts

@@ -16,8 +16,8 @@ import {
   CursorAdapter,
   ClaudeAdapter,
   WindsurfAdapter,
-} from '@openagents-control/compatibility-layer'
-import type { OpenAgent, ConversionResult } from '@openagents-control/compatibility-layer'
+} from '@controlstack/compatibility-layer'
+import type { OpenAgent, ConversionResult } from '@controlstack/compatibility-layer'
 import {
   detectIdes,
   getIdeOutputFile,

+ 2 - 2
packages/cli/src/commands/build.ts

@@ -3,7 +3,7 @@
  *
  * ## This file is wiring, not logic
  *
- * The pipeline itself lives in `@openagents-control/compatibility-layer`
+ * The pipeline itself lives in `@controlstack/compatibility-layer`
  * (`src/core/BuildPipeline.ts`): loading, adapting, orphan pruning and drift detection are all
  * there, under vitest, Node-clean. This module parses flags, chooses roots, and prints. That
  * split is deliberate — `packages/cli` still runs on Bun (12-DISPATCH, Stage 5 owns the
@@ -57,7 +57,7 @@ import {
   type BuildTarget,
   type Drift,
   type OutputRoots,
-} from '@openagents-control/compatibility-layer'
+} from '@controlstack/compatibility-layer'
 
 import { bold, dim, error, info, log, setVerbose, success, verbose, warn } from '../ui/logger.js'
 

+ 2 - 2
packages/cli/src/commands/doctor.ts

@@ -52,7 +52,7 @@ const fetchLatestNpmVersion = async (packageName: string): Promise<string | null
 /** Check 1: OAC version vs npm registry (non-blocking, skipped if offline). */
 const checkOacVersion = async (): Promise<CheckResult> => {
   const current = readCliVersion();
-  const latest = await fetchLatestNpmVersion('@nextsystems/oac');
+  const latest = await fetchLatestNpmVersion('@controlstack/oac');
 
   if (latest === null) {
     return {
@@ -67,7 +67,7 @@ const checkOacVersion = async (): Promise<CheckResult> => {
     return {
       name: 'OAC version',
       status: 'warn',
-      message: `${current} (latest: ${latest}) — run 'npm install -g @nextsystems/oac' to update`,
+      message: `${current} (latest: ${latest}) — run 'npm install -g @controlstack/oac' to update`,
     };
   }
 

+ 2 - 2
packages/cli/src/commands/init.ts

@@ -159,14 +159,14 @@ export async function initCommand(options: InitOptions): Promise<void> {
   } catch (err) {
     const msg = err instanceof Error ? err.message : String(err);
     error(`Could not locate bundled files: ${msg}`);
-    error('Fix: ensure @nextsystems/oac is installed correctly (try reinstalling).');
+    error('Fix: ensure @controlstack/oac is installed correctly (try reinstalling).');
     process.exit(1);
     return;
   }
 
   if (bundledFiles.length === 0) {
     warn('No bundled files found — nothing to install.');
-    warn('Fix: the @nextsystems/oac package may be missing its bundled assets.');
+    warn('Fix: the @controlstack/oac package may be missing its bundled assets.');
     process.exit(1);
   }
 

+ 1 - 1
packages/cli/src/commands/update.ts

@@ -119,7 +119,7 @@ async function runUpdate(projectRoot: string, opts: UpdateOptions): Promise<Inst
     spinner.fail('Update failed.');
     const msg = err instanceof Error ? err.message : String(err);
     error(`Update failed: ${msg}`);
-    error('Check that @nextsystems/oac is installed correctly and try again.');
+    error('Check that @controlstack/oac is installed correctly and try again.');
     process.exit(1);
     return {} as InstallResult; // unreachable — satisfies TypeScript
   }

+ 1 - 1
packages/cli/src/lib/bundled.ts

@@ -71,7 +71,7 @@ export function findPackageRoot(dir: string): string {
       throw new Error(
         `getPackageRoot: could not find a directory with ".opencode/" and "package.json" ` +
           `(without a "registry.json" at the same level) walking up from "${dir}". ` +
-          `Is @nextsystems/oac installed correctly? ` +
+          `Is @controlstack/oac installed correctly? ` +
           `In dev/monorepo mode, set OAC_PACKAGE_ROOT env var to the repo root.`,
       );
     }

+ 4 - 4
packages/cli/src/lib/registry.ts

@@ -175,8 +175,8 @@ export const readRegistry = async (packageRoot: string): Promise<Registry> => {
   if (!exists) {
     throw new Error(
       `registry.json not found at "${registryPath}".\n` +
-        `This file should be bundled with the @nextsystems/oac package.\n` +
-        `Try reinstalling: npm install -g @nextsystems/oac`,
+        `This file should be bundled with the @controlstack/oac package.\n` +
+        `Try reinstalling: npm install -g @controlstack/oac`,
     );
   }
 
@@ -184,7 +184,7 @@ export const readRegistry = async (packageRoot: string): Promise<Registry> => {
     const msg = err instanceof Error ? err.message : String(err);
     throw new Error(
       `Failed to parse registry.json at "${registryPath}": ${msg}\n` +
-        `The file may be corrupted. Try reinstalling: npm install -g @nextsystems/oac`,
+        `The file may be corrupted. Try reinstalling: npm install -g @controlstack/oac`,
     );
   }) as unknown;
 
@@ -195,7 +195,7 @@ export const readRegistry = async (packageRoot: string): Promise<Registry> => {
       .join("\n");
     throw new Error(
       `Invalid registry.json at "${registryPath}":\n${issues}\n` +
-        `The registry schema may have changed. Try reinstalling: npm install -g @nextsystems/oac`,
+        `The registry schema may have changed. Try reinstalling: npm install -g @controlstack/oac`,
     );
   }
 

+ 1 - 1
packages/cli/tsconfig.json

@@ -19,7 +19,7 @@
     "noImplicitReturns": true,
     "noFallthroughCasesInSwitch": true,
     "paths": {
-      "@openagents-control/compatibility-layer": ["../compatibility-layer/dist/index.d.ts"]
+      "@controlstack/compatibility-layer": ["../compatibility-layer/dist/index.d.ts"]
     }
   },
   "include": ["src/**/*"],

+ 10 - 10
packages/compatibility-layer/README.md

@@ -1,4 +1,4 @@
-# @openagents-control/compatibility-layer
+# @controlstack/compatibility-layer
 
 > Compatibility layer for converting OpenAgents Control agents to/from other AI coding tools
 
@@ -30,10 +30,10 @@ This package provides bidirectional conversion between OpenAgents Control (OAC)
 
 ```bash
 # npm
-npm install @openagents-control/compatibility-layer
+npm install @controlstack/compatibility-layer
 
 # pnpm
-pnpm add @openagents-control/compatibility-layer
+pnpm add @controlstack/compatibility-layer
 ```
 
 ## Quick Start
@@ -71,7 +71,7 @@ import {
   getAdapter,
   translate,
   analyzeCompatibility,
-} from "@openagents-control/compatibility-layer";
+} from "@controlstack/compatibility-layer";
 
 // Load an OAC agent
 const agent = await loadAgent("./agent.md");
@@ -182,7 +182,7 @@ import {
   loadAgent,
   loadAgents,
   AgentLoader,
-} from "@openagents-control/compatibility-layer";
+} from "@controlstack/compatibility-layer";
 
 // Load single agent
 const agent = await loadAgent("./agent.md");
@@ -202,7 +202,7 @@ import {
   registry,
   getAdapter,
   listAdapters,
-} from "@openagents-control/compatibility-layer";
+} from "@controlstack/compatibility-layer";
 
 // Get adapter by name
 const adapter = getAdapter("cursor");
@@ -221,7 +221,7 @@ import {
   translate,
   previewTranslation,
   TranslationEngine,
-} from "@openagents-control/compatibility-layer";
+} from "@controlstack/compatibility-layer";
 
 // Quick translate
 const result = translate(agent, "cursor");
@@ -247,7 +247,7 @@ import {
   mapModelFromOAC,
   mapPermissionsFromOAC,
   mapContextPathFromOAC,
-} from "@openagents-control/compatibility-layer";
+} from "@controlstack/compatibility-layer";
 
 // Map tool names
 mapToolFromOAC("bash", "cursor"); // { name: 'terminal', exact: true }
@@ -323,7 +323,7 @@ import {
   OpenAgent,
   ConversionResult,
   ToolCapabilities,
-} from "@openagents-control/compatibility-layer";
+} from "@controlstack/compatibility-layer";
 
 class MyToolAdapter extends BaseAdapter {
   readonly name = "my-tool";
@@ -355,7 +355,7 @@ class MyToolAdapter extends BaseAdapter {
 }
 
 // Register the adapter
-import { registry } from "@openagents-control/compatibility-layer";
+import { registry } from "@controlstack/compatibility-layer";
 registry.register(new MyToolAdapter());
 ```
 

+ 3 - 3
packages/compatibility-layer/docs/migration-guides/claude-to-oac.md

@@ -15,7 +15,7 @@ Claude Code uses `.claude/config.json` for primary agents and `.claude/agents/*.
 **Install the compatibility layer:**
 
 ```bash
-npm install @openagents-control/compatibility-layer
+npm install @controlstack/compatibility-layer
 ```
 
 ## Quick Migration
@@ -452,7 +452,7 @@ oac-compat convert agent.md -f claude -o .claude/config.test.json
 **Programmatic validation:**
 
 ```typescript
-import { loadAgent, validateAgent } from '@openagents-control/compatibility-layer';
+import { loadAgent, validateAgent } from '@controlstack/compatibility-layer';
 
 const agent = await loadAgent('./agent.md');
 const errors = validateAgent(agent);
@@ -467,7 +467,7 @@ if (errors.length === 0) {
 **Verify feature preservation:**
 
 ```typescript
-import { ClaudeAdapter } from '@openagents-control/compatibility-layer';
+import { ClaudeAdapter } from '@controlstack/compatibility-layer';
 
 const adapter = new ClaudeAdapter();
 const capabilities = adapter.getCapabilities();

+ 2 - 2
packages/compatibility-layer/docs/migration-guides/cursor-to-oac.md

@@ -25,7 +25,7 @@ OAC provides a superset of Cursor's capabilities while maintaining backward comp
 **Install the compatibility layer:**
 
 ```bash
-npm install @openagents-control/compatibility-layer
+npm install @controlstack/compatibility-layer
 ```
 
 ## Quick Migration
@@ -376,7 +376,7 @@ oac-compat convert agent.md -f cursor -o .cursorrules.test
 **Programmatic validation:**
 
 ```typescript
-import { loadAgent, validateAgent } from '@openagents-control/compatibility-layer';
+import { loadAgent, validateAgent } from '@controlstack/compatibility-layer';
 
 const agent = await loadAgent('./agent.md');
 const errors = validateAgent(agent);

+ 3 - 3
packages/compatibility-layer/docs/migration-guides/oac-to-claude.md

@@ -11,11 +11,11 @@ Export to Claude Code format when you want to use your agents with Claude Code I
 | Requirement | Version | Notes |
 |-------------|---------|-------|
 | Node.js | >= 18 | Required for CLI |
-| @openagents-control/compatibility-layer | Latest | Install via npm |
+| @controlstack/compatibility-layer | Latest | Install via npm |
 | Claude Code | Any | Target platform |
 
 ```bash
-npm install -g @openagents-control/compatibility-layer
+npm install -g @controlstack/compatibility-layer
 ```
 
 ## Quick Migration
@@ -424,7 +424,7 @@ ls -la .claude/skills/
 ### Programmatic Validation
 
 ```typescript
-import { ClaudeAdapter, loadAgent } from '@openagents-control/compatibility-layer';
+import { ClaudeAdapter, loadAgent } from '@controlstack/compatibility-layer';
 
 async function validateConversion() {
   const agent = await loadAgent('./agent.md');

+ 3 - 3
packages/compatibility-layer/docs/migration-guides/oac-to-cursor.md

@@ -16,11 +16,11 @@ Export to Cursor format when you:
 | Requirement | Version | Notes |
 |-------------|---------|-------|
 | Node.js | >= 18 | Required for CLI |
-| @openagents-control/compatibility-layer | Latest | Install via npm |
+| @controlstack/compatibility-layer | Latest | Install via npm |
 | Cursor IDE | Any | Target platform |
 
 ```bash
-npm install -g @openagents-control/compatibility-layer
+npm install -g @controlstack/compatibility-layer
 ```
 
 ## Quick Migration
@@ -445,7 +445,7 @@ ls -la .cursorrules
 ### Programmatic Validation
 
 ```typescript
-import { CursorAdapter, loadAgent } from '@openagents-control/compatibility-layer';
+import { CursorAdapter, loadAgent } from '@controlstack/compatibility-layer';
 
 async function validateConversion() {
   const agent = await loadAgent('./agent.md');

+ 1 - 1
packages/compatibility-layer/package.json

@@ -1,5 +1,5 @@
 {
-  "name": "@openagents-control/compatibility-layer",
+  "name": "@controlstack/compatibility-layer",
   "version": "1.1.0",
   "type": "module",
   "description": "Compatibility layer for converting OpenAgents Control agents to/from other AI coding tools (Cursor, Claude Code, Windsurf)",

+ 16 - 16
packages/compatibility-layer/src/index.ts

@@ -1,14 +1,14 @@
 /**
- * @openagents-control/compatibility-layer
+ * @controlstack/compatibility-layer
  * 
  * A TypeScript library for converting OpenAgents Control agent definitions
  * to and from other AI coding tool formats (Cursor, Claude, Windsurf, etc.).
  * 
- * @module @openagents-control/compatibility-layer
+ * @module @controlstack/compatibility-layer
  * 
  * @example
  * ```typescript
- * import { loadAgent, registry, CursorAdapter } from '@openagents-control/compatibility-layer';
+ * import { loadAgent, registry, CursorAdapter } from '@controlstack/compatibility-layer';
  * 
  * // Load an OAC agent
  * const agent = await loadAgent('.opencode/agent/opencoder.md');
@@ -45,7 +45,7 @@ export * from "./types.js";
  * 
  * @example
  * ```typescript
- * import { loadAgent, loadAgents } from '@openagents-control/compatibility-layer';
+ * import { loadAgent, loadAgents } from '@controlstack/compatibility-layer';
  * 
  * // Load single agent
  * const agent = await loadAgent('.opencode/agent/opencoder.md');
@@ -115,7 +115,7 @@ export type { CanonicalAgentFile } from "./core/AgentLoader.js";
  *
  * @example
  * ```typescript
- * import { emitRegistry } from '@openagents-control/compatibility-layer';
+ * import { emitRegistry } from '@controlstack/compatibility-layer';
  *
  * // The bytes to write to registry.json — identical across runs.
  * const json = await emitRegistry(process.cwd());
@@ -152,7 +152,7 @@ export type {
  *
  * @example
  * ```typescript
- * import { plan, write } from '@openagents-control/compatibility-layer';
+ * import { plan, write } from '@controlstack/compatibility-layer';
  *
  * const built = await plan({ root: process.cwd() });
  * // Emit .opencode/** and registry.json in place; stage claude-code for review.
@@ -230,7 +230,7 @@ export type {
  * 
  * @example
  * ```typescript
- * import { registry, getAdapter } from '@openagents-control/compatibility-layer';
+ * import { registry, getAdapter } from '@controlstack/compatibility-layer';
  * 
  * // Get adapter from registry
  * const adapter = getAdapter('cursor');
@@ -266,7 +266,7 @@ export type { AdapterInfo } from "./core/AdapterRegistry.js";
  * 
  * @example
  * ```typescript
- * import { BaseAdapter } from '@openagents-control/compatibility-layer';
+ * import { BaseAdapter } from '@controlstack/compatibility-layer';
  * 
  * class MyAdapter extends BaseAdapter {
  *   readonly name = 'my-tool';
@@ -297,7 +297,7 @@ export { BaseAdapter } from "./adapters/BaseAdapter.js";
  * @example
  * ```typescript
  * // Available in Phase 2:
- * // import { CursorAdapter, ClaudeAdapter, WindsurfAdapter } from '@openagents-control/compatibility-layer';
+ * // import { CursorAdapter, ClaudeAdapter, WindsurfAdapter } from '@controlstack/compatibility-layer';
  * ```
  */
 
@@ -312,7 +312,7 @@ export { WindsurfAdapter } from "./adapters/WindsurfAdapter.js";
  *
  * @example
  * ```typescript
- * import { OpenCodeAdapter } from '@openagents-control/compatibility-layer';
+ * import { OpenCodeAdapter } from '@controlstack/compatibility-layer';
  *
  * const { content } = await new OpenCodeAdapter().fromCanonical(source);
  * ```
@@ -337,7 +337,7 @@ export type {
  * 
  * @example
  * ```typescript
- * import { mapToolFromOAC, mapToolToOAC } from '@openagents-control/compatibility-layer';
+ * import { mapToolFromOAC, mapToolToOAC } from '@controlstack/compatibility-layer';
  * 
  * mapToolFromOAC('bash', 'cursor'); // => { name: 'terminal', exact: true }
  * ```
@@ -360,7 +360,7 @@ export {
  * 
  * @example
  * ```typescript
- * import { mapPermissionsFromOAC } from '@openagents-control/compatibility-layer';
+ * import { mapPermissionsFromOAC } from '@controlstack/compatibility-layer';
  * 
  * mapPermissionsFromOAC({ bash: { "*": "allow" } }, 'claude');
  * // => { permissions: { bash: true }, warnings: [...] }
@@ -388,7 +388,7 @@ export {
  * 
  * @example
  * ```typescript
- * import { mapModelFromOAC, getModelsForPlatform } from '@openagents-control/compatibility-layer';
+ * import { mapModelFromOAC, getModelsForPlatform } from '@controlstack/compatibility-layer';
  * 
  * mapModelFromOAC('claude-sonnet-4', 'cursor');
  * // => { id: 'claude-sonnet-4', exact: true }
@@ -414,7 +414,7 @@ export {
  * 
  * @example
  * ```typescript
- * import { mapContextPathFromOAC } from '@openagents-control/compatibility-layer';
+ * import { mapContextPathFromOAC } from '@controlstack/compatibility-layer';
  * 
  * mapContextPathFromOAC('.opencode/context/core/standards.md', 'claude');
  * // => { path: '.claude/skills/core-standards.md', exact: true }
@@ -447,7 +447,7 @@ export {
  * 
  * @example
  * ```typescript
- * import { analyzeCompatibility, getToolCapabilities } from '@openagents-control/compatibility-layer';
+ * import { analyzeCompatibility, getToolCapabilities } from '@controlstack/compatibility-layer';
  * 
  * const result = analyzeCompatibility(agent, 'cursor');
  * // => { compatible: false, warnings: [...], blockers: [...] }
@@ -474,7 +474,7 @@ export {
  * 
  * @example
  * ```typescript
- * import { TranslationEngine, translate } from '@openagents-control/compatibility-layer';
+ * import { TranslationEngine, translate } from '@controlstack/compatibility-layer';
  * 
  * // Using the engine
  * const engine = new TranslationEngine();

+ 1 - 1
pnpm-lock.yaml

@@ -54,7 +54,7 @@ importers:
 
   packages/cli:
     dependencies:
-      '@openagents-control/compatibility-layer':
+      '@controlstack/compatibility-layer':
         specifier: workspace:*
         version: link:../compatibility-layer
       chalk: