@lineman-io/mcp 2.1.0 → 2.2.0
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 +76 -0
- package/README.md +7 -9
- package/dist/main.js +1 -1
- package/hooks/core/lineman-config.mjs +1 -0
- package/hooks/core/mcp-ready.mjs +1 -1
- package/hooks/core/narrative.mjs +1 -1
- package/hooks/core/tool-naming.mjs +1 -1
- package/hooks/lineman-call.mjs +1 -1
- package/hooks/post-tool-use.mjs +1 -1
- package/hooks/pre-tool-use.mjs +1 -1
- package/hooks/runpod-state-reader.mjs +1 -1
- package/package.json +2 -15
- package/skills/auth/SKILL.md +55 -0
- package/skills/lineman/SKILL.md +1 -2
- package/hooks/core/security/chain-split.mjs +0 -1
- package/hooks/core/security/decide.mjs +0 -1
- package/hooks/core/security/patterns.mjs +0 -1
- package/hooks/core/security/policies.mjs +0 -1
- package/hooks/core/security/shell-escape.mjs +0 -1
- package/hooks/ensure-deps.mjs +0 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 2.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#418](https://github.com/lineman-io/lineman-mono/pull/418) [`3b3620a`](https://github.com/lineman-io/lineman-mono/commit/3b3620a9329622533a9dcb0a551cb82f876ca7df) Thanks [@grant-unwin](https://github.com/grant-unwin)! - Add `/lineman:auth` slash command for in-session authentication.
|
|
8
|
+
|
|
9
|
+
Wraps the existing device-code flow (`apps/lineman-mcp/src/auth.ts`) as a Claude Code skill so users no longer need to drop to a shell and run `npx lineman-mcp auth` to get a token. The new `auth` MCP tool is intentionally not auth-gated — it's the way users acquire auth.
|
|
10
|
+
|
|
11
|
+
Two-phase flow driven by the model's skill loop: first call returns the verification URL + user code + device code; subsequent calls with the device code poll the token endpoint and either return `pending`, `complete` (writes token to `~/.goodex/lineman.json`), or `expired`. Subsequent `assist` / `edit_file` tool calls pick up the token automatically without restarting the MCP server.
|
|
12
|
+
|
|
13
|
+
Companion to LIN-321 (Lineman Site homepage rewrite onto the plugin install path). The CLI `npx lineman-mcp auth` entry point remains for headless / scripted setups.
|
|
14
|
+
|
|
15
|
+
## 2.1.1
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- [#324](https://github.com/lineman-io/lineman-mono/pull/324) [`6b318a8`](https://github.com/lineman-io/lineman-mono/commit/6b318a82c15f83042d1932d12c5efa546245f0e6) Thanks [@grant-unwin](https://github.com/grant-unwin)! - Plugin marketplace install path now resolves through npm rather than a github-clone of `lineman-io/lineman-mono`.
|
|
20
|
+
|
|
21
|
+
`/plugin install lineman@lineman` previously cloned the repo and ran the committed `apps/lineman-mcp/dist/main.js`. The marketplace entry now points at the published `@lineman-io/mcp` package via the npm-source schema, so Claude Code installs the plugin straight from the npm registry. The npm tarball contents are unchanged from prior releases — this release exists so the install-path flip can be exercised end-to-end against a tagged version.
|
|
22
|
+
|
|
23
|
+
The accompanying repo cleanup retires `apps/lineman-mcp/dist/` git tracking and the `lineman-plugin-bundle.yml` workflow; one distribution surface (npm) is now authoritative.
|
|
24
|
+
|
|
25
|
+
Pre-launch posture is preserved: the package remains `access: "restricted"` on npm. Public-access flip is tracked separately under the **npm public flip** project (LIN-16, etc.).
|
|
26
|
+
|
|
27
|
+
## 2.1.0
|
|
28
|
+
|
|
29
|
+
### Minor Changes
|
|
30
|
+
|
|
31
|
+
- [#295](https://github.com/lineman-io/lineman-mono/pull/295) [`b7f908f`](https://github.com/lineman-io/lineman-mono/commit/b7f908f3842f1da21f8d2f8781dded1b1d177ce4) Thanks [@grant-unwin](https://github.com/grant-unwin)! - Make the plugin survive a marketplace install with no `node_modules/`, and remove the dead channels feature scaffolding.
|
|
32
|
+
|
|
33
|
+
- **Hooks no longer crash on missing `@sentry/node`.** `hooks/sentry-hook.mjs` now loads Sentry via top-level dynamic import + try/catch, falling back to a no-op when the package isn't present. Was the static import that crashed every hook on every invocation under marketplace-install conditions.
|
|
34
|
+
- **MCP server no longer crashes on missing `@sentry/node`.** `src/sentry.ts` mirrors the same pattern with a no-op shim, so `Sentry.captureException(...)`, `Sentry.startSpan(...)`, and the other 14+ callsites in `src/server.ts` keep working without per-callsite null checks.
|
|
35
|
+
- **Plugin version is inlined at build time** via tsup's `define` instead of a runtime `package.json` read.
|
|
36
|
+
- **Channels feature removed.** The `claude/channel` capability declaration, the pending-prompt poller, the one-time channel tip, and the `checkChannelsCapability` doctor check have all been removed. The writer side of the pipeline was never built and the compression was a stub. Design intent + revisit conditions captured in `docs/claude/roadmap.md` under FA-P18 for when channels gets re-engaged.
|
|
37
|
+
|
|
38
|
+
Marketplace install requires `zod` to be available at runtime — solved by distributing this version via npm (which installs it as a normal dependency). Distribution from a github source remains broken pre-flip-to-public; FA-P19 in the roadmap captures the public-flip checklist.
|
|
39
|
+
|
|
40
|
+
### Patch Changes
|
|
41
|
+
|
|
42
|
+
- [#298](https://github.com/lineman-io/lineman-mono/pull/298) [`8d2381b`](https://github.com/lineman-io/lineman-mono/commit/8d2381b85bf129f8a88d3c6aa3143695ebfc2a7b) Thanks [@grant-unwin](https://github.com/grant-unwin)! - Fix runtime crash on `tools/list` after marketplace install: the MCP server bundled `@modelcontextprotocol/sdk` (with its transitive `zod` inlined) while our source's `zod` import resolved externally to `node_modules/zod`. Two distinct zod realms — schemas built with one couldn't pass MCP SDK's `instanceof ZodObject` checks, surfaced as `Cannot read properties of undefined (reading 'typeName')` from the `tools/list` handler.
|
|
43
|
+
|
|
44
|
+
Revert tsup's `noExternal` to workspace deps only (`@goodex/agent-core`, `@goodex/shared`); every npm dep stays external. Marketplace install brings deps via `npm install` once the package is distributed via npm (FA-P19). Verified locally: spawn `node start.mjs` against staging, `tools/list` returns `assist` + `edit_file` cleanly.
|
|
45
|
+
|
|
46
|
+
## [Unreleased]
|
|
47
|
+
|
|
48
|
+
### Removed
|
|
49
|
+
|
|
50
|
+
- Channels feature scaffolding (`claude/channel` capability advertisement, `lineman-pending-prompt.json` poller in `src/main.ts`, `lineman-no-channels` first-call tip in `src/server.ts`, `checkChannelsCapability()` from `src/handlers/doctor.ts` and its tests). The writer side of the pipeline was never built and the compression was a stub, so the feature was inert. Design intent preserved in `docs/claude/roadmap.md` under FA-P18 for a future revisit.
|
|
51
|
+
|
|
52
|
+
### Changed
|
|
53
|
+
|
|
54
|
+
- `src/sentry.ts` and `hooks/sentry-hook.mjs` now load `@sentry/node` via dynamic import + try/catch and fall back to a no-op shim when the package is absent. Lets the plugin survive a marketplace install with no `node_modules/` (Sentry observability degrades silently instead of crashing every hook + the MCP server boot).
|
|
55
|
+
- Plugin version is now inlined at build time via tsup's `define` (replaces the runtime `import.meta.dirname → package.json` lookup that wouldn't survive a CJS retarget).
|
|
56
|
+
|
|
57
|
+
## [2.0.0] - 2026-04-23
|
|
58
|
+
|
|
59
|
+
### Breaking
|
|
60
|
+
|
|
61
|
+
- Package now ships as a Claude Code plugin. Install via `/plugin install lineman@lineman` instead of `claude mcp add`. See `MIGRATION.md` for upgrade steps.
|
|
62
|
+
- MCP tool renamed from `lineman` to `assist`; full plugin-scoped name is `mcp__plugin_lineman_core__assist`.
|
|
63
|
+
- Runtime files (`lineman-no-channels`, `lineman-pending-prompt.json`, `lineman-metrics.jsonl`) moved from `~/.goodex/` to `$CLAUDE_PLUGIN_DATA/`. Runtime state is now scoped to the plugin install; user config at `~/.goodex/lineman.json` is unchanged.
|
|
64
|
+
|
|
65
|
+
### Added
|
|
66
|
+
|
|
67
|
+
- `/lineman:doctor` slash command — diagnostic checklist (MCP reachable, token valid, tier recognized, hooks installed, channels capability, last-call latency).
|
|
68
|
+
- `/lineman:stats` slash command — session token-savings stats with a by-task-type breakdown.
|
|
69
|
+
- Auto-triggered `lineman` skill with trigger phrases for data-heavy tasks (large-file reads, error classification, build/test output triage, log analysis, grep ranking, diff summaries).
|
|
70
|
+
- Core hook helpers under `apps/lineman-mcp/hooks/core/` (`routing.mjs`, `stdin.mjs`, `mcp-ready.mjs`, `tool-naming.mjs`).
|
|
71
|
+
|
|
72
|
+
### Removed
|
|
73
|
+
|
|
74
|
+
- `autoInstallHooks()` startup call and `install_hooks` MCP tool (`handleInstallHooks`). Hooks are now registered by the plugin from `hooks/hooks.json`.
|
|
75
|
+
- Shell alias auto-injection into `~/.zshrc` / `~/.bashrc`.
|
|
76
|
+
- `~/.goodex/lineman-hooks.json` sentinel — hooks use static constants.
|
package/README.md
CHANGED
|
@@ -10,15 +10,12 @@ The plugin bundles the MCP server, lifecycle hooks, and skills as a single unit:
|
|
|
10
10
|
/plugin marketplace add lineman-io/lineman-mono
|
|
11
11
|
/plugin install lineman@lineman
|
|
12
12
|
/reload-plugins
|
|
13
|
+
/lineman:auth
|
|
13
14
|
```
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
`/lineman:auth` runs the device-code flow inside the Claude Code session — opens a browser, waits for confirmation, writes the token to `~/.goodex/lineman.json`. No shell drop required. The `npx lineman-mcp auth` CLI entry point still exists for headless / scripted setups.
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
/lineman:doctor
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
All checks should be green. If any fail, the command prints the remediation step inline (usually: run `npx lineman-mcp auth` to set an API token).
|
|
18
|
+
Once authenticated, `/lineman:doctor` runs a diagnostic checklist (MCP reachable, token valid, tier recognised, hooks installed, last-call latency). Tracked separately as LIN-320 — the doctor + stats MCP tools were dropped in the 2026-04-25 context-mode revert and are pending reactivation.
|
|
22
19
|
|
|
23
20
|
## Install (alternative — MCP only)
|
|
24
21
|
|
|
@@ -39,12 +36,13 @@ This gives you a callable tool but no automatic routing — you must invoke Line
|
|
|
39
36
|
|
|
40
37
|
Once the plugin is installed, the `lineman` skill auto-loads when your prompt matches a data-heavy trigger ("read the file", "classify error", "summarize build output", etc.) and routes the work through `mcp__plugin_lineman_core__assist`. Results come back tagged `[[LM_SUMMARY]]` / `[[LM_VERBATIM]]` / `[[LM_CONTEXT]]` / `[[LM_RESULT]]` and should be treated as authoritative.
|
|
41
38
|
|
|
42
|
-
|
|
39
|
+
User-invocable slash commands:
|
|
43
40
|
|
|
44
41
|
| Command | Purpose |
|
|
45
42
|
|---------|---------|
|
|
46
|
-
| `/lineman:
|
|
47
|
-
| `/lineman:
|
|
43
|
+
| `/lineman:auth` | Run the device-code flow to acquire and save an API token. Required once per machine before `assist` / `edit_file` will work. |
|
|
44
|
+
| `/lineman:doctor` | Diagnostic checklist — MCP reachable, token valid, tier recognized, hooks installed, channels capability, last-call latency. *Pending reactivation, see LIN-320.* |
|
|
45
|
+
| `/lineman:stats` | Session metrics — total `assist` calls, input tokens saved, output tokens consumed, average latency, savings ratio, and a by-task-type breakdown. *Pending reactivation, see LIN-320.* |
|
|
48
46
|
|
|
49
47
|
## Configuration
|
|
50
48
|
|