@proofofwork-agency/toolpin 0.2.3 → 0.2.5

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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![CI](https://github.com/proofofwork-agency/toolpin/actions/workflows/ci.yml/badge.svg)](https://github.com/proofofwork-agency/toolpin/actions/workflows/ci.yml)
4
4
  [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE)
5
- [![npm publish pending](https://img.shields.io/badge/npm-publish%20pending-orange)](https://www.npmjs.com/package/@proofofwork-agency/toolpin)
5
+ [![npm](https://img.shields.io/npm/v/@proofofwork-agency/toolpin)](https://www.npmjs.com/package/@proofofwork-agency/toolpin)
6
6
  [![Status: pre-1.0 beta](https://img.shields.io/badge/status-pre--1.0%20beta-yellow)](https://github.com/proofofwork-agency/toolpin/releases)
7
7
 
8
8
  ToolPin is a review gate for MCP server installs. It helps teams inspect what
@@ -209,7 +209,7 @@ jobs:
209
209
  runs-on: ubuntu-latest
210
210
  steps:
211
211
  - uses: actions/checkout@v4
212
- - uses: proofofwork-agency/toolpin@v0.2.3
212
+ - uses: proofofwork-agency/toolpin@v0.2.5
213
213
  with:
214
214
  live: "true"
215
215
  verify: "true"
@@ -217,9 +217,9 @@ jobs:
217
217
  ```
218
218
 
219
219
  The checked-in composite Action builds ToolPin from the action source by
220
- default, then runs `toolpin ci`. After npm publish, set `toolpin-version` to an
221
- npm version specifier if you want the Action to install
222
- `@proofofwork-agency/toolpin` from npm instead.
220
+ default, then runs `toolpin ci`. Set `toolpin-version` to an npm version
221
+ specifier if you want the Action to install `@proofofwork-agency/toolpin` from
222
+ npm instead.
223
223
 
224
224
  Recommended CI posture for reviewed lockfiles is `toolpin ci --live --verify`
225
225
  for capability drift. Use `--skip-live-verification` only as an explicit downgrade
@@ -252,7 +252,7 @@ for the exact scope and limits.
252
252
  - ToolPin curated registry source of truth in GitHub:
253
253
  <https://github.com/proofofwork-agency/toolpin/blob/main/registry/v0/servers>
254
254
  with a GitHub Pages static mirror for docs/browsing:
255
- <https://proofofwork-agency.github.io/toolpin/registry/v0>
255
+ <https://proofofwork-agency.github.io/toolpin/registry/v0/servers>
256
256
  - Custom registry configuration via `.toolpin/registries.json`.
257
257
  - Search ranking over name, title, description, package type, transport, and
258
258
  repository.
@@ -268,9 +268,10 @@ for the exact scope and limits.
268
268
 
269
269
  ## Roadmap
270
270
 
271
- The immediate release path is public distribution:
271
+ The first public release path is complete. Near-term work now focuses on
272
+ adoption and evidence quality:
272
273
 
273
- - Publish the npm package with provenance.
274
+ - Keep npm provenance publishing healthy for every release.
274
275
  - Keep the GitHub Action pinned and documented for CI adoption.
275
276
  - Continue tightening evidence definitions, policy fields, and trust docs.
276
277
 
@@ -282,7 +283,7 @@ Longer-term direction:
282
283
  - Safer secret brokering without plaintext client config.
283
284
  - Task-first MCP discovery and stronger tool-description review signals.
284
285
 
285
- See [docs/ROADMAP.md](docs/ROADMAP.md) for project direction.
286
+ See [docs/ROADMAP.md](https://github.com/proofofwork-agency/toolpin/blob/main/docs/ROADMAP.md) for project direction.
286
287
 
287
288
  ## Contributing
288
289
 
@@ -296,7 +297,8 @@ npm run registry:check
296
297
  ```
297
298
 
298
299
  Please read [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), and
299
- [CLA.md](CLA.md) before opening larger changes.
300
+ [CLA.md](https://github.com/proofofwork-agency/toolpin/blob/main/CLA.md)
301
+ before opening larger changes.
300
302
 
301
303
  ## License
302
304
 
@@ -307,11 +309,11 @@ ToolPin is distributed under the Apache License 2.0. See [LICENSE](LICENSE).
307
309
  - [Hosted documentation](https://proofofwork-agency.github.io/toolpin/)
308
310
  - [CLI reference](https://proofofwork-agency.github.io/toolpin/docs/reference/cli)
309
311
  - [Threat model](https://proofofwork-agency.github.io/toolpin/docs/concepts/threat-model)
310
- - [Client config matrix](docs/client-configs.md)
312
+ - [Client config matrix](https://github.com/proofofwork-agency/toolpin/blob/main/docs/client-configs.md)
311
313
  - [Catch drift in CI](docs/how-to/catch-drift-in-ci.md)
312
- - [ToolPin vs. the MCP ecosystem](docs/site/concepts/comparison.md)
314
+ - [ToolPin vs. the MCP ecosystem](https://proofofwork-agency.github.io/toolpin/docs/concepts/comparison)
313
315
  - [Security policy](SECURITY.md)
314
- - [Disclaimer](DISCLAIMER.md)
316
+ - [Disclaimer](https://github.com/proofofwork-agency/toolpin/blob/main/DISCLAIMER.md)
315
317
 
316
318
  ## Notice
317
319
 
@@ -320,4 +322,5 @@ ToolPin is distributed under the Apache License 2.0. See [LICENSE](LICENSE).
320
322
  > services. That code can access files, networks, and credentials through the
321
323
  > client that runs it. ToolPin's score, evidence tier, and lockfile checks are
322
324
  > review aids, not a guarantee that any server is safe. See
323
- > [DISCLAIMER.md](DISCLAIMER.md) and [docs/threat-model.md](docs/threat-model.md).
325
+ > [DISCLAIMER.md](https://github.com/proofofwork-agency/toolpin/blob/main/DISCLAIMER.md)
326
+ > and the [threat model](https://proofofwork-agency.github.io/toolpin/docs/concepts/threat-model).
package/action.yml CHANGED
@@ -35,7 +35,7 @@ inputs:
35
35
  required: false
36
36
  default: ""
37
37
  toolpin-version:
38
- description: Optional npm version specifier for the @proofofwork-agency/toolpin npm package after public npm publish. Leave empty to install from this action source.
38
+ description: Optional npm version specifier for the published @proofofwork-agency/toolpin npm package. Leave empty to install from this action source.
39
39
  required: false
40
40
  default: ""
41
41
  policy:
package/dist/cli.js CHANGED
@@ -1475,7 +1475,7 @@ Lock and governance
1475
1475
  toolpin doctor [--file mcp-lock.json] [--scope|-s all|project|global] [--global|-g] [--json]
1476
1476
  toolpin secrets audit [--file mcp-lock.json] [--scope|-s all|project|global] [--global|-g] [--json]
1477
1477
  toolpin policy digest [--policy .toolpin/policy.json] [--json]
1478
- toolpin policy check <server> --client|-c <client|all> [--version <server-version>] [--source toolpin|official|docker|all|custom-id] [--policy .toolpin/policy.json]
1478
+ toolpin policy check <server> --client|-c <client|all> [--version <server-version>] [--scope|-s project|global] [--source toolpin|official|docker|all|custom-id] [--policy .toolpin/policy.json] [--json] [--live]
1479
1479
  toolpin lock <server> --client|-c <client|all> [--version <server-version>] [--source toolpin|official|docker|all|custom-id] [--scope project|global] [--file mcp-lock.json]
1480
1480
  toolpin lock digest [--file mcp-lock.json] [--json]
1481
1481
  toolpin lock key-fingerprint --public-key public.pem [--json]
@@ -8,7 +8,7 @@ export function commandLineFor(commandId, state, server) {
8
8
  const serverName = server ? shellQuote(server.name) : "<server-name>";
9
9
  switch (commandId) {
10
10
  case "ingest":
11
- return `toolpin ingest ${source} --pages 6`;
11
+ return `toolpin ingest ${source} --limit 500 --pages 25`;
12
12
  case "installed":
13
13
  return "toolpin list --scope all --json";
14
14
  case "sources":
@@ -22,7 +22,7 @@ export function commandLineFor(commandId, state, server) {
22
22
  case "info":
23
23
  return `toolpin info ${serverName} ${source}${live}`;
24
24
  case "audit":
25
- return `toolpin audit ${serverName} ${source}${live}`;
25
+ return `toolpin audit server ${serverName} ${source}${live}`;
26
26
  case "plan":
27
27
  return `toolpin plan ${serverName} --client ${state.client} ${source}${live}`;
28
28
  case "install":
@@ -509,7 +509,7 @@ export function Footer({ state, width }) {
509
509
  const copyright = "© 2026 Proofofwork Agency · https://github.com/proofofwork-agency/toolpin";
510
510
  const copyrightWidth = Math.min(copyright.length, Math.max(0, width - 8));
511
511
  const hintWidth = Math.max(10, width - copyrightWidth - 8);
512
- return (_jsxs(Box, { paddingX: 2, marginTop: 1, flexShrink: 0, flexDirection: "column", children: [_jsx(TrustStateLegend, { width: Math.max(1, width - 4) }), _jsxs(Box, { justifyContent: "space-between", children: [_jsx(Box, { width: hintWidth, children: _jsx(Text, { wrap: "truncate", children: hints.map(([keyName, label], index) => (_jsxs(React.Fragment, { children: [index > 0 ? _jsx(Text, { color: CHROME, children: " | " }) : null, _jsx(Text, { bold: true, color: "white", children: keyName }), _jsxs(Text, { color: MUTED, children: [":", label] })] }, keyName))) }) }), _jsx(Text, { color: CHROME, wrap: "truncate", children: truncate(copyright, copyrightWidth) })] })] }));
512
+ return (_jsxs(Box, { paddingX: 2, marginTop: 1, flexShrink: 0, flexDirection: "column", children: [_jsxs(Box, { width: Math.max(1, width - 4), justifyContent: "space-between", marginTop: 1, marginBottom: 1, children: [_jsx(Box, { width: hintWidth, children: _jsx(Text, { wrap: "truncate", children: hints.map(([keyName, label], index) => (_jsxs(React.Fragment, { children: [index > 0 ? _jsx(Text, { color: CHROME, children: " | " }) : null, _jsx(Text, { bold: true, color: "white", children: keyName }), _jsxs(Text, { color: MUTED, children: [":", label] })] }, keyName))) }) }), _jsx(Text, { color: CHROME, wrap: "truncate", children: truncate(copyright, copyrightWidth) })] }), _jsx(Box, { width: Math.max(1, width - 4), justifyContent: "flex-end", children: _jsx(TrustStateLegend, { width: Math.max(1, width - 4) }) })] }));
513
513
  }
514
514
  export function TrustStateLegend({ width }) {
515
515
  const compact = width < 118;
@@ -526,7 +526,7 @@ export function TrustStateLegend({ width }) {
526
526
  { label: "UNVERIFIED", color: ERR, text: "weak evidence" },
527
527
  { label: "BLOCKED", color: ERR, text: "stop" },
528
528
  ];
529
- return (_jsxs(Text, { wrap: "truncate", children: [_jsx(Text, { color: CHROME, children: "trust " }), items.map((item, index) => (_jsxs(React.Fragment, { children: [index > 0 ? _jsx(Text, { color: CHROME, children: " " }) : null, _jsx(Text, { color: item.color, children: "\u2593" }), _jsx(Text, { bold: true, color: item.color, children: item.label }), _jsxs(Text, { color: MUTED, children: [" ", item.text] })] }, item.label)))] }));
529
+ return (_jsxs(Box, { flexDirection: "column", alignItems: "flex-end", marginTop: 1, marginBottom: 1, children: [_jsx(Text, { color: CHROME, children: "trust legend" }), _jsx(Box, { marginTop: 1, marginBottom: 1, flexDirection: compact ? "column" : "row", alignItems: "flex-end", children: items.map((item, index) => (_jsxs(Box, { marginLeft: index > 0 && !compact ? 2 : 0, marginTop: compact && index > 0 ? 1 : 0, children: [_jsx(Box, { marginRight: 1, children: _jsx(Text, { color: item.color, children: "\u2593" }) }), _jsx(Text, { bold: true, color: item.color, children: item.label }), _jsxs(Text, { color: MUTED, children: [" ", item.text] })] }, item.label))) })] }));
530
530
  }
531
531
  function EmptyPanel({ title }) {
532
532
  return (_jsxs(Box, { flexDirection: "column", backgroundColor: SURFACE, paddingX: 2, paddingY: 1, flexGrow: 1, children: [_jsx(ModalTitle, { title: title.toLowerCase(), file: "empty" }), _jsx(Text, { color: MUTED, children: "No server selected. Search and select a server first." })] }));
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const TOOLPIN_VERSION = "0.2.3";
1
+ export const TOOLPIN_VERSION = "0.2.5";
@@ -112,7 +112,7 @@
112
112
  <circle class="dot-red" cx="60" cy="53" r="9"/>
113
113
  <circle class="dot-yellow" cx="90" cy="53" r="9"/>
114
114
  <circle class="dot-green" cx="120" cy="53" r="9"/>
115
- <text x="160" y="61" class="small">ToolPin v0.2.2 - MCP install review gate - toolpin or tpn</text>
115
+ <text x="160" y="61" class="small">ToolPin - MCP install review gate - toolpin or tpn</text>
116
116
 
117
117
  <g class="frame f1">
118
118
  <text x="62" y="126"><tspan class="prompt">$</tspan><tspan class="cmd"> toolpin search contextrelay --source toolpin</tspan></text>
@@ -41,7 +41,7 @@ jobs:
41
41
  runs-on: ubuntu-latest
42
42
  steps:
43
43
  - uses: actions/checkout@v4
44
- - uses: proofofwork-agency/toolpin@v0.2.3
44
+ - uses: proofofwork-agency/toolpin@v0.2.5
45
45
  with:
46
46
  file: mcp-lock.json
47
47
  live: "true"
@@ -100,7 +100,7 @@ toolpin lock digest --file mcp-lock.json
100
100
  Use it in CI:
101
101
 
102
102
  ```yaml
103
- - uses: proofofwork-agency/toolpin@v0.2.3
103
+ - uses: proofofwork-agency/toolpin@v0.2.5
104
104
  with:
105
105
  file: mcp-lock.json
106
106
  live: "true"
@@ -122,7 +122,7 @@ toolpin lock verify-signature --policy .toolpin/policy.json --key public.pem --f
122
122
  Then in CI:
123
123
 
124
124
  ```yaml
125
- - uses: proofofwork-agency/toolpin@v0.2.3
125
+ - uses: proofofwork-agency/toolpin@v0.2.5
126
126
  with:
127
127
  file: mcp-lock.json
128
128
  live: "true"
@@ -139,7 +139,7 @@ trust root are controlled outside the PR path.
139
139
  To enforce a non-default policy path:
140
140
 
141
141
  ```yaml
142
- - uses: proofofwork-agency/toolpin@v0.2.3
142
+ - uses: proofofwork-agency/toolpin@v0.2.5
143
143
  with:
144
144
  policy: security/toolpin-policy.json
145
145
  ```
@@ -147,7 +147,7 @@ To enforce a non-default policy path:
147
147
  To make CI skip policy enforcement explicitly:
148
148
 
149
149
  ```yaml
150
- - uses: proofofwork-agency/toolpin@v0.2.3
150
+ - uses: proofofwork-agency/toolpin@v0.2.5
151
151
  with:
152
152
  no-policy: "true"
153
153
  ```
@@ -156,7 +156,7 @@ To re-run verification before comparing locked plans, use the stricter CI
156
156
  posture:
157
157
 
158
158
  ```yaml
159
- - uses: proofofwork-agency/toolpin@v0.2.3
159
+ - uses: proofofwork-agency/toolpin@v0.2.5
160
160
  with:
161
161
  live: "true"
162
162
  verify: "true"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proofofwork-agency/toolpin",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "description": "Trusted install, lockfile, and governance layer for MCP servers",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -39,6 +39,7 @@
39
39
  "tpn": "./dist/cli.js"
40
40
  },
41
41
  "scripts": {
42
+ "prebuild": "node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"",
42
43
  "build": "tsc -p tsconfig.json",
43
44
  "postbuild": "node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"",
44
45
  "docs:build": "docusaurus build website",