@wirecat/cli-template 0.11.0 → 0.12.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/.github/workflows/release.yml +62 -0
- package/CHANGELOG.md +16 -0
- package/dist/bin/clidev.js +2 -2
- package/dist/bundle/{chunk-KAREKBUZ.js → chunk-QQUFZLFP.js} +1 -1
- package/dist/bundle/clidev.js +2 -2
- package/dist/bundle/{mcp-G6XP2IRO.js → mcp-TEMCENVV.js} +1 -1
- package/dist/bundle/{program-K6347XBZ.js → program-RNGI562F.js} +2 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/configuration.md +3 -1
- package/docs/dev/skills/release/SKILL.md +2 -2
- package/kit/dist/new.js +3 -0
- package/package.json +2 -1
- package/server.json +38 -0
- package/src/version.ts +1 -1
- package/template.json +1 -0
|
@@ -252,3 +252,65 @@ jobs:
|
|
|
252
252
|
exit 0
|
|
253
253
|
fi
|
|
254
254
|
exit "$status"
|
|
255
|
+
|
|
256
|
+
mcp-registry-dry-run:
|
|
257
|
+
needs: build
|
|
258
|
+
if: inputs.dry_run && github.repository != 'WireCatLabs/cli-template'
|
|
259
|
+
runs-on: ubuntu-latest
|
|
260
|
+
permissions:
|
|
261
|
+
contents: read
|
|
262
|
+
env:
|
|
263
|
+
VERSION: ${{ needs.build.outputs.version }}
|
|
264
|
+
MCP_PUBLISHER_VERSION: 1.8.5
|
|
265
|
+
MCP_PUBLISHER_SHA256: 2d151ac57275c9a6684d9d22b1cba81058bab195ea0a162e8fce3c6a5ec32812
|
|
266
|
+
steps:
|
|
267
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
268
|
+
with:
|
|
269
|
+
persist-credentials: false
|
|
270
|
+
- name: mcp-publisher
|
|
271
|
+
if: hashFiles('server.json') != ''
|
|
272
|
+
run: |
|
|
273
|
+
curl -sSfLo mcp-publisher.tar.gz "https://github.com/modelcontextprotocol/registry/releases/download/v${MCP_PUBLISHER_VERSION}/mcp-publisher_linux_amd64.tar.gz"
|
|
274
|
+
echo "${MCP_PUBLISHER_SHA256} mcp-publisher.tar.gz" | sha256sum -c -
|
|
275
|
+
tar -xzf mcp-publisher.tar.gz mcp-publisher
|
|
276
|
+
- name: validate server.json
|
|
277
|
+
if: hashFiles('server.json') != ''
|
|
278
|
+
run: |
|
|
279
|
+
jq --arg v "$VERSION" '.version = $v | .packages[0].version = $v' server.json > server.tmp && mv server.tmp server.json
|
|
280
|
+
./mcp-publisher validate
|
|
281
|
+
|
|
282
|
+
# After the tag, so a registry failure never holds back the npm release. A CLI without server.json, or without the
|
|
283
|
+
# key, publishes nothing and says so: the key proves wirecat.dev's DNS record (bin/setup-mcp-registry-key in
|
|
284
|
+
# wirecat-desktop), and the registry checks package.json's mcpName in the version npm already has.
|
|
285
|
+
mcp-registry:
|
|
286
|
+
needs: [build, tag]
|
|
287
|
+
if: ${{ !inputs.dry_run && github.repository != 'WireCatLabs/cli-template' }}
|
|
288
|
+
runs-on: ubuntu-latest
|
|
289
|
+
permissions:
|
|
290
|
+
contents: read
|
|
291
|
+
env:
|
|
292
|
+
VERSION: ${{ needs.build.outputs.version }}
|
|
293
|
+
MCP_PUBLISHER_VERSION: 1.8.5
|
|
294
|
+
MCP_PUBLISHER_SHA256: 2d151ac57275c9a6684d9d22b1cba81058bab195ea0a162e8fce3c6a5ec32812
|
|
295
|
+
steps:
|
|
296
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
297
|
+
with:
|
|
298
|
+
persist-credentials: false
|
|
299
|
+
- name: publish to the MCP Registry
|
|
300
|
+
env:
|
|
301
|
+
MCP_REGISTRY_PRIVATE_KEY: ${{ secrets.MCP_REGISTRY_PRIVATE_KEY }}
|
|
302
|
+
run: |
|
|
303
|
+
if [ ! -f server.json ]; then
|
|
304
|
+
echo "::notice::no server.json — $VERSION is not published to the MCP Registry"
|
|
305
|
+
exit 0
|
|
306
|
+
fi
|
|
307
|
+
if [ -z "$MCP_REGISTRY_PRIVATE_KEY" ]; then
|
|
308
|
+
echo "::notice::MCP_REGISTRY_PRIVATE_KEY is not set — $VERSION is not published to the MCP Registry"
|
|
309
|
+
exit 0
|
|
310
|
+
fi
|
|
311
|
+
curl -sSfLo mcp-publisher.tar.gz "https://github.com/modelcontextprotocol/registry/releases/download/v${MCP_PUBLISHER_VERSION}/mcp-publisher_linux_amd64.tar.gz"
|
|
312
|
+
echo "${MCP_PUBLISHER_SHA256} mcp-publisher.tar.gz" | sha256sum -c -
|
|
313
|
+
tar -xzf mcp-publisher.tar.gz mcp-publisher
|
|
314
|
+
jq --arg v "$VERSION" '.version = $v | .packages[0].version = $v' server.json > server.tmp && mv server.tmp server.json
|
|
315
|
+
./mcp-publisher login dns --domain wirecat.dev --private-key "$MCP_REGISTRY_PRIVATE_KEY"
|
|
316
|
+
./mcp-publisher publish
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,22 @@ Notable changes to `@wirecat/cli-template`. One section per version, newest firs
|
|
|
5
5
|
|
|
6
6
|
<!-- cspell:words clawhub gcal katex openclaw smol whatsapp -->
|
|
7
7
|
|
|
8
|
+
## 0.12.0 — 01.11.2026
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **A new CLI is published to the official MCP Registry as `dev.wirecat/<name>`.** `server.json` is a new seed (run
|
|
13
|
+
with `npx`, `mcp serve --profiles all`), `new` sets `mcpName` in `package.json` for a WireCatLabs CLI, and
|
|
14
|
+
`release.yml` gets `mcp-registry-dry-run` and `mcp-registry`, copied from tg-cli. A CLI without `server.json`, or a
|
|
15
|
+
repository without `MCP_REGISTRY_PRIVATE_KEY`, publishes nothing and says so. An existing CLI gets the jobs from
|
|
16
|
+
`upgrade`; it adds `server.json` and `mcpName` itself, since both are its own files.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **0.11.0's note on run records gave the wrong reason.** A built skeleton keeps only a failed run because its own
|
|
21
|
+
commands only read local files and open no run. A command you add that does its work in `context.run` is kept on
|
|
22
|
+
success by default; [Configuration](docs/configuration.md#run-records) says so now.
|
|
23
|
+
|
|
8
24
|
## 0.11.0 — 31.10.2026
|
|
9
25
|
|
|
10
26
|
### Added
|
package/dist/bin/clidev.js
CHANGED
|
@@ -9,7 +9,7 @@ if (
|
|
|
9
9
|
(words[0] === "--version" || words[0] === "-V") &&
|
|
10
10
|
!Object.keys(process.env).some((key) => key.endsWith("_TEST_ARGV_LOG"))
|
|
11
11
|
) {
|
|
12
|
-
process.stdout.write("0.
|
|
12
|
+
process.stdout.write("0.12.0\n")
|
|
13
13
|
} else {
|
|
14
14
|
// Before the bundle compiles: the bundle's own call comes after its chunks.
|
|
15
15
|
module.enableCompileCache()
|
|
@@ -29,7 +29,7 @@ if (
|
|
|
29
29
|
})
|
|
30
30
|
}
|
|
31
31
|
const running = import("../bundle/clidev.js")
|
|
32
|
-
const chunks = ["../bundle/all-profiles-MJ6XSFOO.js","../bundle/anthropic-W5UKBZUB.js","../bundle/app-server-EZ46JAHB.js","../bundle/bun-HB6O2TTT.js","../bundle/bun-sqlite-KBXOW2ES.js","../bundle/decode-AMXUVKNY.js","../bundle/dist-ESHIQU4M.js","../bundle/echarts-GJDMQ2AQ.js","../bundle/embed-L4CRZ2XQ.js","../bundle/embedder-IBGV4M2K.js","../bundle/first-screen-X5IJKBSU.js","../bundle/instructions-YJECS4KN.js","../bundle/mcp-
|
|
32
|
+
const chunks = ["../bundle/all-profiles-MJ6XSFOO.js","../bundle/anthropic-W5UKBZUB.js","../bundle/app-server-EZ46JAHB.js","../bundle/bun-HB6O2TTT.js","../bundle/bun-sqlite-KBXOW2ES.js","../bundle/decode-AMXUVKNY.js","../bundle/dist-ESHIQU4M.js","../bundle/echarts-GJDMQ2AQ.js","../bundle/embed-L4CRZ2XQ.js","../bundle/embedder-IBGV4M2K.js","../bundle/first-screen-X5IJKBSU.js","../bundle/instructions-YJECS4KN.js","../bundle/mcp-OQBZXELQ.js","../bundle/mcp-RDZGYPSY.js","../bundle/mcp-TEMCENVV.js","../bundle/node-NQG4EVZR.js","../bundle/node-P4E63KXA.js","../bundle/node-TLZSIHIJ.js","../bundle/node-sqlite-BR7F3BLB.js","../bundle/oauth-J7UAWNIK.js","../bundle/open-BR47R5UE.js","../bundle/process-66I7RDPJ.js","../bundle/program-RNGI562F.js","../bundle/prompt-NE5JJ7UP.js","../bundle/recognize-GC3YFVIA.js","../bundle/remote-QELOMKQM.js","../bundle/rerank-BH6TZ2SP.js","../bundle/serve-WWLRNDT2.js","../bundle/server-DE6NLNUF.js","../bundle/server-ZPSQKOAH.js","../bundle/state-2BEGXAMO.js","../bundle/store-AH6WZMCF.js","../bundle/store-maintenance-command-PBXX3IEV.js"]
|
|
33
33
|
// After the server answers its first request, so it starts no later.
|
|
34
34
|
if (serves) setTimeout(() => void Promise.allSettled(chunks.map((chunk) => import(chunk))), 2000).unref()
|
|
35
35
|
await running
|
package/dist/bundle/clidev.js
CHANGED
|
@@ -3,7 +3,7 @@ import { createRequire as __bundleRequire } from "node:module";
|
|
|
3
3
|
const require = __bundleRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
IDENTITY
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QQUFZLFP.js";
|
|
7
7
|
import {
|
|
8
8
|
catchCrashes
|
|
9
9
|
} from "./chunk-EFHLQXG6.js";
|
|
@@ -14,7 +14,7 @@ import "./chunk-ZVVMGPBJ.js";
|
|
|
14
14
|
import { enableCompileCache } from "node:module";
|
|
15
15
|
enableCompileCache();
|
|
16
16
|
var stopCatching = catchCrashes({ cli: IDENTITY.command, interactive: process.stdout.isTTY === true });
|
|
17
|
-
var { run } = await import("./program-
|
|
17
|
+
var { run } = await import("./program-RNGI562F.js");
|
|
18
18
|
try {
|
|
19
19
|
process.exitCode = await run(process.argv.slice(2));
|
|
20
20
|
} finally {
|
|
@@ -593,7 +593,7 @@ import {
|
|
|
593
593
|
IDENTITY,
|
|
594
594
|
PACKAGE,
|
|
595
595
|
SKILL
|
|
596
|
-
} from "./chunk-
|
|
596
|
+
} from "./chunk-QQUFZLFP.js";
|
|
597
597
|
import {
|
|
598
598
|
isTextModelInstalled,
|
|
599
599
|
textModelsDirectory
|
|
@@ -17198,7 +17198,7 @@ var serveCommand3 = /* @__PURE__ */ __name(() => annotate(new Command("serve"),
|
|
|
17198
17198
|
run: run3,
|
|
17199
17199
|
...environment.signal ? { signal: environment.signal } : {}
|
|
17200
17200
|
};
|
|
17201
|
-
const { serveMcp, serveMcpOverHttp } = await import("./mcp-
|
|
17201
|
+
const { serveMcp, serveMcpOverHttp } = await import("./mcp-TEMCENVV.js");
|
|
17202
17202
|
if (!flags.http)
|
|
17203
17203
|
return serveMcp(options);
|
|
17204
17204
|
const { portOf: portOf2, publicUrlOf: publicUrlOf2 } = await import("./mcp-RDZGYPSY.js");
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
1
|
+
export declare const VERSION = "0.12.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = "0.
|
|
1
|
+
export const VERSION = "0.12.0";
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/docs/configuration.md
CHANGED
|
@@ -19,6 +19,8 @@ the permissions say.
|
|
|
19
19
|
|
|
20
20
|
## Run records
|
|
21
21
|
|
|
22
|
-
A command that fails is kept as a run, for `clidev runs list` and `runs show`.
|
|
22
|
+
A command that fails is kept as a run, for `clidev runs list` and `runs show`. A command you add that does its work
|
|
23
|
+
in `context.run` is kept when it succeeds too, unless `record` is `false` (then only failures) or it ran with
|
|
24
|
+
`--no-record`. The skeleton's own commands only read local files and open no run. `record_input` decides whether a run
|
|
23
25
|
keeps the words you typed; it is `true` unless you set it to `false`. Secrets are masked either way; see
|
|
24
26
|
[Security](security.md).
|
|
@@ -33,8 +33,8 @@ The rules are the handbook's [Releases page](../../../../node_modules/@wirecat/c
|
|
|
33
33
|
section as `## <version> — DD.MM.YYYY`, run `pnpm release:check` again, and open the pull request
|
|
34
34
|
`chore(release): <version>`.
|
|
35
35
|
8. **The publish.** Merge it when its checks pass, then run `bin/release` on a clean `main`: it starts
|
|
36
|
-
`release.yml` and follows it (`WC-REL-11`). A messenger CLI also needs the owner's
|
|
37
|
-
(`WC-REL-10`)
|
|
36
|
+
`release.yml` and follows it (`WC-REL-11`). A messenger CLI also needs the owner's yes for that version in the
|
|
37
|
+
conversation (`WC-REL-10`): ask before you run `bin/release`. Never `bin/release --local`: that is the owner's, for the first release before npm trusts
|
|
38
38
|
`release.yml`, with `NPM_TOKEN`, the npm token in the keyring, or the owner's own npm login.
|
|
39
39
|
The keyring is read only when `NPM_KEYRING_ACCOUNT` names the account the token is stored under (service `npm`);
|
|
40
40
|
there is no default account. When that lookup fails, `bin/release` stops; it does not fall back to the npm login.
|
package/kit/dist/new.js
CHANGED
|
@@ -178,6 +178,9 @@ export const cliPackageJson = (text, names) => {
|
|
|
178
178
|
next.homepage = `https://github.com/${names.owner}/${names.name}#readme`;
|
|
179
179
|
if (pkg.bugs)
|
|
180
180
|
next.bugs = { url: `https://github.com/${names.owner}/${names.name}/issues` };
|
|
181
|
+
// The MCP Registry takes dev.wirecat/ names only from wirecat.dev's DNS key, which only WireCatLabs holds.
|
|
182
|
+
if (names.owner === "WireCatLabs")
|
|
183
|
+
next.mcpName = `dev.wirecat/${names.name}`;
|
|
181
184
|
return `${JSON.stringify(next, null, 2)}\n`;
|
|
182
185
|
};
|
|
183
186
|
const VERSION_FILE = "src/version.ts";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wirecat/cli-template",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Start a new WireCat CLI: a working skeleton on cli-base and cli-core, copied by new and kept current by upgrade",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Viacheslav Ptsarev",
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"docs",
|
|
27
27
|
"lint",
|
|
28
28
|
"scripts",
|
|
29
|
+
"server.json",
|
|
29
30
|
"skills",
|
|
30
31
|
"src",
|
|
31
32
|
"AGENTS.md",
|
package/server.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "dev.wirecat/clidev-cli",
|
|
4
|
+
"title": "WireCat clidev",
|
|
5
|
+
"description": "clidev for agents over MCP. Set up a profile with the clidev CLI first.",
|
|
6
|
+
"websiteUrl": "https://wirecat.dev/en/docs/clidev",
|
|
7
|
+
"repository": {
|
|
8
|
+
"url": "https://github.com/WireCatLabs/clidev-cli",
|
|
9
|
+
"source": "github"
|
|
10
|
+
},
|
|
11
|
+
"version": "0.0.0",
|
|
12
|
+
"packages": [
|
|
13
|
+
{
|
|
14
|
+
"registryType": "npm",
|
|
15
|
+
"identifier": "@wirecat/clidev-cli",
|
|
16
|
+
"version": "0.0.0",
|
|
17
|
+
"runtimeHint": "npx",
|
|
18
|
+
"transport": {
|
|
19
|
+
"type": "stdio"
|
|
20
|
+
},
|
|
21
|
+
"packageArguments": [
|
|
22
|
+
{
|
|
23
|
+
"type": "positional",
|
|
24
|
+
"value": "mcp"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"type": "positional",
|
|
28
|
+
"value": "serve"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"type": "named",
|
|
32
|
+
"name": "--profiles",
|
|
33
|
+
"value": "all"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
}
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = "0.
|
|
1
|
+
export const VERSION = "0.12.0"
|