@holmes-lab/holmes-kit 0.1.11 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +26 -49
- package/dist/.build-id +1 -1
- package/docs/install-guide.md +131 -0
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,22 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
<!-- @implements A-SPEC-209 -->
|
|
8
|
+
## [0.1.12] - 2026-08-23
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Install Guide (`docs/install-guide.md`, shipped in the package)**: install paths organised by
|
|
12
|
+
account type and privileges — a decision table first, commands second — because the same wrong
|
|
13
|
+
command (`npm install -g` against a protected prefix) was run three times by a real adopter
|
|
14
|
+
before the right one. Troubleshooting is keyed to the exact error text npm prints (`EPERM mkdir`,
|
|
15
|
+
`notarget`, `better-sqlite3` build failures, `spawn sh ENOENT`), and each entry says why
|
|
16
|
+
elevation is the wrong fix.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- **README Quickstart leads with the situation table**, and steps 2–3 use `npx holmes-kit …` —
|
|
20
|
+
the bare `holmes-kit` they previously showed only exists on PATH after a global install, which
|
|
21
|
+
is not the primary path.
|
|
22
|
+
|
|
7
23
|
<!-- @implements A-SPEC-209 -->
|
|
8
24
|
## [0.1.11] - 2026-08-23
|
|
9
25
|
|
package/README.md
CHANGED
|
@@ -51,58 +51,35 @@ Holmes-Kit prioritizes **CLI-based AI Coding Agents** where OS-level process hoo
|
|
|
51
51
|
|
|
52
52
|
## ⚡ Quickstart (3-Minute Setup)
|
|
53
53
|
|
|
54
|
-
### 1. Install
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
```powershell
|
|
79
|
-
npm config set prefix "$env:APPDATA\npm" # Windows
|
|
80
|
-
# then ensure %APPDATA%\npm is on PATH
|
|
81
|
-
```
|
|
82
|
-
```bash
|
|
83
|
-
npm config set prefix "$HOME/.npm-global" # macOS / Linux
|
|
84
|
-
export PATH="$HOME/.npm-global/bin:$PATH"
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
A Node version manager (`nvm`, `fnm`, `volta`) does the same thing by keeping the whole
|
|
88
|
-
toolchain under your home directory.
|
|
89
|
-
</details>
|
|
90
|
-
|
|
91
|
-
**Prerequisites** — Node.js `>= 20.0.0`, plus a native binary for two kinds of dependency:
|
|
92
|
-
|
|
93
|
-
| Dependency | How the binary arrives |
|
|
94
|
-
|---|---|
|
|
95
|
-
| 8 tree-sitter grammars | Prebuilt binaries ship inside the packages (`darwin-arm64`, `darwin-x64`, `linux-x64`, `win32-x64`) — nothing is compiled |
|
|
96
|
-
| `better-sqlite3` | Downloaded at install time by `prebuild-install`, **falling back to compiling** if no prebuild matches your platform and Node ABI |
|
|
97
|
-
|
|
98
|
-
Only the second can require a toolchain. If it has to compile, you need a C++ build environment:
|
|
99
|
-
Xcode Command Line Tools on macOS, Visual Studio Build Tools on Windows, or
|
|
100
|
-
`apk add --no-cache python3 make g++` on Alpine.
|
|
54
|
+
### 1. Install — find your row first
|
|
55
|
+
|
|
56
|
+
The same wrong command was run three times by a real adopter before the right one; a table beats
|
|
57
|
+
prose read top-to-bottom.
|
|
58
|
+
|
|
59
|
+
| Which situation are you in? | Privileges | Command |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| **Using it in one project** (most people) | none | `npm install --save-dev @holmes-lab/holmes-kit` |
|
|
62
|
+
| Company-managed PC / restricted account | none | same — no system directory is touched |
|
|
63
|
+
| CI / container | none | same, plus `--prefer-online` right after a release |
|
|
64
|
+
| CLI across many projects (`-g`) | depends | run `npm config get prefix` first — see below |
|
|
65
|
+
|
|
66
|
+
**Before `npm install -g`**: if `npm config get prefix` names a protected directory
|
|
67
|
+
(`C:\Program Files\nodejs`, `/usr/local`), `-g` dies with `EPERM` **before any package file
|
|
68
|
+
arrives** — no package version can fix that, and elevation is the wrong fix (it runs native
|
|
69
|
+
install scripts with system privileges, and it did not even work in the reported case). Move the
|
|
70
|
+
prefix to user space instead — one-time setup, exact commands in the
|
|
71
|
+
**[Install Guide](docs/install-guide.md)**, along with troubleshooting keyed to the exact error
|
|
72
|
+
text (`EPERM mkdir`, `notarget`, `better-sqlite3` build failures).
|
|
73
|
+
|
|
74
|
+
**Prerequisites** — Node.js `>= 20.0.0`. The 8 tree-sitter grammars ship prebuilt binaries for
|
|
75
|
+
macOS/Linux/Windows and compile nothing; `better-sqlite3` downloads a prebuild at install time,
|
|
76
|
+
falling back to compiling — only that fallback needs a C++ toolchain (VS Build Tools / Xcode CLT /
|
|
77
|
+
`apk add python3 make g++`).
|
|
101
78
|
|
|
102
79
|
### 2. Initialize in Your Project
|
|
103
80
|
```bash
|
|
104
81
|
cd /path/to/your/project
|
|
105
|
-
holmes-kit init
|
|
82
|
+
npx holmes-kit init # drop the npx prefix if you installed with -g
|
|
106
83
|
```
|
|
107
84
|
*An interactive prompt will ask which AI agent harnesses to wire into your project:*
|
|
108
85
|
```text
|
|
@@ -114,7 +91,7 @@ holmes-kit init
|
|
|
114
91
|
|
|
115
92
|
### 3. Verify Health
|
|
116
93
|
```bash
|
|
117
|
-
holmes-kit doctor
|
|
94
|
+
npx holmes-kit doctor
|
|
118
95
|
```
|
|
119
96
|
*If everything is green, your project is governed and ready for AI pair-programming!*
|
|
120
97
|
|
package/dist/.build-id
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
b820c0b-mt57zbc7
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Install Guide — by account type and permissions
|
|
2
|
+
|
|
3
|
+
This guide exists because of a measured failure, not a hypothetical one: an adopter on Windows ran
|
|
4
|
+
`npm install -g` three times — once from an elevated PowerShell — and hit the same `EPERM` every
|
|
5
|
+
time, because their npm global prefix pointed inside `C:\Program Files\nodejs`. The local install
|
|
6
|
+
worked on the first try. Find your row, run its one command.
|
|
7
|
+
|
|
8
|
+
## Which situation are you in?
|
|
9
|
+
|
|
10
|
+
| Situation | Privileges needed | Command |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| **Using it in one project** (most people) | none | `npm install --save-dev @holmes-lab/holmes-kit` then `npx holmes-kit init` |
|
|
13
|
+
| Company-managed PC / restricted account | none | same as above — no system directory is touched |
|
|
14
|
+
| CI / container | none | same as above, plus `--prefer-online` right after a release |
|
|
15
|
+
| Want the CLI across many projects (`-g`) | depends on your prefix | **check first**: `npm config get prefix` ↓ |
|
|
16
|
+
|
|
17
|
+
The local install is the path verified end to end, on macOS and Windows, against the public
|
|
18
|
+
registry. The wiring `init` writes uses absolute paths, so nothing needs to be on `PATH`.
|
|
19
|
+
|
|
20
|
+
## Before `npm install -g`: check your prefix
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
npm config get prefix
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
| Result looks like | Verdict |
|
|
27
|
+
|---|---|
|
|
28
|
+
| `%APPDATA%\npm`, `~/.npm-global`, `/opt/homebrew`, an nvm/fnm/volta directory | user-writable — `npm install -g @holmes-lab/holmes-kit` works as-is |
|
|
29
|
+
| `C:\Program Files\nodejs`, `/usr/local` | protected — `-g` dies with `EPERM` **before any package file arrives**. Move the prefix (below). **Do not elevate.** |
|
|
30
|
+
|
|
31
|
+
`npx holmes-kit doctor` (after a local install) runs this exact check for you — the
|
|
32
|
+
`global prefix` line names the directory and the remedy.
|
|
33
|
+
|
|
34
|
+
### Moving the prefix to user space — one-time setup
|
|
35
|
+
|
|
36
|
+
Windows (PowerShell):
|
|
37
|
+
|
|
38
|
+
```powershell
|
|
39
|
+
npm config set prefix "$env:APPDATA\npm"
|
|
40
|
+
[Environment]::SetEnvironmentVariable('Path', "$([Environment]::GetEnvironmentVariable('Path','User'));$env:APPDATA\npm", 'User')
|
|
41
|
+
# open a NEW terminal, then:
|
|
42
|
+
npm install -g @holmes-lab/holmes-kit
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
macOS / Linux:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npm config set prefix "$HOME/.npm-global"
|
|
49
|
+
export PATH="$HOME/.npm-global/bin:$PATH" # add to your shell profile too
|
|
50
|
+
npm install -g @holmes-lab/holmes-kit
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
A Node version manager (`nvm`, `fnm`, `volta`) achieves the same by keeping the whole toolchain
|
|
54
|
+
under your home directory.
|
|
55
|
+
|
|
56
|
+
### Why elevation is the wrong fix
|
|
57
|
+
|
|
58
|
+
npm's own error text ends with *"try running the command again as root/Administrator."* Do not
|
|
59
|
+
follow it here, for two reasons:
|
|
60
|
+
|
|
61
|
+
1. **It may not even work.** The reported failure recurred from an elevated PowerShell — antivirus
|
|
62
|
+
and Windows Controlled Folder Access block protected-folder writes regardless of elevation.
|
|
63
|
+
2. **When it works, it is worse.** `better-sqlite3` declares
|
|
64
|
+
`install: prebuild-install || node-gyp rebuild` — under an elevated `-g`, that downloads and
|
|
65
|
+
executes, or invokes a compiler, **with system privileges**. Keeping installs in user space is
|
|
66
|
+
what contains a compromised dependency.
|
|
67
|
+
|
|
68
|
+
## Troubleshooting, by the error you actually see
|
|
69
|
+
|
|
70
|
+
### `EPERM … mkdir C:\Program Files\nodejs\node_modules\@holmes-lab`
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
npm error code EPERM
|
|
74
|
+
npm error syscall mkdir
|
|
75
|
+
npm error path C:\Program Files\nodejs\node_modules\@holmes-lab
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Your global prefix is a protected directory. The failure happens while npm creates the scope
|
|
79
|
+
folder — **before a single package file is transferred** — so no package version can fix it, and
|
|
80
|
+
neither can this one. Either drop `-g` (the local install needs none of this) or move the prefix
|
|
81
|
+
(one-time setup above).
|
|
82
|
+
|
|
83
|
+
### `notarget No matching version found`
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
npm error code ETARGET
|
|
87
|
+
npm error notarget No matching version found for @holmes-lab/holmes-kit@<version>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Your npm metadata cache predates the release — measured minutes after publishing 0.1.11, the
|
|
91
|
+
registry already listed the version while a default-cache install still refused it. Add
|
|
92
|
+
`--prefer-online`, or retry in a few minutes.
|
|
93
|
+
|
|
94
|
+
### `better-sqlite3` fails to build
|
|
95
|
+
|
|
96
|
+
The one dependency that may need a toolchain. The 8 tree-sitter grammars ship prebuilt binaries
|
|
97
|
+
(`darwin-arm64`, `darwin-x64`, `linux-x64`, `win32-x64`) and compile nothing; `better-sqlite3`
|
|
98
|
+
downloads a prebuild at install time and **falls back to compiling** when none matches your
|
|
99
|
+
platform and Node ABI. If it compiles, you need:
|
|
100
|
+
|
|
101
|
+
| Platform | Toolchain |
|
|
102
|
+
|---|---|
|
|
103
|
+
| Windows | Visual Studio Build Tools (C++ workload) |
|
|
104
|
+
| macOS | Xcode Command Line Tools (`xcode-select --install`) |
|
|
105
|
+
| Alpine | `apk add --no-cache python3 make g++` |
|
|
106
|
+
|
|
107
|
+
### `spawn sh ENOENT` during a git-URL install
|
|
108
|
+
|
|
109
|
+
`npm i -g git+ssh://…` is not a supported path: npm 11 clones the repository into its cache and
|
|
110
|
+
runs `prepare` there without installing dependencies, so the build tooling is missing. Install
|
|
111
|
+
from the registry or from a packed tarball.
|
|
112
|
+
|
|
113
|
+
## Verify — the last step of every path
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
npx holmes-kit doctor # local install
|
|
117
|
+
holmes-kit doctor # global install
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Expect `10 pass, 1 warn, 0 fail` on a healthy install. The lines that matter most:
|
|
121
|
+
|
|
122
|
+
- `global prefix` — whether `-g` would work on this machine, and the remedy if not
|
|
123
|
+
- `tree-sitter grammars` / `better-sqlite3` — whether the native modules actually load
|
|
124
|
+
|
|
125
|
+
## What we deliberately do NOT do
|
|
126
|
+
|
|
127
|
+
| Idea | Why not |
|
|
128
|
+
|---|---|
|
|
129
|
+
| A `postinstall` script that prints guidance | Triggers npm 11's `allow-scripts` warning and forfeits this package's current property of running no install scripts at all |
|
|
130
|
+
| Recommending `npx @holmes-lab/holmes-kit init` with no install | `init` writes wiring with absolute paths; under bare `npx` those point into the npx cache and break when it is pruned |
|
|
131
|
+
| Fixing your npm prefix from inside the package | A package rewriting your npm configuration is exactly the supply-chain behaviour this guide warns about |
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"//": "@implements A-SPEC-209",
|
|
3
3
|
"name": "@holmes-lab/holmes-kit",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.12",
|
|
5
5
|
"description": "Holmes-Kit — deterministic Agentic Software Engineering (ASE) harness with causal traceability (spec chain + D-CPG + RTM + phase guardrail)",
|
|
6
6
|
"main": "dist/holmes/mcp/server.js",
|
|
7
7
|
"types": "dist/holmes/mcp/server.d.ts",
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"bin/",
|
|
14
14
|
"dist/",
|
|
15
15
|
"playbooks/",
|
|
16
|
+
"docs/install-guide.md",
|
|
16
17
|
"CHANGELOG.md"
|
|
17
18
|
],
|
|
18
19
|
"engines": {
|