@ai-ecoverse/mcpcat 0.18.2 → 0.19.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/README.md CHANGED
@@ -22,13 +22,11 @@ Or via npm:
22
22
  npm install -g @ai-ecoverse/mcpcat
23
23
  ```
24
24
 
25
- mcpcat runs natively on macOS, Linux and Windows (Node ≥ 24), and inside Sliccy Seven as a kernel program, with the same flags, the same output and the same config file in both places. Orphan-free shutdown of stdio server trees in the kernel needs slicc-kernel ≥ 1.74.0; on older kernels only the direct child is signalled. A SIGKILLed mcpcat runs no handler. On slicc-kernel ≥ 1.88.0, mcpcat spawns stdio servers and served commands with a parent death signal (like Linux `PR_SET_PDEATHSIG`), so the kernel SIGKILLs each server's process group when mcpcat dies. On older kernels, and on the host, where there is no portable equivalent, servers that exit on stdin EOF (most MCP servers) still stop, but servers that ignore it keep running.
25
+ mcpcat runs natively on macOS, Linux and Windows (Node ≥ 26), and inside Sliccy Seven as a kernel program, with the same flags, the same output and the same config file in both places. Orphan-free shutdown of stdio server trees in the kernel needs slicc-kernel ≥ 1.74.0; on older kernels only the direct child is signalled. A SIGKILLed mcpcat runs no handler. On slicc-kernel ≥ 1.88.0, mcpcat spawns stdio servers and served commands with a parent death signal (like Linux `PR_SET_PDEATHSIG`), so the kernel SIGKILLs each server's process group when mcpcat dies. On older kernels, and on the host, where there is no portable equivalent, servers that exit on stdin EOF (most MCP servers) still stop, but servers that ignore it keep running.
26
26
 
27
- ## Releases: certified = latest
27
+ ## CI and releases
28
28
 
29
- Every change that alters what mcpcat ships is certified before it reaches `main`. A pull request that touches `src/`, the build, the dependencies or the release workflows gets mcpcat's cert-review on a pack of its head, and again in the merge queue on the exact tree that lands on `main`; a FAIL blocks the merge. Docs-, test- and CI-only changes skip it as "not behaviour". A draft pull request is not reviewed: its `cert-review` is red with `draft: not reviewed, mark it ready for review`, and marking it ready starts the review (converted_to_draft cancels a running one). Mark ready = reviewed, and merges on green; a pull request held for anything stays a draft. For a PR that needs the coordinator's security read, the order is: the coordinator reads the draft, it is marked ready, the cert runs, then the queue. Each merge to `main` is then released to npm as `latest` in one step by semantic-release, with provenance, so `npm install @ai-ecoverse/mcpcat` and the installer always get certified code. The verdict line is a comment on the pull request and the `cert-review` commit status. It reads `certified …`, `cert-ci: FAIL …` when the reviewer or a check in code found a defect (status `failure`), or `cert-ci: INCOMPLETE …` when the review couldn't decide: the review job didn't succeed or was skipped, no verdict could be read, or the artifact or the runner's own `gh` was missing (status `error`). A fork's change to shipped behaviour also reads INCOMPLETE, since it gets no review. INCOMPLETE never certifies; re-run the failed jobs. A run that ends without `record` posting its status (a crashed plan, record or verdict job) still posts one on the head: `error` with its INCOMPLETE line, or `failure` for a FAIL. So the required `cert-review` check never waits forever. The reviewer's verdict can add defects but never clear one found in code: `record` re-reads the suites' evidence (`stage.json`, `suites.json`), uploaded before the reviewer runs and bound by the artifact id and digest the review job output. A suite or security row that failed on the host or a pinned kernel, a changed test that fails on the head, an import in the kernel bundle or an unexplained rebuild difference is a FAIL. Missing suites, kernels or rows are INCOMPLETE. The NEGATIVE runs each changed test on the base's code: the subject's tests, helpers and fixtures with the base's `dist`, `scripts/` and `.github/workflows/`, all from the base sha, so a test of the cert tooling runs against main's tooling. The record names both shas. A changed test that also passes on the base is named in the line as `gaps: no-negative <file>`. Every artifact a later job reads (the tarball, the verdict, the suites' evidence) is downloaded by the artifact id its producer output, after `bind.mjs` checks the artifact's name, run and digest against that producer's outputs. Any other artifact from this attempt of the run under `mcpcat-tarball-`, `mcpcat-npm-tarball-` or `cert-review-` makes the line INCOMPLETE. An earlier attempt's leftovers, created before this attempt started, are never read.
30
-
31
- Silence never passes: every gate in the workflows prints a verdict line, and its caller requires that line, not just an exit code. These are `all-green: PASS|FAIL …`, the cert job's `cert: kernel <v> — N kernel tests passed`, shipped.mjs's `behaviour:`/`not behaviour:`, and the installer tests' `All installer tests passed.`. A gate that exits 0 without its line fails.
29
+ `.github/workflows/ci.yml` is the only workflow. It calls [slicc-shared-web's pipeline](https://github.com/ai-ecoverse/slicc-shared-web#pipeline): lint (Biome, tsc and the shared rules) on every event; on pull requests and in the merge queue the integration suite (`npm test`, every `test/integration/*.test.mjs` on Node 26, split over Linux shards); on pull requests a Claude and a Codex review. The checks to require are `ci / integration` and `ci / review`. Every merge to `main` is released to npm as `latest` by semantic-release, with provenance, through trusted publishing bound to `ci.yml`. When a merge releases (a new `v*` tag at the commit), the `binaries` job packs the published tarball, runs the installer tests on Ubuntu (with and without Node) and Alpine, and attaches the tarball, `install.sh` and `SHA256SUMS` to the GitHub release. `kernel-floor.test.mjs` runs the kernel tests on the `engines.slicc-kernel` floor; `MCPCAT_KERNEL_DIR` points the kernel tests at any installed `@ai-ecoverse/slicc-kernel`.
32
30
 
33
31
  ## Quick start
34
32
 
@@ -40,7 +38,7 @@ mcpcat serve --http 8808 ./scripts/jira.jsh
40
38
 
41
39
  ## Agent skill
42
40
 
43
- The package ships an [Agent Skill](https://agentskills.io/specification) that teaches an agent mcpcat in one file: `dist/skills/mcpcat/SKILL.md`, built from [`src/skill/SKILL.txt`](src/skill/SKILL.txt) (the repo keeps no Markdown besides README.md and AGENTS.md). It covers targets, listing and calling tools, `mcp.json`, exit codes, and the secrets rule: `${NAME}` placeholders in single quotes, never a value in a command, a file or the conversation, and never a token in `mcp.json`. `mcpcat help --skill` prints the copy that matches the installed version. `package.json` declares it as a pi package skill (`"pi": { "skills": ["dist/skills"] }`). In seven, bios links it into `/usr/share/skills` for the certified catalog install. It is shipped behaviour under `src/`, so a change to it gets a cert review.
41
+ The package ships an [Agent Skill](https://agentskills.io/specification) that teaches an agent mcpcat in one file: `dist/skills/mcpcat/SKILL.md`, built from [`src/skill/SKILL.txt`](src/skill/SKILL.txt) (the repo keeps no Markdown besides README.md and AGENTS.md). It covers targets, listing and calling tools, `mcp.json`, exit codes, and the secrets rule: `${NAME}` placeholders in single quotes, never a value in a command, a file or the conversation, and never a token in `mcp.json`. `mcpcat help --skill` prints the copy that matches the installed version. `package.json` declares it as a pi package skill (`"pi": { "skills": ["dist/skills"] }`). In seven, bios links it into `/usr/share/skills` for the catalog install.
44
42
 
45
43
  ## License
46
44
 
@@ -17188,5 +17188,5 @@ try {
17188
17188
  });
17189
17189
  } catch {
17190
17190
  }
17191
- var code = await run(platform, "0.18.2", args);
17191
+ var code = await run(platform, "0.19.0", args);
17192
17192
  process.exit(code);
@@ -16910,7 +16910,7 @@ async function main(ctx) {
16910
16910
  packageDir: "/node_modules/@ai-ecoverse/mcpcat"
16911
16911
  });
16912
16912
  const args = ctx.argv.slice(1);
16913
- return run(platform2, "0.18.2", args);
16913
+ return run(platform2, "0.19.0", args);
16914
16914
  }
16915
16915
  export {
16916
16916
  main as default
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-ecoverse/mcpcat",
3
- "version": "0.18.2",
3
+ "version": "0.19.0",
4
4
  "description": "A curl for the Model Context Protocol",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -16,7 +16,7 @@
16
16
  "mcpcat": "dist/host/mcpcat.mjs"
17
17
  },
18
18
  "engines": {
19
- "node": ">=24",
19
+ "node": ">=26",
20
20
  "slicc-kernel": ">=1.65.2"
21
21
  },
22
22
  "publishConfig": {
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "fledgling": {
27
27
  "provider": "github",
28
- "workflow": "release.yml",
28
+ "workflow": "ci.yml",
29
29
  "repo": "ai-ecoverse/mcpcat",
30
30
  "publish": true
31
31
  },
@@ -51,25 +51,20 @@
51
51
  "build": "node scripts/build.mjs",
52
52
  "lint": "sh scripts/lint.sh",
53
53
  "typecheck": "tsc",
54
- "test": "npm run test:unit && npm run test:integration && npm run test:kernel-min",
54
+ "test": "node --test --test-timeout=30000 'test/integration/*.test.mjs'",
55
55
  "test:unit": "mcr -c node_modules/@ai-ecoverse/slicc-shared-web/mcr.config.mjs node --test 'test/unit/**/*.test.mjs' 'test/unit/**/*.test.ts'",
