diff --git a/.npmrc b/.npmrc index 3f64242..72c056c 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1 @@ -@_jb:registry=https://git.jb.codes/api/packages/jb/npm/ +@jbcode:registry=https://git.jb.codes/api/packages/jb/npm/ diff --git a/README.md b/README.md index d20c928..3314383 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ A successful check currently reports 44 links and zero local package entries. Th Resolve any reported collision manually instead of deleting it blindly. Run `/reload` in an active Pi session, or restart Pi, after the sync. -The repository root is a private Bun workspace and is not installable as a Pi package. Use the curated `config/pi-links.json` policy for live development, or install one independently published `@_jb/pi-*` package. See [Bun workspace packages and Gitea npm publishing](docs/npm-packages.md). +The repository root is a private Bun workspace and is not installable as a Pi package. Use the curated `config/pi-links.json` policy for live development, or install one independently published `@jbcode/pi-*` package. See [Bun workspace packages and Gitea npm publishing](docs/npm-packages.md). ### 5. Verify Pi @@ -127,21 +127,21 @@ Inside Pi: The monorepo contains three optional packages that are not enabled by the curated link policy: -- `@_jb/pi-interactive-subagents`; -- `@_jb/pi-native-hooks`; -- `@_jb/pi-todo-herdr`. +- `@jbcode/pi-interactive-subagents`; +- `@jbcode/pi-native-hooks`; +- `@jbcode/pi-todo-herdr`. After publishing them, configure the scoped Gitea npm registry and install only the packages you want. Keep the token in the user environment or user-level npm configuration; never commit it: ```ini -@_jb:registry=https://git.jb.codes/api/packages/jb/npm/ +@jbcode:registry=https://git.jb.codes/api/packages/jb/npm/ //git.jb.codes/api/packages/jb/npm/:_authToken=${GITEA_NPM_TOKEN} ``` ```bash -pi install npm:@_jb/pi-interactive-subagents -pi install npm:@_jb/pi-native-hooks -pi install npm:@_jb/pi-todo-herdr +pi install npm:@jbcode/pi-interactive-subagents +pi install npm:@jbcode/pi-native-hooks +pi install npm:@jbcode/pi-todo-herdr pi list ``` @@ -151,7 +151,7 @@ Do not globally enable `harness-tools/extensions/subagents` at the same time as ### Configure interactive subagents -[`@_jb/pi-interactive-subagents`](extensions/interactive-subagents) creates asynchronous child Pi sessions in Herdr tabs or tmux panes. It requires one terminal backend: +[`@jbcode/pi-interactive-subagents`](extensions/interactive-subagents) creates asynchronous child Pi sessions in Herdr tabs or tmux panes. It requires one terminal backend: - **Herdr:** install its Pi integration, then launch Pi inside a Herdr-managed pane; - **tmux:** launch Pi inside tmux when Herdr is unavailable. @@ -186,11 +186,11 @@ The status widget is enabled by the package's example configuration when no loca ### Configure Native Hooks -[`@_jb/pi-native-hooks`](extensions/native-hooks) coordinates trusted personal diagnostic and verification policies after workspace mutations. Review its [trust model and initialization workflow](extensions/native-hooks/README.md) before use. Preview with `/hooks-init --dry-run`; do not run `/hooks-init --apply` until every destination and executable policy has been reviewed. +[`@jbcode/pi-native-hooks`](extensions/native-hooks) coordinates trusted personal diagnostic and verification policies after workspace mutations. Review its [trust model and initialization workflow](extensions/native-hooks/README.md) before use. Preview with `/hooks-init --dry-run`; do not run `/hooks-init --apply` until every destination and executable policy has been reviewed. ### Configure Pi Todo Herdr -[`@_jb/pi-todo-herdr`](extensions/todo-herdr) provides the `set_tasks`, `patch_tasks`, `rm_task`, `list_task`, and `get_task` tools plus a session-local Pi task widget. Herdr is optional for the tools and widget. +[`@jbcode/pi-todo-herdr`](extensions/todo-herdr) provides the `set_tasks`, `patch_tasks`, `rm_task`, `list_task`, and `get_task` tools plus a session-local Pi task widget. Herdr is optional for the tools and widget. Inside Pi after `/reload`: @@ -223,13 +223,13 @@ herdr status client ### Update or remove the Gitea packages ```bash -pi update npm:@_jb/pi-interactive-subagents -pi update npm:@_jb/pi-native-hooks -pi update npm:@_jb/pi-todo-herdr +pi update npm:@jbcode/pi-interactive-subagents +pi update npm:@jbcode/pi-native-hooks +pi update npm:@jbcode/pi-todo-herdr -pi remove npm:@_jb/pi-interactive-subagents -pi remove npm:@_jb/pi-native-hooks -pi remove npm:@_jb/pi-todo-herdr +pi remove npm:@jbcode/pi-interactive-subagents +pi remove npm:@jbcode/pi-native-hooks +pi remove npm:@jbcode/pi-todo-herdr ``` Run `/reload` after an update or removal. diff --git a/bun.lock b/bun.lock index b2595a3..910845d 100644 --- a/bun.lock +++ b/bun.lock @@ -19,28 +19,28 @@ }, }, "extensions/copy-all": { - "name": "@_jb/pi-copy-all", + "name": "@jbcode/pi-copy-all", "version": "0.1.0", "peerDependencies": { "@earendil-works/pi-coding-agent": "catalog:pi-peer", }, }, "extensions/dictate": { - "name": "@_jb/pi-dictate", + "name": "@jbcode/pi-dictate", "version": "0.1.0", "peerDependencies": { "@earendil-works/pi-coding-agent": "catalog:pi-peer", }, }, "extensions/effort-controls": { - "name": "@_jb/pi-effort-controls", + "name": "@jbcode/pi-effort-controls", "version": "0.1.0", "peerDependencies": { "@earendil-works/pi-coding-agent": "catalog:pi-peer", }, }, "extensions/file-search": { - "name": "@_jb/pi-file-search", + "name": "@jbcode/pi-file-search", "version": "0.1.0", "dependencies": { "@effect/platform-node": "catalog:", @@ -55,7 +55,7 @@ }, }, "extensions/interactive-subagents": { - "name": "@_jb/pi-interactive-subagents", + "name": "@jbcode/pi-interactive-subagents", "version": "3.7.2", "devDependencies": { "@earendil-works/pi-coding-agent": "catalog:", @@ -71,14 +71,14 @@ }, }, "extensions/lm-studio": { - "name": "@_jb/pi-lm-studio", + "name": "@jbcode/pi-lm-studio", "version": "0.1.0", "peerDependencies": { "@earendil-works/pi-coding-agent": "catalog:pi-peer", }, }, "extensions/native-hooks": { - "name": "@_jb/pi-native-hooks", + "name": "@jbcode/pi-native-hooks", "version": "0.1.0", "devDependencies": { "@earendil-works/pi-coding-agent": "catalog:", @@ -93,7 +93,7 @@ }, }, "extensions/prompt-snippets": { - "name": "@_jb/pi-prompt-snippets", + "name": "@jbcode/pi-prompt-snippets", "version": "0.1.0", "peerDependencies": { "@earendil-works/pi-coding-agent": "catalog:pi-peer", @@ -101,7 +101,7 @@ }, }, "extensions/shared": { - "name": "@_jb/pi-shared", + "name": "@jbcode/pi-shared", "version": "0.1.0", "peerDependencies": { "@earendil-works/pi-coding-agent": "catalog:pi-peer", @@ -109,11 +109,11 @@ }, }, "extensions/subagents": { - "name": "@_jb/pi-subagents", + "name": "@jbcode/pi-subagents", "version": "0.1.0", "dependencies": { - "@_jb/pi-shared": "workspace:^", "@anthropic-ai/claude-agent-sdk": "catalog:", + "@jbcode/pi-shared": "workspace:^", "effect": "catalog:", }, "peerDependencies": { @@ -124,7 +124,7 @@ }, }, "extensions/todo-herdr": { - "name": "@_jb/pi-todo-herdr", + "name": "@jbcode/pi-todo-herdr", "version": "0.2.5", "devDependencies": { "@earendil-works/pi-ai": "catalog:", @@ -141,17 +141,17 @@ }, }, "extensions/update": { - "name": "@_jb/pi-update", + "name": "@jbcode/pi-update", "version": "0.1.0", "peerDependencies": { "@earendil-works/pi-coding-agent": "catalog:pi-peer", }, }, "extensions/workflow": { - "name": "@_jb/pi-workflow", + "name": "@jbcode/pi-workflow", "version": "0.1.0", "dependencies": { - "@_jb/pi-shared": "workspace:^", + "@jbcode/pi-shared": "workspace:^", }, "peerDependencies": { "@earendil-works/pi-ai": "catalog:pi-peer", @@ -190,32 +190,6 @@ }, }, "packages": { - "@_jb/pi-copy-all": ["@_jb/pi-copy-all@workspace:extensions/copy-all"], - - "@_jb/pi-dictate": ["@_jb/pi-dictate@workspace:extensions/dictate"], - - "@_jb/pi-effort-controls": ["@_jb/pi-effort-controls@workspace:extensions/effort-controls"], - - "@_jb/pi-file-search": ["@_jb/pi-file-search@workspace:extensions/file-search"], - - "@_jb/pi-interactive-subagents": ["@_jb/pi-interactive-subagents@workspace:extensions/interactive-subagents"], - - "@_jb/pi-lm-studio": ["@_jb/pi-lm-studio@workspace:extensions/lm-studio"], - - "@_jb/pi-native-hooks": ["@_jb/pi-native-hooks@workspace:extensions/native-hooks"], - - "@_jb/pi-prompt-snippets": ["@_jb/pi-prompt-snippets@workspace:extensions/prompt-snippets"], - - "@_jb/pi-shared": ["@_jb/pi-shared@workspace:extensions/shared"], - - "@_jb/pi-subagents": ["@_jb/pi-subagents@workspace:extensions/subagents"], - - "@_jb/pi-todo-herdr": ["@_jb/pi-todo-herdr@workspace:extensions/todo-herdr"], - - "@_jb/pi-update": ["@_jb/pi-update@workspace:extensions/update"], - - "@_jb/pi-workflow": ["@_jb/pi-workflow@workspace:extensions/workflow"], - "@anthropic-ai/claude-agent-sdk": ["@anthropic-ai/claude-agent-sdk@0.3.218", "", { "optionalDependencies": { "@anthropic-ai/claude-agent-sdk-darwin-arm64": "0.3.218", "@anthropic-ai/claude-agent-sdk-darwin-x64": "0.3.218", "@anthropic-ai/claude-agent-sdk-linux-arm64": "0.3.218", "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": "0.3.218", "@anthropic-ai/claude-agent-sdk-linux-x64": "0.3.218", "@anthropic-ai/claude-agent-sdk-linux-x64-musl": "0.3.218", "@anthropic-ai/claude-agent-sdk-win32-arm64": "0.3.218", "@anthropic-ai/claude-agent-sdk-win32-x64": "0.3.218" }, "peerDependencies": { "@anthropic-ai/sdk": ">=0.93.0", "@modelcontextprotocol/sdk": "^1.29.0", "zod": "^4.0.0" } }, "sha512-lbVOmgdzjBdSUCTbxElpoTxxP/u9jY8gpG/3cr5l1jSSvSY5FrANdRcze/z6gM330xo32SHH6WPGFd4+K0fMoQ=="], "@anthropic-ai/claude-agent-sdk-darwin-arm64": ["@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.218", "", { "os": "darwin", "cpu": "arm64" }, "sha512-foTI71ua2r5lJo7sfcw/3UafBCJYjxPmOXZ98wOz1UWIJxaP/Oq9Xp4sUavBd1efFVRxPnAcRnrZ5yrmXK1xUw=="], @@ -380,6 +354,32 @@ "@ioredis/commands": ["@ioredis/commands@1.10.0", "", {}, "sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q=="], + "@jbcode/pi-copy-all": ["@jbcode/pi-copy-all@workspace:extensions/copy-all"], + + "@jbcode/pi-dictate": ["@jbcode/pi-dictate@workspace:extensions/dictate"], + + "@jbcode/pi-effort-controls": ["@jbcode/pi-effort-controls@workspace:extensions/effort-controls"], + + "@jbcode/pi-file-search": ["@jbcode/pi-file-search@workspace:extensions/file-search"], + + "@jbcode/pi-interactive-subagents": ["@jbcode/pi-interactive-subagents@workspace:extensions/interactive-subagents"], + + "@jbcode/pi-lm-studio": ["@jbcode/pi-lm-studio@workspace:extensions/lm-studio"], + + "@jbcode/pi-native-hooks": ["@jbcode/pi-native-hooks@workspace:extensions/native-hooks"], + + "@jbcode/pi-prompt-snippets": ["@jbcode/pi-prompt-snippets@workspace:extensions/prompt-snippets"], + + "@jbcode/pi-shared": ["@jbcode/pi-shared@workspace:extensions/shared"], + + "@jbcode/pi-subagents": ["@jbcode/pi-subagents@workspace:extensions/subagents"], + + "@jbcode/pi-todo-herdr": ["@jbcode/pi-todo-herdr@workspace:extensions/todo-herdr"], + + "@jbcode/pi-update": ["@jbcode/pi-update@workspace:extensions/update"], + + "@jbcode/pi-workflow": ["@jbcode/pi-workflow@workspace:extensions/workflow"], + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.6.0", "", {}, "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw=="], "@mariozechner/clipboard": ["@mariozechner/clipboard@0.3.9", "", { "optionalDependencies": { "@mariozechner/clipboard-darwin-arm64": "0.3.9", "@mariozechner/clipboard-darwin-universal": "0.3.9", "@mariozechner/clipboard-darwin-x64": "0.3.9", "@mariozechner/clipboard-linux-arm64-gnu": "0.3.9", "@mariozechner/clipboard-linux-arm64-musl": "0.3.9", "@mariozechner/clipboard-linux-riscv64-gnu": "0.3.9", "@mariozechner/clipboard-linux-x64-gnu": "0.3.9", "@mariozechner/clipboard-linux-x64-musl": "0.3.9", "@mariozechner/clipboard-win32-arm64-msvc": "0.3.9", "@mariozechner/clipboard-win32-x64-msvc": "0.3.9" } }, "sha512-ABnA53mdfkGZwOFUdZNv2S0CWGO/EIuPj8Vv9xmBFmSYg/qFc7ihO6q5FcQjvoE67kZpWkEc4AhD6B/os04yuA=="], diff --git a/docs/adr/0004-bun-extension-workspaces-01SEP2026.md b/docs/adr/0004-bun-extension-workspaces-01SEP2026.md index 2e641c6..b772f8c 100644 --- a/docs/adr/0004-bun-extension-workspaces-01SEP2026.md +++ b/docs/adr/0004-bun-extension-workspaces-01SEP2026.md @@ -2,13 +2,13 @@ ## Decision -Keep extension sources under `extensions/*` and make each maintained extension directory a Bun workspace with its own package manifest. Use the `@_jb/pi-*` namespace, a root Bun catalog for external dependency versions, and `workspace:^` for repository-owned libraries. The repository root is private and is no longer itself a Pi package. +Keep extension sources under `extensions/*` and make each maintained extension directory a Bun workspace with its own package manifest. Use the `@jbcode/pi-*` namespace, a root Bun catalog for external dependency versions, and `workspace:^` for repository-owned libraries. The repository root is private and is no longer itself a Pi package. -Publish packages to the `jb` owner endpoint of the Gitea npm registry. Repository configuration maps `@_jb` to `https://git.jb.codes/api/packages/jb/npm/`; credentials remain in the user environment or user-level npm configuration and are never committed. +Publish packages to the `jb` owner endpoint of the Gitea npm registry. Repository configuration maps `@jbcode` to `https://git.jb.codes/api/packages/jb/npm/`; credentials remain in the user environment or user-level npm configuration and are never committed. Gitea rejected the initially proposed underscore-prefixed scope as an invalid package name, so the valid `@jbcode` scope is part of the registry contract. -`extensions/shared` is the publishable `@_jb/pi-shared` library. Extensions that import it declare a normal runtime dependency so Pi's production package installation receives the required code. +`extensions/shared` is the publishable `@jbcode/pi-shared` library. Extensions that import it declare a normal runtime dependency so Pi's production package installation receives the required code. -`extensions/_workflows` is reference code, not a package or publishable extension. `@_jb/pi-workflow` remains a private workspace until the required reference runtime is merged under `extensions/workflow`; this prevents publishing two workflow packages or publishing an incomplete package. +`extensions/_workflows` is reference code, not a package or publishable extension. `@jbcode/pi-workflow` remains a private workspace until the required reference runtime is merged under `extensions/workflow`; this prevents publishing two workflow packages or publishing an incomplete package. The existing `config/pi-links.json` policy remains the authority for live-development exposure. Package boundaries and publication do not automatically enable extensions globally. diff --git a/docs/adr/0005-imported-extension-snapshots-01SEP2026.md b/docs/adr/0005-imported-extension-snapshots-01SEP2026.md index 25eadfa..ae27302 100644 --- a/docs/adr/0005-imported-extension-snapshots-01SEP2026.md +++ b/docs/adr/0005-imported-extension-snapshots-01SEP2026.md @@ -6,15 +6,15 @@ Import the tracked files from the `main` branch of these repositories into Bun w | Source | Imported commit | Workspace | Package | | --- | --- | --- | --- | -| `jb/pi-interactive-subagents` | `a3cd328edef59ad491d4f35f9fbadf8ec80cadc4` | `extensions/interactive-subagents` | `@_jb/pi-interactive-subagents` | -| `jb/pi-native-hooks` | `73fa3299bf30fd6da5abfc74a0ee7a36e0a07f0a` | `extensions/native-hooks` | `@_jb/pi-native-hooks` | -| `jb/pi-todo-herdr` | `d9e1ffec51e25238e0baec48ce1303893f13849f` | `extensions/todo-herdr` | `@_jb/pi-todo-herdr` | +| `jb/pi-interactive-subagents` | `a3cd328edef59ad491d4f35f9fbadf8ec80cadc4` | `extensions/interactive-subagents` | `@jbcode/pi-interactive-subagents` | +| `jb/pi-native-hooks` | `73fa3299bf30fd6da5abfc74a0ee7a36e0a07f0a` | `extensions/native-hooks` | `@jbcode/pi-native-hooks` | +| `jb/pi-todo-herdr` | `d9e1ffec51e25238e0baec48ce1303893f13849f` | `extensions/todo-herdr` | `@jbcode/pi-todo-herdr` | Carry snapshots rather than submodules, subtrees, or unrelated Git histories. The monorepo owns package manifests, dependency normalization, compatibility changes, tests, and releases after import. Preserve source attribution in each package. Record source URLs, branches, and commits in `config/imported-packages.json`. `bun run imports:check` compares those commits with current remote `main` heads. The staging command in `scripts/import-package-snapshots.mjs` clones fresh snapshots outside the repository for explicit review; it never overwrites the maintained workspaces. -Rename the private `pi-workflow` extension identity to `workflow`. Its workspace is `extensions/workflow`, its tool and user-facing runtime identifiers use `workflow`, and its configuration/state paths use the same name. The npm package remains `@_jb/pi-workflow` under the repository's `@_jb/pi-` convention. +Rename the private `pi-workflow` extension identity to `workflow`. Its workspace is `extensions/workflow`, its tool and user-facing runtime identifiers use `workflow`, and its configuration/state paths use the same name. The npm package remains `@jbcode/pi-workflow` under the repository's `@jbcode/pi-` convention. ## Consequences diff --git a/docs/npm-packages.md b/docs/npm-packages.md index 591ea0e..53f3bbe 100644 --- a/docs/npm-packages.md +++ b/docs/npm-packages.md @@ -2,7 +2,7 @@ The repository uses Bun workspaces under `extensions/*`. External dependency versions live in the root `package.json` catalog; repository-owned dependencies use `workspace:^`. -Publishable packages include the repository-native extensions plus the imported `@_jb/pi-interactive-subagents`, `@_jb/pi-native-hooks`, and `@_jb/pi-todo-herdr` snapshots. `config/imported-packages.json` records their source `main` commits; use `bun run imports:check` to detect upstream movement. +Publishable packages include the repository-native extensions plus the imported `@jbcode/pi-interactive-subagents`, `@jbcode/pi-native-hooks`, and `@jbcode/pi-todo-herdr` snapshots. `config/imported-packages.json` records their source `main` commits; use `bun run imports:check` to detect upstream movement. ## Install and verify @@ -16,10 +16,10 @@ Use plain `bun install` when intentionally updating `bun.lock`. ## Registry configuration -The tracked `.npmrc` routes only the `@_jb` scope: +The tracked `.npmrc` routes only the `@jbcode` scope: ```ini -@_jb:registry=https://git.jb.codes/api/packages/jb/npm/ +@jbcode:registry=https://git.jb.codes/api/packages/jb/npm/ ``` Configure a Gitea personal access token with package permissions outside the repository: @@ -40,7 +40,7 @@ bun pm pack --destination ../../dist bun publish ``` -Publish `@_jb/pi-shared` before a new version of any extension that depends on it. Gitea rejects republishing an existing name/version, so bump the changed package version first. +Publish `@jbcode/pi-shared` before a new version of any extension that depends on it. Gitea rejects republishing an existing name/version, so bump the changed package version first. `extensions/workflow` is intentionally private until the `_workflows` reference dependencies are merged into that package. `extensions/_workflows` must not be published. @@ -49,11 +49,11 @@ Publish `@_jb/pi-shared` before a new version of any extension that depends on i After configuring the same scope and token in the npm configuration visible to Pi: ```bash -pi install npm:@_jb/pi-dictate -pi install npm:@_jb/pi-file-search -pi install npm:@_jb/pi-interactive-subagents -pi install npm:@_jb/pi-native-hooks -pi install npm:@_jb/pi-todo-herdr +pi install npm:@jbcode/pi-dictate +pi install npm:@jbcode/pi-file-search +pi install npm:@jbcode/pi-interactive-subagents +pi install npm:@jbcode/pi-native-hooks +pi install npm:@jbcode/pi-todo-herdr ``` Pi installs runtime dependencies from the same scoped registry. The repository's symlink-based development exposure remains controlled separately by `config/pi-links.json`. diff --git a/docs/todos.md b/docs/todos.md index 41d66fb..4e04a71 100644 --- a/docs/todos.md +++ b/docs/todos.md @@ -2,7 +2,7 @@ ## Merge `_workflows` reference runtime into `workflow` -`extensions/_workflows` was retained only as a reference while `extensions/workflow` was developed, but `workflow` still imports its runner, model, prompt, and serialization modules. Move the required code under `extensions/workflow`, remove obsolete model-authored workflow surfaces, update tests and documentation, and then delete the reference directory. Until that work is complete, `@_jb/pi-workflow` must remain a private Bun workspace and `extensions/_workflows` must remain excluded from workspaces and publication. Acceptance requires `bun pm pack` for `workflow` to contain every runtime import without reaching outside the package root, followed by an isolated Pi package smoke test. +`extensions/_workflows` was retained only as a reference while `extensions/workflow` was developed, but `workflow` still imports its runner, model, prompt, and serialization modules. Move the required code under `extensions/workflow`, remove obsolete model-authored workflow surfaces, update tests and documentation, and then delete the reference directory. Until that work is complete, `@jbcode/pi-workflow` must remain a private Bun workspace and `extensions/_workflows` must remain excluded from workspaces and publication. Acceptance requires `bun pm pack` for `workflow` to contain every runtime import without reaching outside the package root, followed by an isolated Pi package smoke test. ## Make `pi-links` checks work from linked worktrees diff --git a/extensions/copy-all/README.md b/extensions/copy-all/README.md index de97807..6bdd3f6 100644 --- a/extensions/copy-all/README.md +++ b/extensions/copy-all/README.md @@ -1,7 +1,7 @@ -# @_jb/pi-copy-all +# @jbcode/pi-copy-all Pi extension that adds `/copy-all` for copying the current conversation as Markdown. ```bash -pi install npm:@_jb/pi-copy-all +pi install npm:@jbcode/pi-copy-all ``` diff --git a/extensions/copy-all/package.json b/extensions/copy-all/package.json index c127741..38c3a53 100644 --- a/extensions/copy-all/package.json +++ b/extensions/copy-all/package.json @@ -1,5 +1,5 @@ { - "name": "@_jb/pi-copy-all", + "name": "@jbcode/pi-copy-all", "version": "0.1.0", "description": "Pi command for copying the current conversation as Markdown.", "type": "module", diff --git a/extensions/dictate/package.json b/extensions/dictate/package.json index 2889715..ec28299 100644 --- a/extensions/dictate/package.json +++ b/extensions/dictate/package.json @@ -1,5 +1,5 @@ { - "name": "@_jb/pi-dictate", + "name": "@jbcode/pi-dictate", "version": "0.1.0", "description": "Pi extension for local Linux voice dictation through a Unix socket service.", "type": "module", diff --git a/extensions/effort-controls/README.md b/extensions/effort-controls/README.md index 76b3b61..f8ea9bc 100644 --- a/extensions/effort-controls/README.md +++ b/extensions/effort-controls/README.md @@ -1,7 +1,7 @@ -# @_jb/pi-effort-controls +# @jbcode/pi-effort-controls Pi extension that adds `/effort` reasoning selection and `/fast` priority-mode controls. ```bash -pi install npm:@_jb/pi-effort-controls +pi install npm:@jbcode/pi-effort-controls ``` diff --git a/extensions/effort-controls/package.json b/extensions/effort-controls/package.json index 0149fda..86f745e 100644 --- a/extensions/effort-controls/package.json +++ b/extensions/effort-controls/package.json @@ -1,5 +1,5 @@ { - "name": "@_jb/pi-effort-controls", + "name": "@jbcode/pi-effort-controls", "version": "0.1.0", "description": "Pi commands for reasoning effort and priority-mode controls.", "type": "module", diff --git a/extensions/file-search/README.md b/extensions/file-search/README.md index b6edee7..4d70846 100644 --- a/extensions/file-search/README.md +++ b/extensions/file-search/README.md @@ -1,7 +1,7 @@ -# @_jb/pi-file-search +# @jbcode/pi-file-search Pi extension providing structured `fd` file search and `rg` text search tools. ```bash -pi install npm:@_jb/pi-file-search +pi install npm:@jbcode/pi-file-search ``` diff --git a/extensions/file-search/package.json b/extensions/file-search/package.json index 31c1a7a..1fe2463 100644 --- a/extensions/file-search/package.json +++ b/extensions/file-search/package.json @@ -1,5 +1,5 @@ { - "name": "@_jb/pi-file-search", + "name": "@jbcode/pi-file-search", "version": "0.1.0", "description": "Pi file and text search tools backed by fd and ripgrep.", "type": "module", diff --git a/extensions/interactive-subagents/README.md b/extensions/interactive-subagents/README.md index fd1829f..3abe993 100644 --- a/extensions/interactive-subagents/README.md +++ b/extensions/interactive-subagents/README.md @@ -197,7 +197,7 @@ Status display is configured via `config.json` in the extension directory (copy ## Install ```bash -pi install npm:@_jb/pi-interactive-subagents +pi install npm:@jbcode/pi-interactive-subagents ``` ## Requirements diff --git a/extensions/interactive-subagents/package.json b/extensions/interactive-subagents/package.json index 12ef4ee..cbb49bf 100644 --- a/extensions/interactive-subagents/package.json +++ b/extensions/interactive-subagents/package.json @@ -1,5 +1,5 @@ { - "name": "@_jb/pi-interactive-subagents", + "name": "@jbcode/pi-interactive-subagents", "version": "3.7.2", "description": "Interactive subagents for Pi — spawn, orchestrate, and manage sub-agent sessions in Orca, Herdr or tmux.", "type": "module", diff --git a/extensions/lm-studio/README.md b/extensions/lm-studio/README.md index d6642a6..2ae1d89 100644 --- a/extensions/lm-studio/README.md +++ b/extensions/lm-studio/README.md @@ -1,7 +1,7 @@ -# @_jb/pi-lm-studio +# @jbcode/pi-lm-studio Pi provider extension for a local LM Studio server at `http://127.0.0.1:1234/v1`. ```bash -pi install npm:@_jb/pi-lm-studio +pi install npm:@jbcode/pi-lm-studio ``` diff --git a/extensions/lm-studio/package.json b/extensions/lm-studio/package.json index ed8b416..f88a384 100644 --- a/extensions/lm-studio/package.json +++ b/extensions/lm-studio/package.json @@ -1,5 +1,5 @@ { - "name": "@_jb/pi-lm-studio", + "name": "@jbcode/pi-lm-studio", "version": "0.1.0", "description": "Pi provider registration for a local LM Studio server.", "type": "module", diff --git a/extensions/native-hooks/README.md b/extensions/native-hooks/README.md index 1f22cd2..d410bef 100644 --- a/extensions/native-hooks/README.md +++ b/extensions/native-hooks/README.md @@ -13,7 +13,7 @@ A native Pi extension that coordinates trusted personal policies after workspace Installation is a separate, user-level mutation and is **not** performed by this repository's tests: ```bash -pi install npm:@_jb/pi-native-hooks +pi install npm:@jbcode/pi-native-hooks ``` For monorepo development, use the curated link policy or load `extensions/native-hooks/extensions/pi-native-hooks/index.ts` directly. diff --git a/extensions/native-hooks/docs/implementation-plan.md b/extensions/native-hooks/docs/implementation-plan.md index 17a73e4..1686459 100644 --- a/extensions/native-hooks/docs/implementation-plan.md +++ b/extensions/native-hooks/docs/implementation-plan.md @@ -113,7 +113,7 @@ The loader must: 7. isolate a throwing/invalid module so other policies still load, while surfacing the exact file and error; and 8. reload policies only when Pi recreates the extension on `/reload` or session replacement. -The package exposes `@_jb/pi-native-hooks/policy` type declarations. An authorized initializer writes a personal `tsconfig.json` with a path mapping to the installed package so policies can use `import type` plus `satisfies` without a runtime package import. Runtime validation remains authoritative because type checking can be skipped or stale. +The package exposes `@jbcode/pi-native-hooks/policy` type declarations. An authorized initializer writes a personal `tsconfig.json` with a path mapping to the installed package so policies can use `import type` plus `satisfies` without a runtime package import. Runtime validation remains authoritative because type checking can be skipped or stale. Suggested personal layout: diff --git a/extensions/native-hooks/examples/personal-config/policies/harness-tools-verification.ts b/extensions/native-hooks/examples/personal-config/policies/harness-tools-verification.ts index 08d4e6c..9e060d4 100644 --- a/extensions/native-hooks/examples/personal-config/policies/harness-tools-verification.ts +++ b/extensions/native-hooks/examples/personal-config/policies/harness-tools-verification.ts @@ -1,4 +1,4 @@ -import type { VerificationPolicy } from "@_jb/pi-native-hooks/policy"; +import type { VerificationPolicy } from "@jbcode/pi-native-hooks/policy"; const manifests = new Set(["package.json", "bun.lock", "tsconfig.json"]); const behavior = (path: string) => /^(extensions|scripts|services|skills|config)\//.test(path) || manifests.has(path); const types = (path: string) => /\.tsx?$/.test(path) || manifests.has(path); diff --git a/extensions/native-hooks/examples/personal-config/policies/pi-native-hooks-verification.ts b/extensions/native-hooks/examples/personal-config/policies/pi-native-hooks-verification.ts index 5c72dab..4de5f87 100644 --- a/extensions/native-hooks/examples/personal-config/policies/pi-native-hooks-verification.ts +++ b/extensions/native-hooks/examples/personal-config/policies/pi-native-hooks-verification.ts @@ -1,8 +1,8 @@ -import type { VerificationPolicy } from "@_jb/pi-native-hooks/policy"; +import type { VerificationPolicy } from "@jbcode/pi-native-hooks/policy"; const manifests = new Set(["package.json", "bun.lock", "tsconfig.json"]); const behavior = (path: string) => /^(extensions|src|tests|examples|skills)\//.test(path) || manifests.has(path); const types = (path: string) => /\.tsx?$/.test(path) || manifests.has(path); -export default { kind: "verification", id: "pi-native-hooks-verification", project: { matches: (project) => project.packageName === "@_jb/pi-native-hooks" }, requirements: [ +export default { kind: "verification", id: "pi-native-hooks-verification", project: { matches: (project) => project.packageName === "@jbcode/pi-native-hooks" }, requirements: [ { id: "tests", command: "bun run test", cwd: "project-root", affects: behavior }, { id: "typecheck", command: "bun run typecheck", cwd: "project-root", affects: types }, ] } satisfies VerificationPolicy; diff --git a/extensions/native-hooks/examples/personal-config/policies/typescript-no-dynamic-import.ts b/extensions/native-hooks/examples/personal-config/policies/typescript-no-dynamic-import.ts index 7e4fbd6..fb6348f 100644 --- a/extensions/native-hooks/examples/personal-config/policies/typescript-no-dynamic-import.ts +++ b/extensions/native-hooks/examples/personal-config/policies/typescript-no-dynamic-import.ts @@ -1,4 +1,4 @@ -import type { DiagnosticPolicy } from "@_jb/pi-native-hooks/policy"; +import type { DiagnosticPolicy } from "@jbcode/pi-native-hooks/policy"; const ruleIds = new Set(["typescript-no-dynamic-import-ts", "typescript-no-dynamic-import-tsx"]); export default { kind: "diagnostic", id: "typescript-no-dynamic-import", analyzerKeys: ["ast-grep:personal"], diff --git a/extensions/native-hooks/examples/personal-config/policies/typescript-no-non-null-assertion.ts b/extensions/native-hooks/examples/personal-config/policies/typescript-no-non-null-assertion.ts index e108e41..4c73c9d 100644 --- a/extensions/native-hooks/examples/personal-config/policies/typescript-no-non-null-assertion.ts +++ b/extensions/native-hooks/examples/personal-config/policies/typescript-no-non-null-assertion.ts @@ -1,4 +1,4 @@ -import type { DiagnosticPolicy } from "@_jb/pi-native-hooks/policy"; +import type { DiagnosticPolicy } from "@jbcode/pi-native-hooks/policy"; const ruleIds = new Set(["typescript-no-non-null-assertion-ts", "typescript-no-non-null-assertion-tsx"]); export default { kind: "diagnostic", id: "typescript-no-non-null-assertion", analyzerKeys: ["ast-grep:personal"], diff --git a/extensions/native-hooks/examples/personal-config/tsconfig.json b/extensions/native-hooks/examples/personal-config/tsconfig.json index 6670485..c186da1 100644 --- a/extensions/native-hooks/examples/personal-config/tsconfig.json +++ b/extensions/native-hooks/examples/personal-config/tsconfig.json @@ -5,7 +5,7 @@ "module": "NodeNext", "moduleResolution": "NodeNext", "allowImportingTsExtensions": true, - "paths": { "@_jb/pi-native-hooks/policy": ["__PI_NATIVE_HOOKS_PACKAGE_ROOT__/src/policy.ts"] } + "paths": { "@jbcode/pi-native-hooks/policy": ["__PI_NATIVE_HOOKS_PACKAGE_ROOT__/src/policy.ts"] } }, "include": ["policies/*.ts"] } diff --git a/extensions/native-hooks/examples/policies/harness-tools-verification.ts b/extensions/native-hooks/examples/policies/harness-tools-verification.ts index 08d4e6c..9e060d4 100644 --- a/extensions/native-hooks/examples/policies/harness-tools-verification.ts +++ b/extensions/native-hooks/examples/policies/harness-tools-verification.ts @@ -1,4 +1,4 @@ -import type { VerificationPolicy } from "@_jb/pi-native-hooks/policy"; +import type { VerificationPolicy } from "@jbcode/pi-native-hooks/policy"; const manifests = new Set(["package.json", "bun.lock", "tsconfig.json"]); const behavior = (path: string) => /^(extensions|scripts|services|skills|config)\//.test(path) || manifests.has(path); const types = (path: string) => /\.tsx?$/.test(path) || manifests.has(path); diff --git a/extensions/native-hooks/examples/policies/pi-native-hooks-verification.ts b/extensions/native-hooks/examples/policies/pi-native-hooks-verification.ts index 5c72dab..4de5f87 100644 --- a/extensions/native-hooks/examples/policies/pi-native-hooks-verification.ts +++ b/extensions/native-hooks/examples/policies/pi-native-hooks-verification.ts @@ -1,8 +1,8 @@ -import type { VerificationPolicy } from "@_jb/pi-native-hooks/policy"; +import type { VerificationPolicy } from "@jbcode/pi-native-hooks/policy"; const manifests = new Set(["package.json", "bun.lock", "tsconfig.json"]); const behavior = (path: string) => /^(extensions|src|tests|examples|skills)\//.test(path) || manifests.has(path); const types = (path: string) => /\.tsx?$/.test(path) || manifests.has(path); -export default { kind: "verification", id: "pi-native-hooks-verification", project: { matches: (project) => project.packageName === "@_jb/pi-native-hooks" }, requirements: [ +export default { kind: "verification", id: "pi-native-hooks-verification", project: { matches: (project) => project.packageName === "@jbcode/pi-native-hooks" }, requirements: [ { id: "tests", command: "bun run test", cwd: "project-root", affects: behavior }, { id: "typecheck", command: "bun run typecheck", cwd: "project-root", affects: types }, ] } satisfies VerificationPolicy; diff --git a/extensions/native-hooks/examples/policies/typescript-no-dynamic-import.ts b/extensions/native-hooks/examples/policies/typescript-no-dynamic-import.ts index 7e4fbd6..fb6348f 100644 --- a/extensions/native-hooks/examples/policies/typescript-no-dynamic-import.ts +++ b/extensions/native-hooks/examples/policies/typescript-no-dynamic-import.ts @@ -1,4 +1,4 @@ -import type { DiagnosticPolicy } from "@_jb/pi-native-hooks/policy"; +import type { DiagnosticPolicy } from "@jbcode/pi-native-hooks/policy"; const ruleIds = new Set(["typescript-no-dynamic-import-ts", "typescript-no-dynamic-import-tsx"]); export default { kind: "diagnostic", id: "typescript-no-dynamic-import", analyzerKeys: ["ast-grep:personal"], diff --git a/extensions/native-hooks/examples/policies/typescript-no-non-null-assertion.ts b/extensions/native-hooks/examples/policies/typescript-no-non-null-assertion.ts index e108e41..4c73c9d 100644 --- a/extensions/native-hooks/examples/policies/typescript-no-non-null-assertion.ts +++ b/extensions/native-hooks/examples/policies/typescript-no-non-null-assertion.ts @@ -1,4 +1,4 @@ -import type { DiagnosticPolicy } from "@_jb/pi-native-hooks/policy"; +import type { DiagnosticPolicy } from "@jbcode/pi-native-hooks/policy"; const ruleIds = new Set(["typescript-no-non-null-assertion-ts", "typescript-no-non-null-assertion-tsx"]); export default { kind: "diagnostic", id: "typescript-no-non-null-assertion", analyzerKeys: ["ast-grep:personal"], diff --git a/extensions/native-hooks/package.json b/extensions/native-hooks/package.json index f2a4243..6b4ceb4 100644 --- a/extensions/native-hooks/package.json +++ b/extensions/native-hooks/package.json @@ -1,5 +1,5 @@ { - "name": "@_jb/pi-native-hooks", + "name": "@jbcode/pi-native-hooks", "version": "0.1.0", "description": "Native Pi hooks runtime for shared diagnostics and verification gates.", "type": "module", diff --git a/extensions/native-hooks/skills/native-hook-authoring/references/contracts.md b/extensions/native-hooks/skills/native-hook-authoring/references/contracts.md index 0f6a814..f70db56 100644 --- a/extensions/native-hooks/skills/native-hook-authoring/references/contracts.md +++ b/extensions/native-hooks/skills/native-hook-authoring/references/contracts.md @@ -1,6 +1,6 @@ # Policy contracts -The authoritative declarations are exported by `@_jb/pi-native-hooks/policy` from `src/policy.ts`. Do not copy them into personal config. +The authoritative declarations are exported by `@jbcode/pi-native-hooks/policy` from `src/policy.ts`. Do not copy them into personal config. A diagnostic policy declares `kind`, a unique `id`, analyzer keys, `appliesTo`, and a pure `evaluate`. `evaluate` receives readonly normalized snapshots and a process-free policy context. Filter findings by exact rule ID and return bounded guidance plus the supported suppression form. @@ -9,7 +9,7 @@ A verification policy declares a project matcher and exact requirements. Each re Use: ```ts -import type { DiagnosticPolicy } from "@_jb/pi-native-hooks/policy"; +import type { DiagnosticPolicy } from "@jbcode/pi-native-hooks/policy"; export default { /* ... */ } satisfies DiagnosticPolicy; ``` diff --git a/extensions/native-hooks/tests/fixtures/personal-config/policies/harness-tools-verification.ts b/extensions/native-hooks/tests/fixtures/personal-config/policies/harness-tools-verification.ts index 08d4e6c..9e060d4 100644 --- a/extensions/native-hooks/tests/fixtures/personal-config/policies/harness-tools-verification.ts +++ b/extensions/native-hooks/tests/fixtures/personal-config/policies/harness-tools-verification.ts @@ -1,4 +1,4 @@ -import type { VerificationPolicy } from "@_jb/pi-native-hooks/policy"; +import type { VerificationPolicy } from "@jbcode/pi-native-hooks/policy"; const manifests = new Set(["package.json", "bun.lock", "tsconfig.json"]); const behavior = (path: string) => /^(extensions|scripts|services|skills|config)\//.test(path) || manifests.has(path); const types = (path: string) => /\.tsx?$/.test(path) || manifests.has(path); diff --git a/extensions/native-hooks/tests/fixtures/personal-config/policies/pi-native-hooks-verification.ts b/extensions/native-hooks/tests/fixtures/personal-config/policies/pi-native-hooks-verification.ts index 5c72dab..4de5f87 100644 --- a/extensions/native-hooks/tests/fixtures/personal-config/policies/pi-native-hooks-verification.ts +++ b/extensions/native-hooks/tests/fixtures/personal-config/policies/pi-native-hooks-verification.ts @@ -1,8 +1,8 @@ -import type { VerificationPolicy } from "@_jb/pi-native-hooks/policy"; +import type { VerificationPolicy } from "@jbcode/pi-native-hooks/policy"; const manifests = new Set(["package.json", "bun.lock", "tsconfig.json"]); const behavior = (path: string) => /^(extensions|src|tests|examples|skills)\//.test(path) || manifests.has(path); const types = (path: string) => /\.tsx?$/.test(path) || manifests.has(path); -export default { kind: "verification", id: "pi-native-hooks-verification", project: { matches: (project) => project.packageName === "@_jb/pi-native-hooks" }, requirements: [ +export default { kind: "verification", id: "pi-native-hooks-verification", project: { matches: (project) => project.packageName === "@jbcode/pi-native-hooks" }, requirements: [ { id: "tests", command: "bun run test", cwd: "project-root", affects: behavior }, { id: "typecheck", command: "bun run typecheck", cwd: "project-root", affects: types }, ] } satisfies VerificationPolicy; diff --git a/extensions/native-hooks/tests/fixtures/personal-config/policies/typescript-no-dynamic-import.ts b/extensions/native-hooks/tests/fixtures/personal-config/policies/typescript-no-dynamic-import.ts index 7e4fbd6..fb6348f 100644 --- a/extensions/native-hooks/tests/fixtures/personal-config/policies/typescript-no-dynamic-import.ts +++ b/extensions/native-hooks/tests/fixtures/personal-config/policies/typescript-no-dynamic-import.ts @@ -1,4 +1,4 @@ -import type { DiagnosticPolicy } from "@_jb/pi-native-hooks/policy"; +import type { DiagnosticPolicy } from "@jbcode/pi-native-hooks/policy"; const ruleIds = new Set(["typescript-no-dynamic-import-ts", "typescript-no-dynamic-import-tsx"]); export default { kind: "diagnostic", id: "typescript-no-dynamic-import", analyzerKeys: ["ast-grep:personal"], diff --git a/extensions/native-hooks/tests/fixtures/personal-config/policies/typescript-no-non-null-assertion.ts b/extensions/native-hooks/tests/fixtures/personal-config/policies/typescript-no-non-null-assertion.ts index e108e41..4c73c9d 100644 --- a/extensions/native-hooks/tests/fixtures/personal-config/policies/typescript-no-non-null-assertion.ts +++ b/extensions/native-hooks/tests/fixtures/personal-config/policies/typescript-no-non-null-assertion.ts @@ -1,4 +1,4 @@ -import type { DiagnosticPolicy } from "@_jb/pi-native-hooks/policy"; +import type { DiagnosticPolicy } from "@jbcode/pi-native-hooks/policy"; const ruleIds = new Set(["typescript-no-non-null-assertion-ts", "typescript-no-non-null-assertion-tsx"]); export default { kind: "diagnostic", id: "typescript-no-non-null-assertion", analyzerKeys: ["ast-grep:personal"], diff --git a/extensions/native-hooks/tests/fixtures/personal-config/tsconfig.json b/extensions/native-hooks/tests/fixtures/personal-config/tsconfig.json index 6670485..c186da1 100644 --- a/extensions/native-hooks/tests/fixtures/personal-config/tsconfig.json +++ b/extensions/native-hooks/tests/fixtures/personal-config/tsconfig.json @@ -5,7 +5,7 @@ "module": "NodeNext", "moduleResolution": "NodeNext", "allowImportingTsExtensions": true, - "paths": { "@_jb/pi-native-hooks/policy": ["__PI_NATIVE_HOOKS_PACKAGE_ROOT__/src/policy.ts"] } + "paths": { "@jbcode/pi-native-hooks/policy": ["__PI_NATIVE_HOOKS_PACKAGE_ROOT__/src/policy.ts"] } }, "include": ["policies/*.ts"] } diff --git a/extensions/prompt-snippets/package.json b/extensions/prompt-snippets/package.json index 9cf2c96..025b6d3 100644 --- a/extensions/prompt-snippets/package.json +++ b/extensions/prompt-snippets/package.json @@ -1,5 +1,5 @@ { - "name": "@_jb/pi-prompt-snippets", + "name": "@jbcode/pi-prompt-snippets", "version": "0.1.0", "description": "Pi extension for toggling reusable per-message prompt snippets.", "type": "module", diff --git a/extensions/shared/README.md b/extensions/shared/README.md index 016ad1d..c9d4603 100644 --- a/extensions/shared/README.md +++ b/extensions/shared/README.md @@ -1,3 +1,3 @@ -# @_jb/pi-shared +# @jbcode/pi-shared -Shared runtime utilities used by the `@_jb` Pi extension packages. This is a library package and does not register a Pi extension by itself. +Shared runtime utilities used by the `@jbcode` Pi extension packages. This is a library package and does not register a Pi extension by itself. diff --git a/extensions/shared/package.json b/extensions/shared/package.json index d9a4739..29db9e5 100644 --- a/extensions/shared/package.json +++ b/extensions/shared/package.json @@ -1,7 +1,7 @@ { - "name": "@_jb/pi-shared", + "name": "@jbcode/pi-shared", "version": "0.1.0", - "description": "Shared runtime utilities for @_jb Pi extensions.", + "description": "Shared runtime utilities for @jbcode Pi extensions.", "type": "module", "license": "MIT", "engines": { "node": ">=22.19.0" }, diff --git a/extensions/subagents/README.md b/extensions/subagents/README.md index b35f6e0..9b76944 100644 --- a/extensions/subagents/README.md +++ b/extensions/subagents/README.md @@ -1,9 +1,9 @@ -# @_jb/pi-subagents +# @jbcode/pi-subagents Pi extension for background subagents using Pi, Claude Code, and Codex backends. ```bash -pi install npm:@_jb/pi-subagents +pi install npm:@jbcode/pi-subagents ``` Do not enable it alongside another extension that registers the same subagent tools. diff --git a/extensions/subagents/package.json b/extensions/subagents/package.json index 2364a64..3941f15 100644 --- a/extensions/subagents/package.json +++ b/extensions/subagents/package.json @@ -1,5 +1,5 @@ { - "name": "@_jb/pi-subagents", + "name": "@jbcode/pi-subagents", "version": "0.1.0", "description": "Pi extension for background subagents across Pi, Claude Code, and Codex backends.", "type": "module", @@ -9,7 +9,7 @@ "files": ["index.ts", "src", "docs", "README.md", "LICENSE", "!**/*.test.ts"], "pi": { "extensions": ["./index.ts"] }, "dependencies": { - "@_jb/pi-shared": "workspace:^", + "@jbcode/pi-shared": "workspace:^", "@anthropic-ai/claude-agent-sdk": "catalog:", "effect": "catalog:" }, diff --git a/extensions/subagents/src/backends/pi.ts b/extensions/subagents/src/backends/pi.ts index 48aa82b..1b4fdb3 100644 --- a/extensions/subagents/src/backends/pi.ts +++ b/extensions/subagents/src/backends/pi.ts @@ -37,8 +37,8 @@ import { createChildResources, shutdownAndDisposeChildSession, waitForChildOperation, -} from "@_jb/pi-shared/child-session"; -import { createToolCallTimeoutGuard } from "@_jb/pi-shared/tool-call-timeout"; +} from "@jbcode/pi-shared/child-session"; +import { createToolCallTimeoutGuard } from "@jbcode/pi-shared/tool-call-timeout"; // --- Model + effort resolution ----------------------------------------------- diff --git a/extensions/todo-herdr/README.md b/extensions/todo-herdr/README.md index 5549363..471e410 100644 --- a/extensions/todo-herdr/README.md +++ b/extensions/todo-herdr/README.md @@ -31,7 +31,7 @@ Hierarchical, session-local task tracking for [Pi](https://pi.dev), with atomic Install the latest version from npm: ```bash -pi install npm:@_jb/pi-todo-herdr +pi install npm:@jbcode/pi-todo-herdr ``` Then start Pi. If Pi is already running, use `/reload` to load the extension. @@ -39,14 +39,14 @@ Then start Pi. If Pi is already running, use `/reload` to load the extension. To try the package for one run without installing it: ```bash -pi -e npm:@_jb/pi-todo-herdr +pi -e npm:@jbcode/pi-todo-herdr ``` Update or remove it with Pi's package commands: ```bash -pi update npm:@_jb/pi-todo-herdr -pi remove npm:@_jb/pi-todo-herdr +pi update npm:@jbcode/pi-todo-herdr +pi remove npm:@jbcode/pi-todo-herdr ``` ## Usage @@ -138,8 +138,8 @@ Development uses the monorepo's pinned Bun toolchain and shared catalog. ```bash bun install --frozen-lockfile -bun run --filter '@_jb/pi-todo-herdr' typecheck -bun run --filter '@_jb/pi-todo-herdr' test +bun run --filter '@jbcode/pi-todo-herdr' typecheck +bun run --filter '@jbcode/pi-todo-herdr' test (cd extensions/todo-herdr && bun pm pack --destination ../../dist) ``` diff --git a/extensions/todo-herdr/package.json b/extensions/todo-herdr/package.json index 6482065..277f349 100644 --- a/extensions/todo-herdr/package.json +++ b/extensions/todo-herdr/package.json @@ -1,5 +1,5 @@ { - "name": "@_jb/pi-todo-herdr", + "name": "@jbcode/pi-todo-herdr", "version": "0.2.5", "description": "Hierarchical task tools for Pi with a live widget and Herdr sidebar integration.", "type": "module", diff --git a/extensions/update/README.md b/extensions/update/README.md index b5b5b9f..2c7daec 100644 --- a/extensions/update/README.md +++ b/extensions/update/README.md @@ -1,7 +1,7 @@ -# @_jb/pi-update +# @jbcode/pi-update Pi extension providing controlled Pi and package update commands. ```bash -pi install npm:@_jb/pi-update +pi install npm:@jbcode/pi-update ``` diff --git a/extensions/update/package.json b/extensions/update/package.json index 9d22512..5bb2a06 100644 --- a/extensions/update/package.json +++ b/extensions/update/package.json @@ -1,5 +1,5 @@ { - "name": "@_jb/pi-update", + "name": "@jbcode/pi-update", "version": "0.1.0", "description": "Pi extension for controlled Pi and package updates.", "type": "module", diff --git a/extensions/workflow/README.md b/extensions/workflow/README.md index 902a78c..916cd03 100644 --- a/extensions/workflow/README.md +++ b/extensions/workflow/README.md @@ -1,5 +1,5 @@ # workflow -Persisted, gated feature workflows for Pi. The private Bun workspace retains the npm package name `@_jb/pi-workflow` under the repository's scoped package convention. +Persisted, gated feature workflows for Pi. The private Bun workspace retains the npm package name `@jbcode/pi-workflow` under the repository's scoped package convention. This workspace is currently private and must not be published. Its remaining runtime dependencies on the `_workflows` reference implementation must first be merged into this directory; see `docs/todos.md` at the repository root. diff --git a/extensions/workflow/execution.ts b/extensions/workflow/execution.ts index cc33c1e..f83dd22 100644 --- a/extensions/workflow/execution.ts +++ b/extensions/workflow/execution.ts @@ -16,7 +16,7 @@ import { Type } from "typebox"; import { createChildResources, resolveStandaloneChildProjectTrust, -} from "@_jb/pi-shared/child-session"; +} from "@jbcode/pi-shared/child-session"; import { runAgent, type AgentOutcome, diff --git a/extensions/workflow/package.json b/extensions/workflow/package.json index 7445dcb..e25ebd8 100644 --- a/extensions/workflow/package.json +++ b/extensions/workflow/package.json @@ -1,5 +1,5 @@ { - "name": "@_jb/pi-workflow", + "name": "@jbcode/pi-workflow", "version": "0.1.0", "private": true, "description": "Private workspace for the deferred Pi workflow extension migration.", @@ -9,7 +9,7 @@ "keywords": ["pi-package", "pi-extension", "workflow"], "pi": { "extensions": ["./index.ts"] }, "dependencies": { - "@_jb/pi-shared": "workspace:^" + "@jbcode/pi-shared": "workspace:^" }, "peerDependencies": { "@earendil-works/pi-ai": "catalog:pi-peer", diff --git a/package.json b/package.json index 8af7ca1..4e1f467 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "test:dictate-service": "PYTHONPATH=services/dictate/src python -m unittest discover -s services/dictate/tests -p 'test_*.py'", "test:links": "node --test scripts/pi-links.test.mjs", "test:packages": "node --test scripts/package-workspaces.test.mjs", - "test:imported": "bun run --filter '@_jb/pi-interactive-subagents' test && bun run --filter '@_jb/pi-native-hooks' test && bun run --filter '@_jb/pi-todo-herdr' test", + "test:imported": "bun run --filter '@jbcode/pi-interactive-subagents' test && bun run --filter '@jbcode/pi-native-hooks' test && bun run --filter '@jbcode/pi-todo-herdr' test", "test:node": "node --test --experimental-strip-types extensions/dictate/index.test.ts extensions/lm-studio/index.test.ts extensions/shared/*.test.ts extensions/subagents/by-the-way.test.ts extensions/subagents/context-usage.test.ts extensions/subagents/manager.test.ts extensions/subagents/result-delivery.test.ts extensions/subagents/takeover.test.ts extensions/_workflows/*.test.ts extensions/workflow/*.test.ts", "test:file-search": "vitest run extensions/file-search/index.spec.ts --exclude '.worktrees/**'", "test:live": "node --test --experimental-strip-types extensions/subagents/claude.test.ts extensions/subagents/codex.test.ts" diff --git a/scripts/package-workspaces.test.mjs b/scripts/package-workspaces.test.mjs index c600d1c..ea023a2 100644 --- a/scripts/package-workspaces.test.mjs +++ b/scripts/package-workspaces.test.mjs @@ -95,7 +95,7 @@ test("imported package snapshots retain explicit main-branch provenance", () => assert.match(entry.source, /^ssh:\/\/git@git\.jb\.codes:7722\/jb\//); assert.match( readJson(path.join(root, entry.target, "package.json")).name, - /^@_jb\/pi-/, + /^@jbcode\/pi-/, ); } }); @@ -106,7 +106,7 @@ test("publishable workspaces have Gitea-safe package contracts", () => { const manifest = workspaceManifest(directory); if (manifest.private) continue; - assert.match(manifest.name, /^@_jb\/pi-[a-z0-9-]+$/); + assert.match(manifest.name, /^@jbcode\/pi-[a-z0-9-]+$/); assert.equal(manifest.publishConfig?.registry, registry); assert.equal(manifest.engines?.node, ">=22.19.0"); assert.equal(readFileSync(path.join(packageRoot, "LICENSE"), "utf8").length > 0, true);