@ijfw/install 1.1.0 → 1.1.2
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 +66 -0
- package/dist/ijfw.js +1324 -8
- package/dist/install.js +9 -2
- package/dist/uninstall.js +99 -10
- package/docs/GUIDE.md +556 -0
- package/docs/guide/assets/README.md +11 -0
- package/docs/guide/assets/dashboard.png +0 -0
- package/docs/guide/assets/memory-recall.svg +31 -0
- package/docs/guide/assets/session-receipt.svg +30 -0
- package/docs/guide/assets/trident-demo.svg +36 -0
- package/package.json +6 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,71 @@
|
|
|
1
1
|
# Changelog -- @ijfw/install
|
|
2
2
|
|
|
3
|
+
## [1.1.2] -- 2026-04-21
|
|
4
|
+
|
|
5
|
+
Reach + bug fixes. Two new platforms (Hermes + Wayland), deep installer repairs uncovered by live-platform testing, cross-platform sync of new behavioral rules. Ships with a full end-to-end smoke harness at `scripts/e2e-smoke.sh` that now has to pass before any future release.
|
|
6
|
+
|
|
7
|
+
### New platforms
|
|
8
|
+
|
|
9
|
+
- **Hermes** (`hermes/`): MCP registration in `~/.hermes/config.yaml`, `HERMES.md` context file, 19 IJFW skills dropped into `~/.hermes/skills/ijfw-*` in agentskills.io format. Python CLI (`hermes` command).
|
|
10
|
+
- **Wayland** (`wayland/`): same shape. MCP registration in `~/.wayland/config.yaml`, `WAYLAND.md` context file, skills bundle in `~/.wayland/skills/ijfw-*`. Python CLI (`wayland` command).
|
|
11
|
+
- `scripts/install.sh` gains a `merge_yaml_mcp` helper (prefers python3+PyYAML for parser-safe merge; sentinel-anchored fallback if PyYAML isn't available).
|
|
12
|
+
- Default target list expands to 8: `claude codex gemini cursor windsurf copilot hermes wayland`. `is_live` and `pretty_name` updated to match.
|
|
13
|
+
|
|
14
|
+
### Installer repairs (high -- announcement blockers)
|
|
15
|
+
|
|
16
|
+
- **Bug A: platform-config writes now respect `IJFW_CUSTOM_DIR`.** The 1.1.2 prep pass only guarded sibling links and bin wiring. The `~/.claude/settings.json`, `~/.codex/`, `~/.gemini/`, `~/.codeium/windsurf/` merges were still running during scratch installs and clobbering real user configs with scratch paths. Every platform case block now short-circuits early when `IJFW_CUSTOM_DIR=1`, prints a single "real platform config left untouched" line, and still classifies the platform as live/standby for the summary banner.
|
|
17
|
+
- **Bug B: Codex `hooks.json` schema migrated to the current nested format.** Codex CLI 0.120+ rejects both the legacy `{"hooks":[...]}` object-wrapper and the bare-array shape this release started with. Authoritative schema (per `codex-rs/hooks/src/engine/config.rs`): `{"hooks": {EventName: [MatcherGroup]}}` where each MatcherGroup is `{matcher?, hooks: [{type: "command", command, timeout?, ...}]}`. Installer writer now emits this shape, absorbs either legacy shape on read, drops the non-existent `AfterAgent` event, renames `script` to `command`, and adds the `"type": "command"` discriminator.
|
|
18
|
+
- **Bug C: `suppress_unstable_features_warning = true` is now written to `~/.codex/config.toml`.** Stops the "under-development features enabled: codex_hooks" banner on every Codex startup.
|
|
19
|
+
- **Self-loop guards now canonicalize `$HOME`.** On macOS `/var/folders` is a symlink to `/private/var/folders`; the `cd -P` used for `REPO_ROOT` resolved that, but `$HOME` did not, so the `PLUGIN_SRC == PLUGIN_DST` and `MCP_SRC == MCP_DST` comparisons missed the equal case and created recursive self-symlinks ("too many levels of symbolic links" on next access). Installer now computes `HOME_REAL="$(cd -P "$HOME" && pwd)"` once and uses it for all self-loop comparisons.
|
|
20
|
+
- **`C_RED` variable declared.** Previously only initialized on interactive TTYs; a failing post-install gate in a non-TTY context (CI, harness, `npx` capture) would crash the installer with `C_RED: unbound variable` under `set -u`. Declared in both branches of the color-init block.
|
|
21
|
+
|
|
22
|
+
### Behavioral additions (synced across Claude / Codex / Gemini / Cursor / Windsurf / Copilot / Hermes / Wayland / universal where relevant)
|
|
23
|
+
|
|
24
|
+
- `ijfw-core` and platform rules-files: explicit banned openers ("Great question", "You're absolutely right", "Excellent idea", "I'd be happy to") and a sharpened two-strikes session-reset rule that asks the user to start a fresh session with a tighter prompt rather than burning context on a third failed attempt.
|
|
25
|
+
- `ijfw-debug`: new Step 6 templating the two-strikes reset with a memory-store call so lessons inherit forward without context noise.
|
|
26
|
+
- `ijfw-verify`: opens with "Plausibility is not correctness." Every claim must trace to a command output, test pass, or manual verification.
|
|
27
|
+
- `ijfw-workflow` Quick FRAME: five concrete goal-rewrite examples ("Add validation" -> "Write tests for invalid inputs..."). Vague asks must surface the gap rather than silently proceed.
|
|
28
|
+
- `ijfw-memory-audit`: pruning question added ("Would removing this rule cause the agent to make a mistake?") so memory stays sharp instead of bloated.
|
|
29
|
+
- `ijfw-critique`: refactor reframe ("Knowing everything I know now, what would the elegant solution look like?") for breaking frame on non-trivial decisions.
|
|
30
|
+
|
|
31
|
+
### End-to-end smoke harness
|
|
32
|
+
|
|
33
|
+
- New `scripts/e2e-smoke.sh`. Two modes, both must pass:
|
|
34
|
+
1. **Scratch-guard check** -- runs installer with `IJFW_CUSTOM_DIR=1` pointed at a throwaway dir, verifies zero drift across 10 real-home config paths (hashes before and after). Catches any future Bug A regression.
|
|
35
|
+
2. **Canonical isolated-HOME install** -- runs installer with `HOME=$(mktemp -d)`, parses every platform's written config against its expected schema (Codex nested hooks, Gemini JSON, YAML for Hermes/Wayland, etc.), completes the MCP `initialize + tools/list` handshake, and fails loudly on any mismatch.
|
|
36
|
+
- 13 gates total. Harness must be green before any future `npm publish`.
|
|
37
|
+
|
|
38
|
+
### Uninstaller
|
|
39
|
+
|
|
40
|
+
- `installer/src/uninstall.js:removeCodexHooks` now handles all three hook-file shapes we have ever shipped (bare array, legacy `{hooks:[...]}` object-wrapper, current nested-map). Uninstall works regardless of which version the user last installed.
|
|
41
|
+
- New `removeYamlMcpEntry` helper (python3+PyYAML preferred, regex fallback). Cleans `~/.hermes/config.yaml` and `~/.wayland/config.yaml`, removes skill dirs and context files for both new platforms.
|
|
42
|
+
- `cleanPlatforms()` comment updated: "all 8 platforms".
|
|
43
|
+
|
|
44
|
+
### Installer scope-leak fixes (carried from 1.1.2 prep)
|
|
45
|
+
|
|
46
|
+
- `scripts/install.sh` now respects `IJFW_CUSTOM_DIR` from `install.js`. Custom-dir installs (`--dir <scratch>`) skip user-home mutations: no sibling links into `~/.ijfw/`, no bin symlinks into `~/.local/bin/`, no `.mcp.json` patching of the real plugin, no `~/.claude/plugins/cache/ijfw` invalidation. Default canonical install behavior unchanged.
|
|
47
|
+
- Self-loop guard: when `PLUGIN_SRC == PLUGIN_DST` (install dir is the canonical home and source happens to live there), the symlink step is skipped instead of creating a recursive `~/.ijfw/claude -> ~/.ijfw/claude` loop.
|
|
48
|
+
- `installer/src/uninstall.js`: `uninstall --dir <scratch>` now leaves `~/.codex/`, `~/.gemini/`, `~/.codeium/windsurf/` configs and skill dirs alone. Only canonical uninstalls (`~/.ijfw`) clean platform configs.
|
|
49
|
+
|
|
50
|
+
### Dynamic version strings
|
|
51
|
+
|
|
52
|
+
- `mcp-server/src/server.js` and `mcp-server/src/dashboard-server.js` now read version from `mcp-server/package.json` at module load instead of hardcoding. MCP `serverInfo` and `/api/health` always match the shipped version.
|
|
53
|
+
|
|
54
|
+
### Internal
|
|
55
|
+
|
|
56
|
+
- `mcp-server/package.json` bumped from 1.1.0 to 1.1.2 (was lagging two minor cycles).
|
|
57
|
+
- `.gitattributes`: added LF normalization rules (carried from 1.1.1).
|
|
58
|
+
- Banner on successful install now says "8 platforms" instead of "7".
|
|
59
|
+
|
|
60
|
+
## [1.1.1] -- 2026-04-19
|
|
61
|
+
|
|
62
|
+
Docs and discoverability.
|
|
63
|
+
|
|
64
|
+
- New `ijfw help` command. Pages the full guide in your terminal (less -R fallback), or opens a rendered browser tab with `ijfw help --browser`.
|
|
65
|
+
- Ships `docs/GUIDE.md` inside the npm tarball: Part 1 quickstart with three 90-second wins, Part 2 command / skill / workflow reference, plus FAQ and troubleshooting.
|
|
66
|
+
- Browser render is pre-generated server-side via marked. No client-side script, no XSS surface. GitHub dark CSS, local assets copied to `~/.ijfw/guide/`.
|
|
67
|
+
- Claude Code slash command: `/ijfw-help`.
|
|
68
|
+
|
|
3
69
|
## [1.1.0] -- 2026-04-19
|
|
4
70
|
|
|
5
71
|
Public launch. One install, every AI coding agent, zero config.
|