From a25d41c95f25789471960c84f2cd758694d8863c Mon Sep 17 00:00:00 2001 From: Bulat Yapparov Date: Thu, 23 Apr 2026 17:44:52 +0100 Subject: [PATCH] =?UTF-8?q?refactor:=20rename=20@aictrl/plugin=20=E2=86=92?= =?UTF-8?q?=20@aictrl/plugin-sdk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The npm package name @aictrl/plugin is used by a separate telemetry delivery vehicle with its own release cadence. Our monorepo's packages/plugin (plugin-author SDK: types, shell/tool helpers) collides on the name and can't be published from the CLI release workflow. Rename the monorepo package to @aictrl/plugin-sdk: - packages/plugin/package.json: name + reset version to 0.1.0 (first publish of the renamed package) - Root package.json + packages/cli/package.json: update workspace dep key - Source imports across packages/cli/src/ (8 files) - .opencode/tool/*.ts internal tooling imports - Config auto-install logic (packages/cli/src/config/config.ts) now writes @aictrl/plugin-sdk into user project package.json - Tests updated to match - Publish workflow step renamed - CONTRIBUTING.md and .opencode/agent/translator.md references updated User projects with existing @aictrl/plugin in their package.json will no longer auto-receive updates; the CLI will add @aictrl/plugin-sdk on next run. Documented path for plugin authors: depend on @aictrl/plugin-sdk. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/publish.yml | 4 ++-- .opencode/agent/translator.md | 2 +- .opencode/tool/github-comment.ts | 2 +- .opencode/tool/github-pr-search.ts | 2 +- .opencode/tool/github-triage.ts | 2 +- CONTRIBUTING.md | 2 +- bun.lock | 12 ++++++------ package.json | 2 +- packages/cli/package.json | 2 +- packages/cli/src/cli/cmd/auth.ts | 2 +- packages/cli/src/config/config.ts | 8 ++++---- packages/cli/src/plugin/codex.ts | 2 +- packages/cli/src/plugin/copilot.ts | 2 +- packages/cli/src/plugin/index.ts | 2 +- packages/cli/src/provider/auth.ts | 2 +- packages/cli/src/tool/registry.ts | 2 +- packages/cli/test/cli/plugin-auth-picker.test.ts | 2 +- packages/cli/test/config/config.test.ts | 2 +- packages/cli/test/tool/registry.test.ts | 2 +- packages/plugin/package.json | 4 ++-- 20 files changed, 30 insertions(+), 30 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index cb8ddcd..6fef62f 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -55,9 +55,9 @@ jobs: working-directory: packages/util run: ${{ github.workspace }}/.github/scripts/publish-if-new.sh "@aictrl/util" - - name: Publish @aictrl/plugin + - name: Publish @aictrl/plugin-sdk working-directory: packages/plugin - run: ${{ github.workspace }}/.github/scripts/publish-if-new.sh "@aictrl/plugin" + run: ${{ github.workspace }}/.github/scripts/publish-if-new.sh "@aictrl/plugin-sdk" - name: Publish @aictrl/sdk working-directory: packages/sdk diff --git a/.opencode/agent/translator.md b/.opencode/agent/translator.md index 516cd49..8cfa718 100644 --- a/.opencode/agent/translator.md +++ b/.opencode/agent/translator.md @@ -608,7 +608,7 @@ XDG_CONFIG_HOME ```text ../../../config.mjs @astrojs/starlight/components -@aictrl/plugin +@aictrl/plugin-sdk @aictrl/sdk path shescape diff --git a/.opencode/tool/github-comment.ts b/.opencode/tool/github-comment.ts index b9a9123..1e8ea95 100644 --- a/.opencode/tool/github-comment.ts +++ b/.opencode/tool/github-comment.ts @@ -1,5 +1,5 @@ /// -import { tool } from "@aictrl/plugin" +import { tool } from "@aictrl/plugin-sdk" function getPRNumber(): number { const pr = parseInt(process.env.PR_NUMBER ?? "", 10) diff --git a/.opencode/tool/github-pr-search.ts b/.opencode/tool/github-pr-search.ts index 8840b0f..52c8b5d 100644 --- a/.opencode/tool/github-pr-search.ts +++ b/.opencode/tool/github-pr-search.ts @@ -1,5 +1,5 @@ /// -import { tool } from "@aictrl/plugin" +import { tool } from "@aictrl/plugin-sdk" import DESCRIPTION from "./github-pr-search.txt" async function githubFetch(endpoint: string, options: RequestInit = {}) { diff --git a/.opencode/tool/github-triage.ts b/.opencode/tool/github-triage.ts index de5f65c..c382ac1 100644 --- a/.opencode/tool/github-triage.ts +++ b/.opencode/tool/github-triage.ts @@ -1,5 +1,5 @@ /// -import { tool } from "@aictrl/plugin" +import { tool } from "@aictrl/plugin-sdk" import DESCRIPTION from "./github-triage.txt" const TEAM = { diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 49ce9df..7131bfb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -74,7 +74,7 @@ Replace `` with your platform (e.g., `darwin-arm64`, `linux-x64`). - `packages/aictrl/src/cli/cmd/tui/`: The TUI code, written in SolidJS with [opentui](https://github.com/sst/opentui) - `packages/app`: The shared web UI components, written in SolidJS - `packages/desktop`: The native desktop app, built with Tauri (wraps `packages/app`) - - `packages/plugin`: Source for `@aictrl/plugin` + - `packages/plugin`: Source for `@aictrl/plugin-sdk` (plugin-author SDK — types and helpers for writing CLI plugins) ### Understanding bun dev vs aictrl diff --git a/bun.lock b/bun.lock index bd60b1c..930af54 100644 --- a/bun.lock +++ b/bun.lock @@ -5,7 +5,7 @@ "": { "name": "aictrl", "dependencies": { - "@aictrl/plugin": "workspace:*", + "@aictrl/plugin-sdk": "workspace:*", "@aictrl/script": "workspace:*", "@aictrl/sdk": "workspace:*", "@aws-sdk/client-s3": "3.933.0", @@ -25,7 +25,7 @@ }, "packages/cli": { "name": "@aictrl/cli", - "version": "0.3.2", + "version": "0.3.3", "bin": { "aictrl": "./bin/aictrl", }, @@ -35,7 +35,7 @@ "@agentclientprotocol/sdk": "0.14.1", "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.21", - "@aictrl/plugin": "workspace:*", + "@aictrl/plugin-sdk": "workspace:*", "@aictrl/sdk": "workspace:*", "@aictrl/util": "workspace:*", "@clack/prompts": "1.0.0-alpha.1", @@ -177,8 +177,8 @@ ], }, "packages/plugin": { - "name": "@aictrl/plugin", - "version": "1.2.16", + "name": "@aictrl/plugin-sdk", + "version": "0.1.0", "dependencies": { "@aictrl/sdk": "workspace:*", "zod": "catalog:", @@ -338,7 +338,7 @@ "@aictrl/cli": ["@aictrl/cli@workspace:packages/cli"], - "@aictrl/plugin": ["@aictrl/plugin@workspace:packages/plugin"], + "@aictrl/plugin-sdk": ["@aictrl/plugin-sdk@workspace:packages/plugin"], "@aictrl/script": ["@aictrl/script@workspace:packages/script"], diff --git a/package.json b/package.json index 492fc65..3b9757e 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ }, "dependencies": { "@aws-sdk/client-s3": "3.933.0", - "@aictrl/plugin": "workspace:*", + "@aictrl/plugin-sdk": "workspace:*", "@aictrl/script": "workspace:*", "@aictrl/sdk": "workspace:*", "typescript": "catalog:" diff --git a/packages/cli/package.json b/packages/cli/package.json index d45953c..677d357 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -87,7 +87,7 @@ "@agentclientprotocol/sdk": "0.14.1", "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.21", - "@aictrl/plugin": "workspace:*", + "@aictrl/plugin-sdk": "workspace:*", "@aictrl/sdk": "workspace:*", "@aictrl/util": "workspace:*", "@clack/prompts": "1.0.0-alpha.1", diff --git a/packages/cli/src/cli/cmd/auth.ts b/packages/cli/src/cli/cmd/auth.ts index b4e6108..aa0a16c 100644 --- a/packages/cli/src/cli/cmd/auth.ts +++ b/packages/cli/src/cli/cmd/auth.ts @@ -10,7 +10,7 @@ import { Config } from "../../config/config" import { Global } from "../../global" import { Plugin } from "../../plugin" import { Instance } from "../../project/instance" -import type { Hooks } from "@aictrl/plugin" +import type { Hooks } from "@aictrl/plugin-sdk" import { Process } from "../../util/process" import { text } from "node:stream/consumers" diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index 1691d30..a23c557 100644 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -254,7 +254,7 @@ export namespace Config { })) json.dependencies = { ...json.dependencies, - "@aictrl/plugin": targetVersion, + "@aictrl/plugin-sdk": targetVersion, } await Filesystem.writeJson(pkg, json) @@ -304,15 +304,15 @@ export namespace Config { const parsed = await Filesystem.readJson<{ dependencies?: Record }>(pkg).catch(() => null) const dependencies = parsed?.dependencies ?? {} - const depVersion = dependencies["@aictrl/plugin"] + const depVersion = dependencies["@aictrl/plugin-sdk"] if (!depVersion) return true const targetVersion = Installation.isLocal() ? "latest" : Installation.VERSION if (targetVersion === "latest") { - const isOutdated = await PackageRegistry.isOutdated("@aictrl/plugin", depVersion, dir) + const isOutdated = await PackageRegistry.isOutdated("@aictrl/plugin-sdk", depVersion, dir) if (!isOutdated) return false log.info("Cached version is outdated, proceeding with install", { - pkg: "@aictrl/plugin", + pkg: "@aictrl/plugin-sdk", cachedVersion: depVersion, }) return true diff --git a/packages/cli/src/plugin/codex.ts b/packages/cli/src/plugin/codex.ts index d815d54..56aca43 100644 --- a/packages/cli/src/plugin/codex.ts +++ b/packages/cli/src/plugin/codex.ts @@ -1,4 +1,4 @@ -import type { Hooks, PluginInput } from "@aictrl/plugin" +import type { Hooks, PluginInput } from "@aictrl/plugin-sdk" import { Log } from "../util/log" import { Installation } from "../installation" import { Auth, OAUTH_DUMMY_KEY } from "../auth" diff --git a/packages/cli/src/plugin/copilot.ts b/packages/cli/src/plugin/copilot.ts index f59f8ed..b205bce 100644 --- a/packages/cli/src/plugin/copilot.ts +++ b/packages/cli/src/plugin/copilot.ts @@ -1,4 +1,4 @@ -import type { Hooks, PluginInput } from "@aictrl/plugin" +import type { Hooks, PluginInput } from "@aictrl/plugin-sdk" import { Installation } from "@/installation" import { iife } from "@/util/iife" diff --git a/packages/cli/src/plugin/index.ts b/packages/cli/src/plugin/index.ts index 57d6f48..8efb2f0 100644 --- a/packages/cli/src/plugin/index.ts +++ b/packages/cli/src/plugin/index.ts @@ -1,4 +1,4 @@ -import type { Hooks, PluginInput, Plugin as PluginInstance } from "@aictrl/plugin" +import type { Hooks, PluginInput, Plugin as PluginInstance } from "@aictrl/plugin-sdk" import { Config } from "../config/config" import { Bus } from "../bus" import { Log } from "../util/log" diff --git a/packages/cli/src/provider/auth.ts b/packages/cli/src/provider/auth.ts index f4e2bd8..8c54b54 100644 --- a/packages/cli/src/provider/auth.ts +++ b/packages/cli/src/provider/auth.ts @@ -3,7 +3,7 @@ import { Plugin } from "../plugin" import { map, filter, pipe, fromEntries, mapValues } from "remeda" import z from "zod" import { fn } from "@/util/fn" -import type { AuthOuathResult, Hooks } from "@aictrl/plugin" +import type { AuthOuathResult, Hooks } from "@aictrl/plugin-sdk" import { NamedError } from "@aictrl/util/error" import { Auth } from "@/auth" diff --git a/packages/cli/src/tool/registry.ts b/packages/cli/src/tool/registry.ts index 4d46147..21cb123 100644 --- a/packages/cli/src/tool/registry.ts +++ b/packages/cli/src/tool/registry.ts @@ -17,7 +17,7 @@ import { Tool } from "./tool" import { Instance } from "../project/instance" import { Config } from "../config/config" import path from "path" -import { type ToolContext as PluginToolContext, type ToolDefinition } from "@aictrl/plugin" +import { type ToolContext as PluginToolContext, type ToolDefinition } from "@aictrl/plugin-sdk" import z from "zod" import { Plugin } from "../plugin" import { WebSearchTool } from "./websearch" diff --git a/packages/cli/test/cli/plugin-auth-picker.test.ts b/packages/cli/test/cli/plugin-auth-picker.test.ts index db2b990..b2f7871 100644 --- a/packages/cli/test/cli/plugin-auth-picker.test.ts +++ b/packages/cli/test/cli/plugin-auth-picker.test.ts @@ -1,6 +1,6 @@ import { test, expect, describe } from "bun:test" import { resolvePluginProviders } from "../../src/cli/cmd/auth" -import type { Hooks } from "@aictrl/plugin" +import type { Hooks } from "@aictrl/plugin-sdk" function hookWithAuth(provider: string): Hooks { return { diff --git a/packages/cli/test/config/config.test.ts b/packages/cli/test/config/config.test.ts index d198f21..67d2672 100644 --- a/packages/cli/test/config/config.test.ts +++ b/packages/cli/test/config/config.test.ts @@ -1550,7 +1550,7 @@ describe("getPluginName", () => { test("extracts name from scoped npm package", () => { expect(Config.getPluginName("@scope/pkg@1.0.0")).toBe("@scope/pkg") - expect(Config.getPluginName("@aictrl/plugin@2.0.0")).toBe("@aictrl/plugin") + expect(Config.getPluginName("@aictrl/plugin-sdk@2.0.0")).toBe("@aictrl/plugin-sdk") }) test("returns full string for package without version", () => { diff --git a/packages/cli/test/tool/registry.test.ts b/packages/cli/test/tool/registry.test.ts index baff148..a72ba6c 100644 --- a/packages/cli/test/tool/registry.test.ts +++ b/packages/cli/test/tool/registry.test.ts @@ -90,7 +90,7 @@ describe("tool.registry", () => { JSON.stringify({ name: "custom-tools", dependencies: { - "@aictrl/plugin": "0.1.0", + "@aictrl/plugin-sdk": "0.1.0", cowsay: "^1.6.0", }, }), diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 3eaaf06..64ecf16 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", - "name": "@aictrl/plugin", - "version": "1.2.16", + "name": "@aictrl/plugin-sdk", + "version": "0.1.0", "type": "module", "license": "MIT", "repository": {