fix: use Gitea-compatible package scope
This commit is contained in:
@@ -1 +1 @@
|
|||||||
@_jb:registry=https://git.jb.codes/api/packages/jb/npm/
|
@jbcode:registry=https://git.jb.codes/api/packages/jb/npm/
|
||||||
|
|||||||
@@ -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.
|
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
|
### 5. Verify Pi
|
||||||
|
|
||||||
@@ -127,21 +127,21 @@ Inside Pi:
|
|||||||
|
|
||||||
The monorepo contains three optional packages that are not enabled by the curated link policy:
|
The monorepo contains three optional packages that are not enabled by the curated link policy:
|
||||||
|
|
||||||
- `@_jb/pi-interactive-subagents`;
|
- `@jbcode/pi-interactive-subagents`;
|
||||||
- `@_jb/pi-native-hooks`;
|
- `@jbcode/pi-native-hooks`;
|
||||||
- `@_jb/pi-todo-herdr`.
|
- `@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:
|
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
|
```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}
|
//git.jb.codes/api/packages/jb/npm/:_authToken=${GITEA_NPM_TOKEN}
|
||||||
```
|
```
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pi install npm:@_jb/pi-interactive-subagents
|
pi install npm:@jbcode/pi-interactive-subagents
|
||||||
pi install npm:@_jb/pi-native-hooks
|
pi install npm:@jbcode/pi-native-hooks
|
||||||
pi install npm:@_jb/pi-todo-herdr
|
pi install npm:@jbcode/pi-todo-herdr
|
||||||
pi list
|
pi list
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -151,7 +151,7 @@ Do not globally enable `harness-tools/extensions/subagents` at the same time as
|
|||||||
|
|
||||||
### Configure interactive subagents
|
### 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;
|
- **Herdr:** install its Pi integration, then launch Pi inside a Herdr-managed pane;
|
||||||
- **tmux:** launch Pi inside tmux when Herdr is unavailable.
|
- **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
|
### 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
|
### 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`:
|
Inside Pi after `/reload`:
|
||||||
|
|
||||||
@@ -223,13 +223,13 @@ herdr status client
|
|||||||
### Update or remove the Gitea packages
|
### Update or remove the Gitea packages
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pi update npm:@_jb/pi-interactive-subagents
|
pi update npm:@jbcode/pi-interactive-subagents
|
||||||
pi update npm:@_jb/pi-native-hooks
|
pi update npm:@jbcode/pi-native-hooks
|
||||||
pi update npm:@_jb/pi-todo-herdr
|
pi update npm:@jbcode/pi-todo-herdr
|
||||||
|
|
||||||
pi remove npm:@_jb/pi-interactive-subagents
|
pi remove npm:@jbcode/pi-interactive-subagents
|
||||||
pi remove npm:@_jb/pi-native-hooks
|
pi remove npm:@jbcode/pi-native-hooks
|
||||||
pi remove npm:@_jb/pi-todo-herdr
|
pi remove npm:@jbcode/pi-todo-herdr
|
||||||
```
|
```
|
||||||
|
|
||||||
Run `/reload` after an update or removal.
|
Run `/reload` after an update or removal.
|
||||||
|
|||||||
@@ -19,28 +19,28 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"extensions/copy-all": {
|
"extensions/copy-all": {
|
||||||
"name": "@_jb/pi-copy-all",
|
"name": "@jbcode/pi-copy-all",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@earendil-works/pi-coding-agent": "catalog:pi-peer",
|
"@earendil-works/pi-coding-agent": "catalog:pi-peer",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"extensions/dictate": {
|
"extensions/dictate": {
|
||||||
"name": "@_jb/pi-dictate",
|
"name": "@jbcode/pi-dictate",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@earendil-works/pi-coding-agent": "catalog:pi-peer",
|
"@earendil-works/pi-coding-agent": "catalog:pi-peer",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"extensions/effort-controls": {
|
"extensions/effort-controls": {
|
||||||
"name": "@_jb/pi-effort-controls",
|
"name": "@jbcode/pi-effort-controls",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@earendil-works/pi-coding-agent": "catalog:pi-peer",
|
"@earendil-works/pi-coding-agent": "catalog:pi-peer",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"extensions/file-search": {
|
"extensions/file-search": {
|
||||||
"name": "@_jb/pi-file-search",
|
"name": "@jbcode/pi-file-search",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@effect/platform-node": "catalog:",
|
"@effect/platform-node": "catalog:",
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"extensions/interactive-subagents": {
|
"extensions/interactive-subagents": {
|
||||||
"name": "@_jb/pi-interactive-subagents",
|
"name": "@jbcode/pi-interactive-subagents",
|
||||||
"version": "3.7.2",
|
"version": "3.7.2",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@earendil-works/pi-coding-agent": "catalog:",
|
"@earendil-works/pi-coding-agent": "catalog:",
|
||||||
@@ -71,14 +71,14 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"extensions/lm-studio": {
|
"extensions/lm-studio": {
|
||||||
"name": "@_jb/pi-lm-studio",
|
"name": "@jbcode/pi-lm-studio",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@earendil-works/pi-coding-agent": "catalog:pi-peer",
|
"@earendil-works/pi-coding-agent": "catalog:pi-peer",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"extensions/native-hooks": {
|
"extensions/native-hooks": {
|
||||||
"name": "@_jb/pi-native-hooks",
|
"name": "@jbcode/pi-native-hooks",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@earendil-works/pi-coding-agent": "catalog:",
|
"@earendil-works/pi-coding-agent": "catalog:",
|
||||||
@@ -93,7 +93,7 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"extensions/prompt-snippets": {
|
"extensions/prompt-snippets": {
|
||||||
"name": "@_jb/pi-prompt-snippets",
|
"name": "@jbcode/pi-prompt-snippets",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@earendil-works/pi-coding-agent": "catalog:pi-peer",
|
"@earendil-works/pi-coding-agent": "catalog:pi-peer",
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"extensions/shared": {
|
"extensions/shared": {
|
||||||
"name": "@_jb/pi-shared",
|
"name": "@jbcode/pi-shared",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@earendil-works/pi-coding-agent": "catalog:pi-peer",
|
"@earendil-works/pi-coding-agent": "catalog:pi-peer",
|
||||||
@@ -109,11 +109,11 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"extensions/subagents": {
|
"extensions/subagents": {
|
||||||
"name": "@_jb/pi-subagents",
|
"name": "@jbcode/pi-subagents",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@_jb/pi-shared": "workspace:^",
|
|
||||||
"@anthropic-ai/claude-agent-sdk": "catalog:",
|
"@anthropic-ai/claude-agent-sdk": "catalog:",
|
||||||
|
"@jbcode/pi-shared": "workspace:^",
|
||||||
"effect": "catalog:",
|
"effect": "catalog:",
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
@@ -124,7 +124,7 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"extensions/todo-herdr": {
|
"extensions/todo-herdr": {
|
||||||
"name": "@_jb/pi-todo-herdr",
|
"name": "@jbcode/pi-todo-herdr",
|
||||||
"version": "0.2.5",
|
"version": "0.2.5",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@earendil-works/pi-ai": "catalog:",
|
"@earendil-works/pi-ai": "catalog:",
|
||||||
@@ -141,17 +141,17 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"extensions/update": {
|
"extensions/update": {
|
||||||
"name": "@_jb/pi-update",
|
"name": "@jbcode/pi-update",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@earendil-works/pi-coding-agent": "catalog:pi-peer",
|
"@earendil-works/pi-coding-agent": "catalog:pi-peer",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"extensions/workflow": {
|
"extensions/workflow": {
|
||||||
"name": "@_jb/pi-workflow",
|
"name": "@jbcode/pi-workflow",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@_jb/pi-shared": "workspace:^",
|
"@jbcode/pi-shared": "workspace:^",
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@earendil-works/pi-ai": "catalog:pi-peer",
|
"@earendil-works/pi-ai": "catalog:pi-peer",
|
||||||
@@ -190,32 +190,6 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
"packages": {
|
"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": ["@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=="],
|
"@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=="],
|
"@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=="],
|
"@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=="],
|
"@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=="],
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
## Decision
|
## 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.
|
The existing `config/pi-links.json` policy remains the authority for live-development exposure. Package boundaries and publication do not automatically enable extensions globally.
|
||||||
|
|
||||||
|
|||||||
@@ -6,15 +6,15 @@ Import the tracked files from the `main` branch of these repositories into Bun w
|
|||||||
|
|
||||||
| Source | Imported commit | Workspace | Package |
|
| Source | Imported commit | Workspace | Package |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| `jb/pi-interactive-subagents` | `a3cd328edef59ad491d4f35f9fbadf8ec80cadc4` | `extensions/interactive-subagents` | `@_jb/pi-interactive-subagents` |
|
| `jb/pi-interactive-subagents` | `a3cd328edef59ad491d4f35f9fbadf8ec80cadc4` | `extensions/interactive-subagents` | `@jbcode/pi-interactive-subagents` |
|
||||||
| `jb/pi-native-hooks` | `73fa3299bf30fd6da5abfc74a0ee7a36e0a07f0a` | `extensions/native-hooks` | `@_jb/pi-native-hooks` |
|
| `jb/pi-native-hooks` | `73fa3299bf30fd6da5abfc74a0ee7a36e0a07f0a` | `extensions/native-hooks` | `@jbcode/pi-native-hooks` |
|
||||||
| `jb/pi-todo-herdr` | `d9e1ffec51e25238e0baec48ce1303893f13849f` | `extensions/todo-herdr` | `@_jb/pi-todo-herdr` |
|
| `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.
|
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.
|
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-<name>` 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-<name>` convention.
|
||||||
|
|
||||||
## Consequences
|
## Consequences
|
||||||
|
|
||||||
|
|||||||
@@ -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:^`.
|
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
|
## Install and verify
|
||||||
|
|
||||||
@@ -16,10 +16,10 @@ Use plain `bun install` when intentionally updating `bun.lock`.
|
|||||||
|
|
||||||
## Registry configuration
|
## Registry configuration
|
||||||
|
|
||||||
The tracked `.npmrc` routes only the `@_jb` scope:
|
The tracked `.npmrc` routes only the `@jbcode` scope:
|
||||||
|
|
||||||
```ini
|
```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:
|
Configure a Gitea personal access token with package permissions outside the repository:
|
||||||
@@ -40,7 +40,7 @@ bun pm pack --destination ../../dist
|
|||||||
bun publish
|
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.
|
`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:
|
After configuring the same scope and token in the npm configuration visible to Pi:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pi install npm:@_jb/pi-dictate
|
pi install npm:@jbcode/pi-dictate
|
||||||
pi install npm:@_jb/pi-file-search
|
pi install npm:@jbcode/pi-file-search
|
||||||
pi install npm:@_jb/pi-interactive-subagents
|
pi install npm:@jbcode/pi-interactive-subagents
|
||||||
pi install npm:@_jb/pi-native-hooks
|
pi install npm:@jbcode/pi-native-hooks
|
||||||
pi install npm:@_jb/pi-todo-herdr
|
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`.
|
Pi installs runtime dependencies from the same scoped registry. The repository's symlink-based development exposure remains controlled separately by `config/pi-links.json`.
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## Merge `_workflows` reference runtime into `workflow`
|
## 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
|
## Make `pi-links` checks work from linked worktrees
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
Pi extension that adds `/copy-all` for copying the current conversation as Markdown.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pi install npm:@_jb/pi-copy-all
|
pi install npm:@jbcode/pi-copy-all
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@_jb/pi-copy-all",
|
"name": "@jbcode/pi-copy-all",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"description": "Pi command for copying the current conversation as Markdown.",
|
"description": "Pi command for copying the current conversation as Markdown.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@_jb/pi-dictate",
|
"name": "@jbcode/pi-dictate",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"description": "Pi extension for local Linux voice dictation through a Unix socket service.",
|
"description": "Pi extension for local Linux voice dictation through a Unix socket service.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# @_jb/pi-effort-controls
|
# @jbcode/pi-effort-controls
|
||||||
|
|
||||||
Pi extension that adds `/effort` reasoning selection and `/fast` priority-mode controls.
|
Pi extension that adds `/effort` reasoning selection and `/fast` priority-mode controls.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pi install npm:@_jb/pi-effort-controls
|
pi install npm:@jbcode/pi-effort-controls
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@_jb/pi-effort-controls",
|
"name": "@jbcode/pi-effort-controls",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"description": "Pi commands for reasoning effort and priority-mode controls.",
|
"description": "Pi commands for reasoning effort and priority-mode controls.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# @_jb/pi-file-search
|
# @jbcode/pi-file-search
|
||||||
|
|
||||||
Pi extension providing structured `fd` file search and `rg` text search tools.
|
Pi extension providing structured `fd` file search and `rg` text search tools.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pi install npm:@_jb/pi-file-search
|
pi install npm:@jbcode/pi-file-search
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@_jb/pi-file-search",
|
"name": "@jbcode/pi-file-search",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"description": "Pi file and text search tools backed by fd and ripgrep.",
|
"description": "Pi file and text search tools backed by fd and ripgrep.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ Status display is configured via `config.json` in the extension directory (copy
|
|||||||
## Install
|
## Install
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pi install npm:@_jb/pi-interactive-subagents
|
pi install npm:@jbcode/pi-interactive-subagents
|
||||||
```
|
```
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@_jb/pi-interactive-subagents",
|
"name": "@jbcode/pi-interactive-subagents",
|
||||||
"version": "3.7.2",
|
"version": "3.7.2",
|
||||||
"description": "Interactive subagents for Pi — spawn, orchestrate, and manage sub-agent sessions in Orca, Herdr or tmux.",
|
"description": "Interactive subagents for Pi — spawn, orchestrate, and manage sub-agent sessions in Orca, Herdr or tmux.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -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`.
|
Pi provider extension for a local LM Studio server at `http://127.0.0.1:1234/v1`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pi install npm:@_jb/pi-lm-studio
|
pi install npm:@jbcode/pi-lm-studio
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@_jb/pi-lm-studio",
|
"name": "@jbcode/pi-lm-studio",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"description": "Pi provider registration for a local LM Studio server.",
|
"description": "Pi provider registration for a local LM Studio server.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -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:
|
Installation is a separate, user-level mutation and is **not** performed by this repository's tests:
|
||||||
|
|
||||||
```bash
|
```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.
|
For monorepo development, use the curated link policy or load `extensions/native-hooks/extensions/pi-native-hooks/index.ts` directly.
|
||||||
|
|||||||
@@ -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
|
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.
|
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:
|
Suggested personal layout:
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -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 manifests = new Set(["package.json", "bun.lock", "tsconfig.json"]);
|
||||||
const behavior = (path: string) => /^(extensions|scripts|services|skills|config)\//.test(path) || manifests.has(path);
|
const behavior = (path: string) => /^(extensions|scripts|services|skills|config)\//.test(path) || manifests.has(path);
|
||||||
const types = (path: string) => /\.tsx?$/.test(path) || manifests.has(path);
|
const types = (path: string) => /\.tsx?$/.test(path) || manifests.has(path);
|
||||||
|
|||||||
+2
-2
@@ -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 manifests = new Set(["package.json", "bun.lock", "tsconfig.json"]);
|
||||||
const behavior = (path: string) => /^(extensions|src|tests|examples|skills)\//.test(path) || manifests.has(path);
|
const behavior = (path: string) => /^(extensions|src|tests|examples|skills)\//.test(path) || manifests.has(path);
|
||||||
const types = (path: string) => /\.tsx?$/.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: "tests", command: "bun run test", cwd: "project-root", affects: behavior },
|
||||||
{ id: "typecheck", command: "bun run typecheck", cwd: "project-root", affects: types },
|
{ id: "typecheck", command: "bun run typecheck", cwd: "project-root", affects: types },
|
||||||
] } satisfies VerificationPolicy;
|
] } satisfies VerificationPolicy;
|
||||||
|
|||||||
+1
-1
@@ -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"]);
|
const ruleIds = new Set(["typescript-no-dynamic-import-ts", "typescript-no-dynamic-import-tsx"]);
|
||||||
export default {
|
export default {
|
||||||
kind: "diagnostic", id: "typescript-no-dynamic-import", analyzerKeys: ["ast-grep:personal"],
|
kind: "diagnostic", id: "typescript-no-dynamic-import", analyzerKeys: ["ast-grep:personal"],
|
||||||
|
|||||||
+1
-1
@@ -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"]);
|
const ruleIds = new Set(["typescript-no-non-null-assertion-ts", "typescript-no-non-null-assertion-tsx"]);
|
||||||
export default {
|
export default {
|
||||||
kind: "diagnostic", id: "typescript-no-non-null-assertion", analyzerKeys: ["ast-grep:personal"],
|
kind: "diagnostic", id: "typescript-no-non-null-assertion", analyzerKeys: ["ast-grep:personal"],
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
"module": "NodeNext",
|
"module": "NodeNext",
|
||||||
"moduleResolution": "NodeNext",
|
"moduleResolution": "NodeNext",
|
||||||
"allowImportingTsExtensions": true,
|
"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"]
|
"include": ["policies/*.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 manifests = new Set(["package.json", "bun.lock", "tsconfig.json"]);
|
||||||
const behavior = (path: string) => /^(extensions|scripts|services|skills|config)\//.test(path) || manifests.has(path);
|
const behavior = (path: string) => /^(extensions|scripts|services|skills|config)\//.test(path) || manifests.has(path);
|
||||||
const types = (path: string) => /\.tsx?$/.test(path) || manifests.has(path);
|
const types = (path: string) => /\.tsx?$/.test(path) || manifests.has(path);
|
||||||
|
|||||||
@@ -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 manifests = new Set(["package.json", "bun.lock", "tsconfig.json"]);
|
||||||
const behavior = (path: string) => /^(extensions|src|tests|examples|skills)\//.test(path) || manifests.has(path);
|
const behavior = (path: string) => /^(extensions|src|tests|examples|skills)\//.test(path) || manifests.has(path);
|
||||||
const types = (path: string) => /\.tsx?$/.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: "tests", command: "bun run test", cwd: "project-root", affects: behavior },
|
||||||
{ id: "typecheck", command: "bun run typecheck", cwd: "project-root", affects: types },
|
{ id: "typecheck", command: "bun run typecheck", cwd: "project-root", affects: types },
|
||||||
] } satisfies VerificationPolicy;
|
] } satisfies VerificationPolicy;
|
||||||
|
|||||||
@@ -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"]);
|
const ruleIds = new Set(["typescript-no-dynamic-import-ts", "typescript-no-dynamic-import-tsx"]);
|
||||||
export default {
|
export default {
|
||||||
kind: "diagnostic", id: "typescript-no-dynamic-import", analyzerKeys: ["ast-grep:personal"],
|
kind: "diagnostic", id: "typescript-no-dynamic-import", analyzerKeys: ["ast-grep:personal"],
|
||||||
|
|||||||
@@ -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"]);
|
const ruleIds = new Set(["typescript-no-non-null-assertion-ts", "typescript-no-non-null-assertion-tsx"]);
|
||||||
export default {
|
export default {
|
||||||
kind: "diagnostic", id: "typescript-no-non-null-assertion", analyzerKeys: ["ast-grep:personal"],
|
kind: "diagnostic", id: "typescript-no-non-null-assertion", analyzerKeys: ["ast-grep:personal"],
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@_jb/pi-native-hooks",
|
"name": "@jbcode/pi-native-hooks",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"description": "Native Pi hooks runtime for shared diagnostics and verification gates.",
|
"description": "Native Pi hooks runtime for shared diagnostics and verification gates.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Policy contracts
|
# 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.
|
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:
|
Use:
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
import type { DiagnosticPolicy } from "@_jb/pi-native-hooks/policy";
|
import type { DiagnosticPolicy } from "@jbcode/pi-native-hooks/policy";
|
||||||
export default { /* ... */ } satisfies DiagnosticPolicy;
|
export default { /* ... */ } satisfies DiagnosticPolicy;
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
Vendored
+1
-1
@@ -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 manifests = new Set(["package.json", "bun.lock", "tsconfig.json"]);
|
||||||
const behavior = (path: string) => /^(extensions|scripts|services|skills|config)\//.test(path) || manifests.has(path);
|
const behavior = (path: string) => /^(extensions|scripts|services|skills|config)\//.test(path) || manifests.has(path);
|
||||||
const types = (path: string) => /\.tsx?$/.test(path) || manifests.has(path);
|
const types = (path: string) => /\.tsx?$/.test(path) || manifests.has(path);
|
||||||
|
|||||||
Vendored
+2
-2
@@ -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 manifests = new Set(["package.json", "bun.lock", "tsconfig.json"]);
|
||||||
const behavior = (path: string) => /^(extensions|src|tests|examples|skills)\//.test(path) || manifests.has(path);
|
const behavior = (path: string) => /^(extensions|src|tests|examples|skills)\//.test(path) || manifests.has(path);
|
||||||
const types = (path: string) => /\.tsx?$/.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: "tests", command: "bun run test", cwd: "project-root", affects: behavior },
|
||||||
{ id: "typecheck", command: "bun run typecheck", cwd: "project-root", affects: types },
|
{ id: "typecheck", command: "bun run typecheck", cwd: "project-root", affects: types },
|
||||||
] } satisfies VerificationPolicy;
|
] } satisfies VerificationPolicy;
|
||||||
|
|||||||
Vendored
+1
-1
@@ -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"]);
|
const ruleIds = new Set(["typescript-no-dynamic-import-ts", "typescript-no-dynamic-import-tsx"]);
|
||||||
export default {
|
export default {
|
||||||
kind: "diagnostic", id: "typescript-no-dynamic-import", analyzerKeys: ["ast-grep:personal"],
|
kind: "diagnostic", id: "typescript-no-dynamic-import", analyzerKeys: ["ast-grep:personal"],
|
||||||
|
|||||||
Vendored
+1
-1
@@ -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"]);
|
const ruleIds = new Set(["typescript-no-non-null-assertion-ts", "typescript-no-non-null-assertion-tsx"]);
|
||||||
export default {
|
export default {
|
||||||
kind: "diagnostic", id: "typescript-no-non-null-assertion", analyzerKeys: ["ast-grep:personal"],
|
kind: "diagnostic", id: "typescript-no-non-null-assertion", analyzerKeys: ["ast-grep:personal"],
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
"module": "NodeNext",
|
"module": "NodeNext",
|
||||||
"moduleResolution": "NodeNext",
|
"moduleResolution": "NodeNext",
|
||||||
"allowImportingTsExtensions": true,
|
"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"]
|
"include": ["policies/*.ts"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@_jb/pi-prompt-snippets",
|
"name": "@jbcode/pi-prompt-snippets",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"description": "Pi extension for toggling reusable per-message prompt snippets.",
|
"description": "Pi extension for toggling reusable per-message prompt snippets.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@_jb/pi-shared",
|
"name": "@jbcode/pi-shared",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"description": "Shared runtime utilities for @_jb Pi extensions.",
|
"description": "Shared runtime utilities for @jbcode Pi extensions.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": { "node": ">=22.19.0" },
|
"engines": { "node": ">=22.19.0" },
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
# @_jb/pi-subagents
|
# @jbcode/pi-subagents
|
||||||
|
|
||||||
Pi extension for background subagents using Pi, Claude Code, and Codex backends.
|
Pi extension for background subagents using Pi, Claude Code, and Codex backends.
|
||||||
|
|
||||||
```bash
|
```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.
|
Do not enable it alongside another extension that registers the same subagent tools.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@_jb/pi-subagents",
|
"name": "@jbcode/pi-subagents",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"description": "Pi extension for background subagents across Pi, Claude Code, and Codex backends.",
|
"description": "Pi extension for background subagents across Pi, Claude Code, and Codex backends.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"files": ["index.ts", "src", "docs", "README.md", "LICENSE", "!**/*.test.ts"],
|
"files": ["index.ts", "src", "docs", "README.md", "LICENSE", "!**/*.test.ts"],
|
||||||
"pi": { "extensions": ["./index.ts"] },
|
"pi": { "extensions": ["./index.ts"] },
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@_jb/pi-shared": "workspace:^",
|
"@jbcode/pi-shared": "workspace:^",
|
||||||
"@anthropic-ai/claude-agent-sdk": "catalog:",
|
"@anthropic-ai/claude-agent-sdk": "catalog:",
|
||||||
"effect": "catalog:"
|
"effect": "catalog:"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ import {
|
|||||||
createChildResources,
|
createChildResources,
|
||||||
shutdownAndDisposeChildSession,
|
shutdownAndDisposeChildSession,
|
||||||
waitForChildOperation,
|
waitForChildOperation,
|
||||||
} from "@_jb/pi-shared/child-session";
|
} from "@jbcode/pi-shared/child-session";
|
||||||
import { createToolCallTimeoutGuard } from "@_jb/pi-shared/tool-call-timeout";
|
import { createToolCallTimeoutGuard } from "@jbcode/pi-shared/tool-call-timeout";
|
||||||
|
|
||||||
// --- Model + effort resolution -----------------------------------------------
|
// --- Model + effort resolution -----------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ Hierarchical, session-local task tracking for [Pi](https://pi.dev), with atomic
|
|||||||
Install the latest version from npm:
|
Install the latest version from npm:
|
||||||
|
|
||||||
```bash
|
```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.
|
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:
|
To try the package for one run without installing it:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pi -e npm:@_jb/pi-todo-herdr
|
pi -e npm:@jbcode/pi-todo-herdr
|
||||||
```
|
```
|
||||||
|
|
||||||
Update or remove it with Pi's package commands:
|
Update or remove it with Pi's package commands:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pi update npm:@_jb/pi-todo-herdr
|
pi update npm:@jbcode/pi-todo-herdr
|
||||||
pi remove npm:@_jb/pi-todo-herdr
|
pi remove npm:@jbcode/pi-todo-herdr
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
@@ -138,8 +138,8 @@ Development uses the monorepo's pinned Bun toolchain and shared catalog.
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
bun install --frozen-lockfile
|
bun install --frozen-lockfile
|
||||||
bun run --filter '@_jb/pi-todo-herdr' typecheck
|
bun run --filter '@jbcode/pi-todo-herdr' typecheck
|
||||||
bun run --filter '@_jb/pi-todo-herdr' test
|
bun run --filter '@jbcode/pi-todo-herdr' test
|
||||||
(cd extensions/todo-herdr && bun pm pack --destination ../../dist)
|
(cd extensions/todo-herdr && bun pm pack --destination ../../dist)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@_jb/pi-todo-herdr",
|
"name": "@jbcode/pi-todo-herdr",
|
||||||
"version": "0.2.5",
|
"version": "0.2.5",
|
||||||
"description": "Hierarchical task tools for Pi with a live widget and Herdr sidebar integration.",
|
"description": "Hierarchical task tools for Pi with a live widget and Herdr sidebar integration.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# @_jb/pi-update
|
# @jbcode/pi-update
|
||||||
|
|
||||||
Pi extension providing controlled Pi and package update commands.
|
Pi extension providing controlled Pi and package update commands.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pi install npm:@_jb/pi-update
|
pi install npm:@jbcode/pi-update
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@_jb/pi-update",
|
"name": "@jbcode/pi-update",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"description": "Pi extension for controlled Pi and package updates.",
|
"description": "Pi extension for controlled Pi and package updates.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# workflow
|
# 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.
|
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.
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import { Type } from "typebox";
|
|||||||
import {
|
import {
|
||||||
createChildResources,
|
createChildResources,
|
||||||
resolveStandaloneChildProjectTrust,
|
resolveStandaloneChildProjectTrust,
|
||||||
} from "@_jb/pi-shared/child-session";
|
} from "@jbcode/pi-shared/child-session";
|
||||||
import {
|
import {
|
||||||
runAgent,
|
runAgent,
|
||||||
type AgentOutcome,
|
type AgentOutcome,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "@_jb/pi-workflow",
|
"name": "@jbcode/pi-workflow",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Private workspace for the deferred Pi workflow extension migration.",
|
"description": "Private workspace for the deferred Pi workflow extension migration.",
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"keywords": ["pi-package", "pi-extension", "workflow"],
|
"keywords": ["pi-package", "pi-extension", "workflow"],
|
||||||
"pi": { "extensions": ["./index.ts"] },
|
"pi": { "extensions": ["./index.ts"] },
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@_jb/pi-shared": "workspace:^"
|
"@jbcode/pi-shared": "workspace:^"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@earendil-works/pi-ai": "catalog:pi-peer",
|
"@earendil-works/pi-ai": "catalog:pi-peer",
|
||||||
|
|||||||
+1
-1
@@ -50,7 +50,7 @@
|
|||||||
"test:dictate-service": "PYTHONPATH=services/dictate/src python -m unittest discover -s services/dictate/tests -p 'test_*.py'",
|
"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:links": "node --test scripts/pi-links.test.mjs",
|
||||||
"test:packages": "node --test scripts/package-workspaces.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: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: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"
|
"test:live": "node --test --experimental-strip-types extensions/subagents/claude.test.ts extensions/subagents/codex.test.ts"
|
||||||
|
|||||||
@@ -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(entry.source, /^ssh:\/\/git@git\.jb\.codes:7722\/jb\//);
|
||||||
assert.match(
|
assert.match(
|
||||||
readJson(path.join(root, entry.target, "package.json")).name,
|
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);
|
const manifest = workspaceManifest(directory);
|
||||||
if (manifest.private) continue;
|
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.publishConfig?.registry, registry);
|
||||||
assert.equal(manifest.engines?.node, ">=22.19.0");
|
assert.equal(manifest.engines?.node, ">=22.19.0");
|
||||||
assert.equal(readFileSync(path.join(packageRoot, "LICENSE"), "utf8").length > 0, true);
|
assert.equal(readFileSync(path.join(packageRoot, "LICENSE"), "utf8").length > 0, true);
|
||||||
|
|||||||
Reference in New Issue
Block a user