56
- "test:integration": "node --test --test-timeout=30000 test/integration/*.test.mjs",
57
- "test:kernel-min": "node scripts/test-kernel-min.mjs",
58
- "cert": "node scripts/cert.mjs",
59
56
  "release": "semantic-release",
60
57
  "trust": "npx fledgling sync -y --skip-publish",
61
58
  "trust:dry": "npx fledgling sync --dry-run -y --skip-publish"
62
59
  },
63
60
  "devDependencies": {
64
- "@ai-ecoverse/slicc-bios": "1.38.0",
65
- "@ai-ecoverse/slicc-kernel": "1.143.4",
66
- "@ai-ecoverse/slicc-shared-web": "1.30.3",
61
+ "@ai-ecoverse/slicc-kernel": "1.146.2",
62
+ "@ai-ecoverse/slicc-shared-web": "2.8.5",
67
63
  "@biomejs/biome": "2.5.15",
68
64
  "@earendil-works/pi-codemode": "1.2.0",
69
65
  "@earendil-works/pi-mcp": "1.2.0",
70
66
  "@types/node": "26.6.5",
71
67
  "esbuild": "0.28.2",
72
- "kernel-cert-new": "npm:@ai-ecoverse/slicc-kernel@1.143.4",
73
68
  "lefthook": "2.2.2",
74
69
  "monocart-coverage-reports": "2.13.2",
75
70
  "proper-lockfile": "4.1.2",