diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ba953e2..fee6ceb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,7 +20,7 @@ jobs: terminal-progress--release_created: ${{ steps.release.outputs['packages/terminal-progress--release_created'] }} homeassistant--release_created: ${{ steps.release.outputs['packages/homeassistant--release_created'] }} forge-session-title--release_created: ${{ steps.release.outputs['packages/forge-session-title--release_created'] }} - forge-session--release_created: ${{ steps.release.outputs['packages/forge-session--release_created'] }} + forgekeeper--release_created: ${{ steps.release.outputs['packages/forgekeeper--release_created'] }} atuin-history--release_created: ${{ steps.release.outputs['packages/atuin-history--release_created'] }} tmux-indicator--release_created: ${{ steps.release.outputs['packages/tmux-indicator--release_created'] }} steps: @@ -43,8 +43,8 @@ jobs: enabled: ${{ needs.release-please.outputs['homeassistant--release_created'] }} - package: forge-session-title enabled: ${{ needs.release-please.outputs['forge-session-title--release_created'] }} - - package: forge-session - enabled: ${{ needs.release-please.outputs['forge-session--release_created'] }} + - package: forgekeeper + enabled: ${{ needs.release-please.outputs['forgekeeper--release_created'] }} - package: atuin-history enabled: ${{ needs.release-please.outputs['atuin-history--release_created'] }} - package: tmux-indicator diff --git a/.release-please-manifest.json b/.release-please-manifest.json index d3626c6..bddaabb 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -2,7 +2,7 @@ "packages/terminal-progress": "1.0.2", "packages/homeassistant": "1.0.2", "packages/forge-session-title": "1.3.0", - "packages/forge-session": "1.0.0", + "packages/forgekeeper": "0.0.0", "packages/atuin-history": "1.0.1", "packages/tmux-indicator": "1.0.2" } diff --git a/README.md b/README.md index f363390..e94f97b 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ The plugins target OpenCode 2. The last OpenCode 1 versions live on the | [terminal-progress](packages/terminal-progress/) | Shows agent progress in terminal tabs (Ghostty, iTerm2, WezTerm, Windows Terminal) | [![npm](https://img.shields.io/npm/v/opencode-terminal-progress)](https://www.npmjs.com/package/opencode-terminal-progress) | | [homeassistant](packages/homeassistant/) | Sends agent status to Home Assistant via webhooks | [![npm](https://img.shields.io/npm/v/opencode-homeassistant)](https://www.npmjs.com/package/opencode-homeassistant) | | [forge-session-title](packages/forge-session-title/) | Prefixes session titles with forge issue/PR/MR references | [![npm](https://img.shields.io/npm/v/opencode-forge-session-title)](https://www.npmjs.com/package/opencode-forge-session-title) | -| [forge-session](packages/forge-session/) | Tracks each session's issues and PRs/MRs: title prefixes, a PR/MR status footer, and review notifications | [![npm](https://img.shields.io/npm/v/opencode-forge-session)](https://www.npmjs.com/package/opencode-forge-session) | +| [forgekeeper](packages/forgekeeper/) | Tracks each session's issues and PRs/MRs: title prefixes, a PR/MR status footer, and review notifications | [![npm](https://img.shields.io/npm/v/opencode-forgekeeper)](https://www.npmjs.com/package/opencode-forgekeeper) | | [atuin-history](packages/atuin-history/) | Records agent shell commands in Atuin shell history | [![npm](https://img.shields.io/npm/v/opencode-atuin-history)](https://www.npmjs.com/package/opencode-atuin-history) | | [tmux-indicator](packages/tmux-indicator/) | Sets a tmux window option when the agent is waiting for input | [![npm](https://img.shields.io/npm/v/opencode-tmux-indicator)](https://www.npmjs.com/package/opencode-tmux-indicator) | diff --git a/bun.lock b/bun.lock index 6b69d53..2d9e0f0 100644 --- a/bun.lock +++ b/bun.lock @@ -40,6 +40,16 @@ "@opencode/plugin": "^2.0.0", }, }, + "packages/forgekeeper": { + "name": "opencode-forgekeeper", + "version": "0.0.0", + "peerDependencies": { + "@opencode/plugin": "^2.0.26", + "@opentui/core": ">=0.5.8", + "@opentui/solid": ">=0.5.8", + "solid-js": ">=1.9.0", + }, + }, "packages/homeassistant": { "name": "opencode-homeassistant", "version": "1.0.2", @@ -759,6 +769,8 @@ "opencode-forge-session-title": ["opencode-forge-session-title@workspace:packages/forge-session-title"], + "opencode-forgekeeper": ["opencode-forgekeeper@workspace:packages/forgekeeper"], + "opencode-homeassistant": ["opencode-homeassistant@workspace:packages/homeassistant"], "opencode-terminal-progress": ["opencode-terminal-progress@workspace:packages/terminal-progress"], diff --git a/packages/forge-session/CHANGELOG.md b/packages/forge-session/CHANGELOG.md deleted file mode 100644 index eef2ab6..0000000 --- a/packages/forge-session/CHANGELOG.md +++ /dev/null @@ -1,16 +0,0 @@ -# Changelog - -## 1.0.0 (2026-10-10) - - -### Features - -* **forge-session:** add opencode-forge-session ([#86](https://github.com/pedropombeiro/opencode-plugins/issues/86)) ([e997694](https://github.com/pedropombeiro/opencode-plugins/commit/e99769479468b827458b8cfb7cbc130e59d642a4)) -* **terminal-progress:** add Ghostty terminal detection ([4e6c499](https://github.com/pedropombeiro/opencode-plugins/commit/4e6c499b1e8fd9d5ae74096d1564a24c0ee34555)) - - -### Bug Fixes - -* **forge-session-title:** update repository URL to monorepo ([1d2ef1d](https://github.com/pedropombeiro/opencode-plugins/commit/1d2ef1df11373d14797b6bfa002fbdff48197078)) -* **homeassistant:** update repository URL to monorepo ([e0bd582](https://github.com/pedropombeiro/opencode-plugins/commit/e0bd582263126b4211dd17595475d40eaf270f02)) -* **terminal-progress:** update repository URL to monorepo ([6d72ed2](https://github.com/pedropombeiro/opencode-plugins/commit/6d72ed2572f051feb3ec6e9c253239f845785635)) diff --git a/packages/forge-session/README.md b/packages/forgekeeper/README.md similarity index 97% rename from packages/forge-session/README.md rename to packages/forgekeeper/README.md index 3eaaca9..aa00dd5 100644 --- a/packages/forge-session/README.md +++ b/packages/forgekeeper/README.md @@ -1,4 +1,4 @@ -# opencode-forge-session +# opencode-forgekeeper An [OpenCode](https://opencode.ai) plugin that tracks the issues or PRs/MRs a session works on. It prefixes the session title with their references, shows the PR/MR status in the prompt @@ -12,7 +12,7 @@ Requires OpenCode 2. It replaces ## Installation ```bash -opencode plugin add opencode-forge-session +opencode plugin add opencode-forgekeeper ``` This adds the plugin to your `opencode.json`: @@ -20,7 +20,7 @@ This adds the plugin to your `opencode.json`: ```json { "$schema": "https://opencode.ai/config.json", - "plugins": ["opencode-forge-session"] + "plugins": ["opencode-forgekeeper"] } ``` @@ -262,7 +262,7 @@ Set options with the object form of the `plugins` entry in `opencode.json`: ```json { - "plugins": [{ "package": "opencode-forge-session", "options": { "notifyHumanReviews": false } }] + "plugins": [{ "package": "opencode-forgekeeper", "options": { "notifyHumanReviews": false } }] } ``` @@ -286,7 +286,7 @@ To keep the behavior of `opencode-forge-session-title` alone, turn off review st ```json { - "plugins": [{ "package": "opencode-forge-session", "options": { "reviewStatus": false } }] + "plugins": [{ "package": "opencode-forgekeeper", "options": { "reviewStatus": false } }] } ``` @@ -318,14 +318,14 @@ plugin instance watches its own sessions. ## Migrating from opencode-forge-session-title -Replace `opencode-forge-session-title` with `opencode-forge-session` in `opencode.json`. Never +Replace `opencode-forge-session-title` with `opencode-forgekeeper` in `opencode.json`. Never load both: the server keeps `opencode-forge-session-title`'s plugin and RPC IDs, so the two would collide. | Entry point | Plugin ID | Stored state | | ----------- | ------------------------------ | ---------------------------------------------------------------------------------------- | | Server | `opencode-forge-session-title` | Session targets, owned title prefixes, human-review baselines, and pending notifications | -| CLI | `pedropombeiro.forge-session` | None | +| CLI | `pedropombeiro.forgekeeper` | None | Because the IDs match, stored targets carry over, and callers of the `target` RPC keep working. The server reads a session's single stored `target` as a list of one, and writes `targets` from @@ -379,7 +379,7 @@ From the repository root: mise run test mise run typecheck mise run lint -mise run build forge-session +mise run build forgekeeper ``` ## License diff --git a/packages/forge-session/package.json b/packages/forgekeeper/package.json similarity index 90% rename from packages/forge-session/package.json rename to packages/forgekeeper/package.json index 8bd1c2b..2677239 100644 --- a/packages/forge-session/package.json +++ b/packages/forgekeeper/package.json @@ -1,6 +1,6 @@ { - "name": "opencode-forge-session", - "version": "1.0.0", + "name": "opencode-forgekeeper", + "version": "0.0.0", "description": "OpenCode plugin that tracks each session's GitHub and GitLab issues and PRs/MRs: title prefixes, a PR/MR status footer, and review notifications", "author": { "name": "Pedro Pombeiro", @@ -19,7 +19,7 @@ "repository": { "type": "git", "url": "git+https://github.com/pedropombeiro/opencode-plugins.git", - "directory": "packages/forge-session" + "directory": "packages/forgekeeper" }, "publishConfig": { "access": "public" diff --git a/packages/forge-session/src/automated-review-watch.test.ts b/packages/forgekeeper/src/automated-review-watch.test.ts similarity index 100% rename from packages/forge-session/src/automated-review-watch.test.ts rename to packages/forgekeeper/src/automated-review-watch.test.ts diff --git a/packages/forge-session/src/automated-review-watch.ts b/packages/forgekeeper/src/automated-review-watch.ts similarity index 100% rename from packages/forge-session/src/automated-review-watch.ts rename to packages/forgekeeper/src/automated-review-watch.ts diff --git a/packages/forge-session/src/exec.ts b/packages/forgekeeper/src/exec.ts similarity index 100% rename from packages/forge-session/src/exec.ts rename to packages/forgekeeper/src/exec.ts diff --git a/packages/forge-session/src/forge.ts b/packages/forgekeeper/src/forge.ts similarity index 100% rename from packages/forge-session/src/forge.ts rename to packages/forgekeeper/src/forge.ts diff --git a/packages/forge-session/src/forges.test.ts b/packages/forgekeeper/src/forges.test.ts similarity index 100% rename from packages/forge-session/src/forges.test.ts rename to packages/forgekeeper/src/forges.test.ts diff --git a/packages/forge-session/src/forges.ts b/packages/forgekeeper/src/forges.ts similarity index 100% rename from packages/forge-session/src/forges.ts rename to packages/forgekeeper/src/forges.ts diff --git a/packages/forge-session/src/format.test.ts b/packages/forgekeeper/src/format.test.ts similarity index 100% rename from packages/forge-session/src/format.test.ts rename to packages/forgekeeper/src/format.test.ts diff --git a/packages/forge-session/src/format.ts b/packages/forgekeeper/src/format.ts similarity index 100% rename from packages/forge-session/src/format.ts rename to packages/forgekeeper/src/format.ts diff --git a/packages/forge-session/src/git.test.ts b/packages/forgekeeper/src/git.test.ts similarity index 100% rename from packages/forge-session/src/git.test.ts rename to packages/forgekeeper/src/git.test.ts diff --git a/packages/forge-session/src/git.ts b/packages/forgekeeper/src/git.ts similarity index 100% rename from packages/forge-session/src/git.ts rename to packages/forgekeeper/src/git.ts diff --git a/packages/forge-session/src/github.test.ts b/packages/forgekeeper/src/github.test.ts similarity index 100% rename from packages/forge-session/src/github.test.ts rename to packages/forgekeeper/src/github.test.ts diff --git a/packages/forge-session/src/github.ts b/packages/forgekeeper/src/github.ts similarity index 100% rename from packages/forge-session/src/github.ts rename to packages/forgekeeper/src/github.ts diff --git a/packages/forge-session/src/gitlab-feedback.test.ts b/packages/forgekeeper/src/gitlab-feedback.test.ts similarity index 100% rename from packages/forge-session/src/gitlab-feedback.test.ts rename to packages/forgekeeper/src/gitlab-feedback.test.ts diff --git a/packages/forge-session/src/gitlab-feedback.ts b/packages/forgekeeper/src/gitlab-feedback.ts similarity index 100% rename from packages/forge-session/src/gitlab-feedback.ts rename to packages/forgekeeper/src/gitlab-feedback.ts diff --git a/packages/forge-session/src/gitlab.test.ts b/packages/forgekeeper/src/gitlab.test.ts similarity index 100% rename from packages/forge-session/src/gitlab.test.ts rename to packages/forgekeeper/src/gitlab.test.ts diff --git a/packages/forge-session/src/gitlab.ts b/packages/forgekeeper/src/gitlab.ts similarity index 100% rename from packages/forge-session/src/gitlab.ts rename to packages/forgekeeper/src/gitlab.ts diff --git a/packages/forge-session/src/human-review-watch.test.ts b/packages/forgekeeper/src/human-review-watch.test.ts similarity index 100% rename from packages/forge-session/src/human-review-watch.test.ts rename to packages/forgekeeper/src/human-review-watch.test.ts diff --git a/packages/forge-session/src/human-review-watch.ts b/packages/forgekeeper/src/human-review-watch.ts similarity index 100% rename from packages/forge-session/src/human-review-watch.ts rename to packages/forgekeeper/src/human-review-watch.ts diff --git a/packages/forge-session/src/index.ts b/packages/forgekeeper/src/index.ts similarity index 100% rename from packages/forge-session/src/index.ts rename to packages/forgekeeper/src/index.ts diff --git a/packages/forge-session/src/limit.test.ts b/packages/forgekeeper/src/limit.test.ts similarity index 100% rename from packages/forge-session/src/limit.test.ts rename to packages/forgekeeper/src/limit.test.ts diff --git a/packages/forge-session/src/limit.ts b/packages/forgekeeper/src/limit.ts similarity index 100% rename from packages/forge-session/src/limit.ts rename to packages/forgekeeper/src/limit.ts diff --git a/packages/forge-session/src/locate.test.ts b/packages/forgekeeper/src/locate.test.ts similarity index 100% rename from packages/forge-session/src/locate.test.ts rename to packages/forgekeeper/src/locate.test.ts diff --git a/packages/forge-session/src/locate.ts b/packages/forgekeeper/src/locate.ts similarity index 100% rename from packages/forge-session/src/locate.ts rename to packages/forgekeeper/src/locate.ts diff --git a/packages/forge-session/src/lookups.test.ts b/packages/forgekeeper/src/lookups.test.ts similarity index 100% rename from packages/forge-session/src/lookups.test.ts rename to packages/forgekeeper/src/lookups.test.ts diff --git a/packages/forge-session/src/lookups.ts b/packages/forgekeeper/src/lookups.ts similarity index 100% rename from packages/forge-session/src/lookups.ts rename to packages/forgekeeper/src/lookups.ts diff --git a/packages/forge-session/src/options.test.ts b/packages/forgekeeper/src/options.test.ts similarity index 100% rename from packages/forge-session/src/options.test.ts rename to packages/forgekeeper/src/options.test.ts diff --git a/packages/forge-session/src/options.ts b/packages/forgekeeper/src/options.ts similarity index 100% rename from packages/forge-session/src/options.ts rename to packages/forgekeeper/src/options.ts diff --git a/packages/forge-session/src/rpc.ts b/packages/forgekeeper/src/rpc.ts similarity index 100% rename from packages/forge-session/src/rpc.ts rename to packages/forgekeeper/src/rpc.ts diff --git a/packages/forge-session/src/server.test.ts b/packages/forgekeeper/src/server.test.ts similarity index 100% rename from packages/forge-session/src/server.test.ts rename to packages/forgekeeper/src/server.test.ts diff --git a/packages/forge-session/src/server.ts b/packages/forgekeeper/src/server.ts similarity index 100% rename from packages/forge-session/src/server.ts rename to packages/forgekeeper/src/server.ts diff --git a/packages/forge-session/src/status-client.test.ts b/packages/forgekeeper/src/status-client.test.ts similarity index 100% rename from packages/forge-session/src/status-client.test.ts rename to packages/forgekeeper/src/status-client.test.ts diff --git a/packages/forge-session/src/status-client.ts b/packages/forgekeeper/src/status-client.ts similarity index 100% rename from packages/forge-session/src/status-client.ts rename to packages/forgekeeper/src/status-client.ts diff --git a/packages/forge-session/src/status-server.ts b/packages/forgekeeper/src/status-server.ts similarity index 100% rename from packages/forge-session/src/status-server.ts rename to packages/forgekeeper/src/status-server.ts diff --git a/packages/forge-session/src/status-service.test.ts b/packages/forgekeeper/src/status-service.test.ts similarity index 100% rename from packages/forge-session/src/status-service.test.ts rename to packages/forgekeeper/src/status-service.test.ts diff --git a/packages/forge-session/src/status-service.ts b/packages/forgekeeper/src/status-service.ts similarity index 100% rename from packages/forge-session/src/status-service.ts rename to packages/forgekeeper/src/status-service.ts diff --git a/packages/forge-session/src/store.test.ts b/packages/forgekeeper/src/store.test.ts similarity index 100% rename from packages/forge-session/src/store.test.ts rename to packages/forgekeeper/src/store.test.ts diff --git a/packages/forge-session/src/store.ts b/packages/forgekeeper/src/store.ts similarity index 100% rename from packages/forge-session/src/store.ts rename to packages/forgekeeper/src/store.ts diff --git a/packages/forge-session/src/target.test.ts b/packages/forgekeeper/src/target.test.ts similarity index 100% rename from packages/forge-session/src/target.test.ts rename to packages/forgekeeper/src/target.test.ts diff --git a/packages/forge-session/src/target.ts b/packages/forgekeeper/src/target.ts similarity index 100% rename from packages/forge-session/src/target.ts rename to packages/forgekeeper/src/target.ts diff --git a/packages/forge-session/src/title.test.ts b/packages/forgekeeper/src/title.test.ts similarity index 100% rename from packages/forge-session/src/title.test.ts rename to packages/forgekeeper/src/title.test.ts diff --git a/packages/forge-session/src/title.ts b/packages/forgekeeper/src/title.ts similarity index 100% rename from packages/forge-session/src/title.ts rename to packages/forgekeeper/src/title.ts diff --git a/packages/forge-session/src/traits.test.ts b/packages/forgekeeper/src/traits.test.ts similarity index 100% rename from packages/forge-session/src/traits.test.ts rename to packages/forgekeeper/src/traits.test.ts diff --git a/packages/forge-session/src/tui.tsx b/packages/forgekeeper/src/tui.tsx similarity index 99% rename from packages/forge-session/src/tui.tsx rename to packages/forgekeeper/src/tui.tsx index b86e372..02628d0 100644 --- a/packages/forge-session/src/tui.tsx +++ b/packages/forgekeeper/src/tui.tsx @@ -22,7 +22,7 @@ import { createStatusClient, samePlace, type Place } from './status-client'; import type { Snapshot } from './store'; export default { - id: 'pedropombeiro.forge-session', + id: 'pedropombeiro.forgekeeper', async setup(context) { const rpc = context.client.rpc(ForgeSessionRpc); diff --git a/packages/forge-session/tsconfig.json b/packages/forgekeeper/tsconfig.json similarity index 100% rename from packages/forge-session/tsconfig.json rename to packages/forgekeeper/tsconfig.json diff --git a/release-please-config.json b/release-please-config.json index dc14654..e56861a 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -10,8 +10,8 @@ "packages/forge-session-title": { "component": "opencode-forge-session-title" }, - "packages/forge-session": { - "component": "opencode-forge-session" + "packages/forgekeeper": { + "component": "opencode-forgekeeper" }, "packages/atuin-history": { "component": "opencode-atuin-history"