kimi-plugin-cc 2.5.1 → 2.5.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +9 -1
- package/README.md +62 -4
- package/dist/commands/setup.js +78 -51
- package/dist/dsh/companion.js +9 -6
- package/dist/dsh/index.js +15 -2
- package/dist/hooks/managed-block.js +86 -20
- package/dist/version.js +1 -1
- package/docs/migration.md +4 -2
- package/docs/registry-releases.md +64 -3
- package/docs/safety.md +3 -1
- package/package.json +38 -5
- package/plugins/kimi-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/kimi-codex/dist/commands/setup.js +78 -51
- package/plugins/kimi-codex/dist/dsh/companion.js +9 -6
- package/plugins/kimi-codex/dist/dsh/index.js +15 -2
- package/plugins/kimi-codex/dist/hooks/managed-block.js +86 -20
- package/plugins/kimi-codex/dist/version.js +1 -1
- package/plugins/kimi-dsh/README.md +4 -1
- package/plugins/kimi-dsh/dist/commands/setup.js +78 -51
- package/plugins/kimi-dsh/dist/dsh/companion.js +9 -6
- package/plugins/kimi-dsh/dist/dsh/index.js +15 -2
- package/plugins/kimi-dsh/dist/hooks/managed-block.js +86 -20
- package/plugins/kimi-dsh/dist/version.js +1 -1
- package/plugins/kimi-dsh/package.json +33 -3
|
@@ -45,10 +45,80 @@ const MATCHER_LINE_RE = /^matcher\s*=/;
|
|
|
45
45
|
/** `timeout = <int>` — the only other key our managed [[hooks]] table emits. */
|
|
46
46
|
const TIMEOUT_LINE_RE = /^timeout\s*=\s*\d+\s*$/;
|
|
47
47
|
const HOOKS_TABLE_RE = /^\[\[hooks\]\]\s*$/;
|
|
48
|
+
// Recognize comment lines lexically, not text inside TOML string values.
|
|
49
|
+
// Whole-document parsing remains the authority for TOML validity.
|
|
50
|
+
function scanTomlLines(contents) {
|
|
51
|
+
const markers = new Set();
|
|
52
|
+
const tables = new Set();
|
|
53
|
+
let state = "plain";
|
|
54
|
+
let line = 0;
|
|
55
|
+
let blankPrefix = true;
|
|
56
|
+
for (let i = 0; i < contents.length; i += 1) {
|
|
57
|
+
const c = contents[i];
|
|
58
|
+
if (c === "\n") {
|
|
59
|
+
line += 1;
|
|
60
|
+
blankPrefix = true;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const onlyWhitespaceBefore = blankPrefix;
|
|
64
|
+
if (c !== " " && c !== "\t" && c !== "\r")
|
|
65
|
+
blankPrefix = false;
|
|
66
|
+
if (state === "plain") {
|
|
67
|
+
if (c === "[" && onlyWhitespaceBefore)
|
|
68
|
+
tables.add(line);
|
|
69
|
+
if (c === "#") {
|
|
70
|
+
if (onlyWhitespaceBefore) {
|
|
71
|
+
const end = contents.indexOf("\n", i);
|
|
72
|
+
const comment = contents.slice(i, end < 0 ? contents.length : end).trim();
|
|
73
|
+
if (BEGIN_LINE_RE.test(comment) || END_LINE_RE.test(comment))
|
|
74
|
+
markers.add(line);
|
|
75
|
+
}
|
|
76
|
+
const end = contents.indexOf("\n", i);
|
|
77
|
+
if (end < 0)
|
|
78
|
+
break;
|
|
79
|
+
i = end - 1;
|
|
80
|
+
}
|
|
81
|
+
else if (c === '"' || c === "'") {
|
|
82
|
+
const triple = contents.slice(i, i + 3) === c.repeat(3);
|
|
83
|
+
state = c === '"' ? (triple ? "multibasic" : "basic") : (triple ? "multiliteral" : "literal");
|
|
84
|
+
if (triple)
|
|
85
|
+
i += 2;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const basic = state === "basic" || state === "multibasic";
|
|
90
|
+
const quote = basic ? '"' : "'";
|
|
91
|
+
if (basic && c === "\\") {
|
|
92
|
+
if (contents[i + 1] === "\n") {
|
|
93
|
+
line += 1;
|
|
94
|
+
blankPrefix = true;
|
|
95
|
+
}
|
|
96
|
+
i += 1;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (c !== quote)
|
|
100
|
+
continue;
|
|
101
|
+
if (state === "basic" || state === "literal")
|
|
102
|
+
state = "plain";
|
|
103
|
+
else if (contents.slice(i, i + 3) === quote.repeat(3)) {
|
|
104
|
+
while (contents[i + 1] === quote)
|
|
105
|
+
i += 1;
|
|
106
|
+
state = "plain";
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return { markers, tables };
|
|
111
|
+
}
|
|
112
|
+
export function markerCommentLines(contents) {
|
|
113
|
+
return scanTomlLines(contents).markers;
|
|
114
|
+
}
|
|
48
115
|
/** Locate every BEGIN/END marker line, in order, with its parsed host id. */
|
|
49
116
|
function findMarkers(lines) {
|
|
50
117
|
const hits = [];
|
|
118
|
+
const comments = markerCommentLines(lines.join("\n"));
|
|
51
119
|
for (let i = 0; i < lines.length; i += 1) {
|
|
120
|
+
if (!comments.has(i))
|
|
121
|
+
continue;
|
|
52
122
|
const trimmed = lines[i].trim();
|
|
53
123
|
const begin = BEGIN_LINE_RE.exec(trimmed);
|
|
54
124
|
if (begin !== null) {
|
|
@@ -66,7 +136,7 @@ function findMarkers(lines) {
|
|
|
66
136
|
}
|
|
67
137
|
/**
|
|
68
138
|
* Pair BEGIN/END markers into well-formed blocks. Return the first orphan
|
|
69
|
-
* (BEGIN-without-END or END-without-BEGIN);
|
|
139
|
+
* (BEGIN-without-END or END-without-BEGIN); verification fails closed on either.
|
|
70
140
|
*/
|
|
71
141
|
function pairBlocks(lines) {
|
|
72
142
|
const markers = findMarkers(lines);
|
|
@@ -83,6 +153,8 @@ function pairBlocks(lines) {
|
|
|
83
153
|
// end
|
|
84
154
|
if (open === null)
|
|
85
155
|
return { orphan: "END-without-BEGIN" };
|
|
156
|
+
if (open.hostId !== marker.hostId)
|
|
157
|
+
return { orphan: "BEGIN-without-END" };
|
|
86
158
|
const body = validateBlockBody(lines.slice(open.index + 1, marker.index));
|
|
87
159
|
blocks.push({
|
|
88
160
|
hostId: open.hostId,
|
|
@@ -436,13 +508,13 @@ export function evaluateInstalled(contents, expectedCommand, opts) {
|
|
|
436
508
|
* The deletion range `[start, end)` is conservative: only the contiguous
|
|
437
509
|
* non-blank body after `[[hooks]]`, stopping at a blank line, table header, or
|
|
438
510
|
* managed marker so adjacent user content is preserved. A separate full-span
|
|
439
|
-
* scan
|
|
440
|
-
*
|
|
441
|
-
*
|
|
442
|
-
* caller's ownership checks.
|
|
511
|
+
* scan refuses any further TOML field before the next table, including quoted
|
|
512
|
+
* and dotted keys, so pruning cannot attach those fields to another table.
|
|
513
|
+
* `command` is decoded for the caller's ownership checks.
|
|
443
514
|
*/
|
|
444
515
|
export function findBareApprovalHookTables(contents) {
|
|
445
516
|
const lines = contents.split("\n").map((line) => line.replace(/\r$/, ""));
|
|
517
|
+
const tableLines = scanTomlLines(contents).tables;
|
|
446
518
|
const managed = new Set();
|
|
447
519
|
const paired = pairBlocks(lines);
|
|
448
520
|
if ("blocks" in paired) {
|
|
@@ -455,7 +527,7 @@ export function findBareApprovalHookTables(contents) {
|
|
|
455
527
|
for (let i = 0; i < lines.length; i += 1) {
|
|
456
528
|
if (managed.has(i))
|
|
457
529
|
continue;
|
|
458
|
-
if (!HOOKS_TABLE_RE.test(lines[i].trim()))
|
|
530
|
+
if (!tableLines.has(i) || !HOOKS_TABLE_RE.test(lines[i].trim()))
|
|
459
531
|
continue;
|
|
460
532
|
// Collect the contiguous table body.
|
|
461
533
|
let j = i + 1;
|
|
@@ -500,22 +572,16 @@ export function findBareApprovalHookTables(contents) {
|
|
|
500
572
|
}
|
|
501
573
|
j += 1;
|
|
502
574
|
}
|
|
503
|
-
//
|
|
504
|
-
//
|
|
505
|
-
//
|
|
506
|
-
|
|
507
|
-
// matcher is schema-valid but can disable the hook at runtime. Foreign keys
|
|
508
|
-
// and other TOML spellings are handled by whole-file schema validation and
|
|
509
|
-
// the parser-based installed checks, not by this prune heuristic.
|
|
510
|
-
let matcherBeyondBody = false;
|
|
575
|
+
// Blank lines and marker comments do not end a TOML table. Never leave any
|
|
576
|
+
// field behind to be rebound to a preceding table after pruning, regardless
|
|
577
|
+
// of the field's spelling or whether it is valid for a hook.
|
|
578
|
+
let fieldBeyondBody = false;
|
|
511
579
|
for (let k = j; k < lines.length; k += 1) {
|
|
512
580
|
const t = lines[k].trim();
|
|
513
|
-
|
|
514
|
-
// managed marker; a matcher past that point belongs to a different table.
|
|
515
|
-
if (t.startsWith("[") || BEGIN_LINE_RE.test(t) || END_LINE_RE.test(t))
|
|
581
|
+
if (tableLines.has(k))
|
|
516
582
|
break;
|
|
517
|
-
if (
|
|
518
|
-
|
|
583
|
+
if (t.length > 0 && !t.startsWith("#")) {
|
|
584
|
+
fieldBeyondBody = true;
|
|
519
585
|
break;
|
|
520
586
|
}
|
|
521
587
|
}
|
|
@@ -527,7 +593,7 @@ export function findBareApprovalHookTables(contents) {
|
|
|
527
593
|
commandDecoded.length > 0 &&
|
|
528
594
|
hasPreToolUseEvent &&
|
|
529
595
|
!hasMatcher &&
|
|
530
|
-
!
|
|
596
|
+
!fieldBeyondBody) {
|
|
531
597
|
ranges.push({ start: i, end: j, command: commandDecoded });
|
|
532
598
|
}
|
|
533
599
|
}
|
package/dist/version.js
CHANGED
package/docs/migration.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# Compatibility and upgrades
|
|
2
2
|
|
|
3
|
-
Plugin 2.
|
|
3
|
+
Plugin 2.5.1 certifies Kimi Code CLI 2.4.1 for all eight operations, alongside exact native-v2 versions `0.42.0`, `0.43.0`, `0.43.1`, `2.0.0`, `2.0.1`, `2.0.2`, `2.1.0`, `2.1.1`, `2.2.0`, `2.3.0`, `2.3.1`, `2.3.2`, `2.3.3`, and `2.4.0`. Later patches and minor releases are not accepted automatically. The npm distribution adds an installation channel; it does not change this compatibility table.
|
|
4
|
+
|
|
5
|
+
Plugin 2.5.1 also adds DeepSeek Harness as a third host with all seven operations and a DSH-specific bundle, data root, and managed hook id. Existing Claude Code and Codex certification, job stores, and host-scoped hooks are unchanged; no migration is required for those hosts. New DSH installations follow the [README DSH section](../README.md#install-in-deepseek-harness), including `/kimi-setup` on that host.
|
|
4
6
|
|
|
5
7
|
Explicitly pinned legacy-v1 binaries remain supported within `KIMI_TESTED_MINORS`, through 0.41.x, subject to each operation's minimum version. The [runtime table](../runtime/kimi-engine.ts) is the authority.
|
|
6
8
|
|
|
@@ -8,7 +10,7 @@ Use the [README installation and update steps](../README.md) for Claude Code or
|
|
|
8
10
|
|
|
9
11
|
## Plugin versions and upgrades
|
|
10
12
|
|
|
11
|
-
Plugin versions advance independently using ordinary SemVer and may deliberately align with a certified CLI release. Plugin 2.
|
|
13
|
+
Plugin versions advance independently using ordinary SemVer and may deliberately align with a certified CLI release. Plugin 2.5.1 certifies exact CLI 2.4.1; the nearby numbers do not imply version alignment. Published versions and tags are never reused. Every upstream patch requires its own certification. The native-v2 no-plan profile, plugin/marketplace IDs and existing job store are preserved.
|
|
12
14
|
|
|
13
15
|
## CLI 2.3.2, 2.3.3, 2.4.0 and 2.4.1 swarm activation
|
|
14
16
|
|
|
@@ -8,6 +8,10 @@ no separate CLI.
|
|
|
8
8
|
|
|
9
9
|
## Publishing status
|
|
10
10
|
|
|
11
|
+
Plugin **2.5.2** hardens setup recovery and DSH dependency ownership. Its real Kimi Code **2.4.1** smoke passed **24 tests and 167 assertions with no skips**; the exact-source audit passed **16 tests and 97 assertions**. Normal npm installation keeps DSH host services optional. DSH use requires explicitly patched host/profile dependencies and both installation audits described below. Exact CLI certification remains unchanged.
|
|
12
|
+
|
|
13
|
+
Plugin **2.5.1** adds DeepSeek Harness through the existing root npm package and its established OIDC workflow. [Release v2.5.1](https://github.com/linxule/kimi-plugin-cc/releases/tag/v2.5.1) is anchored at `afe68ee2f0e7744e1fc97eb0f1e4007585d969d0`; its [CI check](https://github.com/linxule/kimi-plugin-cc/actions/runs/41335810767) and [release-event publishing run](https://github.com/linxule/kimi-plugin-cc/actions/runs/41336273042) passed. The registry tarball has SHA-1 `f0e42febcb14082be6a654b9b0830885242fd92a`, contains 328 files, matches the CI artifact, and carries signed provenance (sigstore log index `3635166158`). A fresh registry installation into an isolated DSH profile composed all seven providers and booted the Web host. DSH users install with `dsh plugin --profile <name> add kimi-plugin-cc`; no second npm package or Trusted Publishing binding is required.
|
|
14
|
+
|
|
11
15
|
Plugin **2.4.5** certifies exact CLI **2.4.1** for all eight operations with host-preactivated swarm sessions. [Release v2.4.5](https://github.com/linxule/kimi-plugin-cc/releases/tag/v2.4.5) is anchored at `de8c195c2986443a088b674717133b164d2e4ef2`; its [CI check](https://github.com/linxule/kimi-plugin-cc/actions/runs/41226096281) and [release-event publishing run](https://github.com/linxule/kimi-plugin-cc/actions/runs/41226438326) passed. The registry tarball has SHA-1 `39f97a6de4b26ad51ac77305054682fcd5cd0164`, contains 233 files, and matches the CI artifact byte-for-byte. Fresh registry installs passed setup/check and unsupported-version refusal for both Claude Code and Codex, and both compiled mirrors are byte-identical to the release checkout. See the [certification record](./upstream-2.4.1-certification.md) and structured verification at `.claude/kimi-code-research/release-2.4.5/registry-verification.json`.
|
|
12
16
|
|
|
13
17
|
Plugin **2.4.2** adds durable interrupted-swarm recovery and Windows spawn diagnostics.
|
|
@@ -78,9 +82,11 @@ file at the tag, so fixes to `publish.yml` reach an existing tag only through
|
|
|
78
82
|
## Validation
|
|
79
83
|
|
|
80
84
|
Use the repository's normal version bump and generated-surface procedure in
|
|
81
|
-
AGENTS.md. Keep plugin and npm versions identical
|
|
82
|
-
|
|
83
|
-
|
|
85
|
+
AGENTS.md. Keep plugin and npm versions identical, and update
|
|
86
|
+
`DSH_PUBLISH_TIMESTAMP` with the actual publication time so the generated DSH
|
|
87
|
+
Discover index stays current. Certification for new Kimi Code versions still
|
|
88
|
+
requires the source audit and real-binary controls; adding a registry channel
|
|
89
|
+
does not certify another CLI version.
|
|
84
90
|
|
|
85
91
|
```sh
|
|
86
92
|
bun install --frozen-lockfile
|
|
@@ -88,6 +94,7 @@ bun run build
|
|
|
88
94
|
bun run generate:surfaces
|
|
89
95
|
# Review and stage generated distributions before the drift gate.
|
|
90
96
|
bun run check
|
|
97
|
+
bun run check:consumer-security
|
|
91
98
|
node scripts/check-package.mjs .tmp/npm
|
|
92
99
|
node scripts/check-dsh-package.mjs .tmp/dsh-npm
|
|
93
100
|
```
|
|
@@ -101,6 +108,60 @@ check installs that same root tarball into an isolated DSH home, verifies all
|
|
|
101
108
|
seven tools, and boots the Web host. Neither check invokes a model or reads the
|
|
102
109
|
maintainer's Kimi configuration.
|
|
103
110
|
|
|
111
|
+
The consumer-security gate installs the packed package into a fresh npm project
|
|
112
|
+
and audits the resolved production dependency graph. DSH services and its tool
|
|
113
|
+
adapter are optional peers supplied by the DSH host; ordinary npm installation
|
|
114
|
+
for Claude Code or Codex does not install the harness. Optional peers still
|
|
115
|
+
carry compatibility ranges when present. The gate runs in CI and release
|
|
116
|
+
validation and refuses high/critical advisories, failed audits, and incomplete
|
|
117
|
+
reports. The checkout's overrides do not constrain downstream npm resolution.
|
|
118
|
+
|
|
119
|
+
### Patched DSH host and profiles
|
|
120
|
+
|
|
121
|
+
DSH 0.2.1-rc.5 and 0.2.2-alpha.2 still pin vulnerable `zod` and `undici`
|
|
122
|
+
versions. See the [upstream dependency report](https://github.com/deepseek-ai/deepseek-harness/discussions/10847).
|
|
123
|
+
Use a patched DSH host installation with `zod >=4.6.6` and `undici >=8.12.2`.
|
|
124
|
+
This is an explicit installation requirement; the plugin does not rewrite the
|
|
125
|
+
host or profiles automatically. A profile override alone does not patch copies
|
|
126
|
+
inside a separately installed DSH CLI.
|
|
127
|
+
|
|
128
|
+
For example, create a dedicated npm host project (Node >=24.9), then use its
|
|
129
|
+
DSH binary for plugin installation and launch:
|
|
130
|
+
|
|
131
|
+
```sh
|
|
132
|
+
mkdir -p ~/.local/share/kimi-dsh-host
|
|
133
|
+
cd ~/.local/share/kimi-dsh-host
|
|
134
|
+
npm init -y
|
|
135
|
+
npm pkg set 'overrides.zod=^4.6.6' 'overrides.undici=^8.12.2'
|
|
136
|
+
npm install @deepseek-ai/dsh@0.2.1-rc.5
|
|
137
|
+
npm audit --omit=dev --audit-level=high
|
|
138
|
+
./node_modules/.bin/dsh plugin --profile web add kimi-plugin-cc
|
|
139
|
+
./node_modules/.bin/dsh plugin --profile web audit --prod --audit-level high
|
|
140
|
+
./node_modules/.bin/dsh web --no-open
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
The host project is separate from `$DSH_HOME/profiles/web`. Keep using that
|
|
144
|
+
project's DSH binary so the audited host is the one that runs. The commands
|
|
145
|
+
above install the published plugin; use a validated local tarball when testing
|
|
146
|
+
an unpublished change.
|
|
147
|
+
|
|
148
|
+
If an existing profile separately installs DSH packages, its owner must also
|
|
149
|
+
patch and audit that profile:
|
|
150
|
+
|
|
151
|
+
```sh
|
|
152
|
+
dsh plugin --profile web pkg set 'pnpm.overrides.zod=^4.6.6' 'pnpm.overrides.undici=^8.12.2'
|
|
153
|
+
dsh plugin --profile web install
|
|
154
|
+
dsh plugin --profile web audit --prod --audit-level high
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Replace `web` with the intended profile, and run these commands with the patched
|
|
158
|
+
host binary. Overrides affect dependency resolution and require application
|
|
159
|
+
checks. The DSH package gate creates a fresh host with the declared overrides,
|
|
160
|
+
audits both that host and the installed profile for high/critical advisories,
|
|
161
|
+
then verifies all seven tool compositions and Web boot using that same host.
|
|
162
|
+
These checks do not claim that every moderate/low advisory is fixed or that
|
|
163
|
+
upstream has published a patched release.
|
|
164
|
+
|
|
104
165
|
## First publication (completed bootstrap reference)
|
|
105
166
|
|
|
106
167
|
The package must first exist on npm before its package settings can be configured.
|
package/docs/safety.md
CHANGED
|
@@ -72,7 +72,7 @@ Key constraints (verified by [`runtime/hooks/managed-block.ts`](../runtime/hooks
|
|
|
72
72
|
1. **No `matcher` line.** kimi-code compiles the matcher field via `new RegExp(matcher)`. An empty matcher means "fire for every tool." `new RegExp("*")` throws, which kimi-code catches and treats as "no matcher" → silently disables the hook. The installer omits the field intentionally; the verifier rejects any block that contains a `matcher = ...` line.
|
|
73
73
|
2. **Absolute Node path.** kimi-code spawns hook commands via `/bin/sh -c "<command>"`. If we wrote bare `node`, the shell would resolve it against kimi-code's PATH at execution time. On a system where kimi-code launches from a GUI/LaunchAgent with a sanitized PATH (nvm/asdf/mise users), bare `node` would exit 127 → hook protocol treats non-{0,2} as **allow** → safety contract collapses with no user-visible signal.
|
|
74
74
|
3. **TOML basic-string escaping.** The command field is a TOML basic string. Quotes, backslashes, newlines, and control characters in the resolved hook path are escaped during install; paths containing characters that cannot be safely escaped (literal `"`, raw control chars) are rejected up front with `SETUP_HOOK_PATH_UNSAFE`.
|
|
75
|
-
4. **Exact marker grammar.** The verifier rejects
|
|
75
|
+
4. **Exact marker grammar.** The verifier rejects duplicate blocks and orphan or mismatched host markers. Install removes lexically proven unpaired marker comments across hosts, preserving surrounding content and all foreign hook tables, and warns. Text inside TOML strings is not a marker. The verifier remains fail-closed until repair and full validation succeed.
|
|
76
76
|
5. **Exact command equality, per host.** The verifier reconstructs the canonical command byte string from the current env and equality-checks the installed `command` (never a substring — a crafted `true # /path/to/approval-hook.js` runs only `true` and would auto-allow). This holds *per host id* (below): each host verifies its own block.
|
|
77
77
|
6. **Full-config parse and whole-hook-array validation.** The verifier parses the complete file with vendored `smol-toml@1.9.1` with upstream fixes included and no local JavaScript modifications (see `runtime/vendor/smol-toml/README.md`), before inspecting the managed block. It then applies upstream's strict config schema to every configured hook (`event`, optional string `matcher`, non-empty `command`, optional integer `timeout` 1–600, no extra fields). A malformed unrelated TOML value or one invalid foreign hook can make kimi-code discard enforcement; both therefore fail verification.
|
|
78
78
|
7. **Serialized, identity-bound setup mutations.** Install and uninstall hold a private `0o600` sibling lock across the complete read-modify-write transaction. The candidate lock is published atomically; lock reads are no-follow, nonblocking, regular-file-only, and capped at 4 KiB. Acquisition is bounded, live owners are never stolen, stale recovery is guarded by a nonrecursive recovery lease, and inode/token ownership is rechecked before config mutation or lock removal. Simultaneous Claude Code/Codex setup runs therefore cannot lose either host's block, and a replaced lock is never treated as ours. A newly created Kimi home is `0o700`; atomic config writes remain `0o600`.
|
|
@@ -128,6 +128,8 @@ uninstalls only its **own** block.
|
|
|
128
128
|
|
|
129
129
|
## DeepSeek Harness providers
|
|
130
130
|
|
|
131
|
+
DSH's host and any profile-local harness packages must use patched `zod >=4.6.6` and `undici >=8.12.2`. The plugin treats DSH services as optional host-provided peers; it does not install the harness for other hosts or rewrite an existing DSH installation. Audit the actual host installation as well as the profile. See [patched DSH setup](./registry-releases.md#patched-dsh-host-and-profiles).
|
|
132
|
+
|
|
131
133
|
The DSH bundle exposes the same seven operations as the other hosts: `kimi_ask`, `kimi_review`, `kimi_challenge`, `kimi_rescue`, `kimi_pursue`, `kimi_swarm`, and `kimi_swarm_write`. Each activation starts the existing companion through DSH's managed subprocess service and uses the same `kimi -p` transport, hook verification, exact-version certification, job store, and response or safety budgets. ACP is not used.
|
|
132
134
|
|
|
133
135
|
Run `/kimi-setup` explicitly before delegating. Installing or enabling the bundle does not modify Kimi configuration. DSH uses host id `dsh` and `$DSH_HOME/plugin-data/kimi-plugin-cc` unless an absolute data-root override selects another store. Its provider-owned environment clears other-host roots/data, hook/script overrides, trusted roots, and verification bypasses instead of inheriting them.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kimi-plugin-cc",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.2",
|
|
4
4
|
"description": "Kimi for Claude Code, Codex, and DeepSeek Harness: code questions, independent reviews, bounded fixes, autonomous goals, parallel tasks, and MCP tools through the local Kimi Code CLI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/dsh/index.js",
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"test": "bun test",
|
|
23
23
|
"smoke:real": "KIMI_PLUGIN_CC_SMOKE=1 bun test tests/runtime/real-binary-smoke.test.ts --path-ignore-patterns '**/worktrees/**'",
|
|
24
24
|
"check:package": "node scripts/check-package.mjs && node scripts/check-dsh-package.mjs",
|
|
25
|
+
"check:consumer-security": "node scripts/check-consumer-security.mjs",
|
|
25
26
|
"check:contracts": "node scripts/check-contract-size.mjs"
|
|
26
27
|
},
|
|
27
28
|
"devDependencies": {
|
|
@@ -31,16 +32,17 @@
|
|
|
31
32
|
"@deepseek-ai/dsh-session": "0.2.1-rc.5",
|
|
32
33
|
"@deepseek-ai/dsh-subagent": "0.2.1-rc.5",
|
|
33
34
|
"@deepseek-ai/dsh-subprocess": "0.2.1-rc.5",
|
|
35
|
+
"@deepseek-ai/dsh-system-prompt": "0.2.1-rc.5",
|
|
36
|
+
"@deepseek-ai/dsh-tool-subagent": "0.2.1-rc.5",
|
|
34
37
|
"@deepseek-ai/dsh-working-directory": "0.2.1-rc.5",
|
|
35
|
-
"@types/bun": "^1.4.
|
|
36
|
-
"@types/node": "^26.
|
|
38
|
+
"@types/bun": "^1.4.4",
|
|
39
|
+
"@types/node": "^26.6.6",
|
|
37
40
|
"smol-toml": "1.9.1",
|
|
38
41
|
"tsx": "^4.23.13",
|
|
39
42
|
"typescript": "^7.0.2"
|
|
40
43
|
},
|
|
41
44
|
"dependencies": {
|
|
42
45
|
"@deepseek-ai/dsh-brand": "0.2.1-rc.5",
|
|
43
|
-
"@deepseek-ai/dsh-tool-subagent": "0.2.1-rc.5",
|
|
44
46
|
"@deepseek-ai/schemastery": "3.18.5"
|
|
45
47
|
},
|
|
46
48
|
"peerDependencies": {
|
|
@@ -50,7 +52,38 @@
|
|
|
50
52
|
"@deepseek-ai/dsh-session": ">=0.2.1-rc.5 <0.3.0",
|
|
51
53
|
"@deepseek-ai/dsh-subagent": ">=0.2.1-rc.5 <0.3.0",
|
|
52
54
|
"@deepseek-ai/dsh-subprocess": ">=0.2.1-rc.5 <0.3.0",
|
|
53
|
-
"@deepseek-ai/dsh-
|
|
55
|
+
"@deepseek-ai/dsh-system-prompt": ">=0.2.1-rc.5 <0.3.0",
|
|
56
|
+
"@deepseek-ai/dsh-working-directory": ">=0.2.1-rc.5 <0.3.0",
|
|
57
|
+
"@deepseek-ai/dsh-tool-subagent": ">=0.2.1-rc.5 <0.3.0"
|
|
58
|
+
},
|
|
59
|
+
"peerDependenciesMeta": {
|
|
60
|
+
"@deepseek-ai/cordis": {
|
|
61
|
+
"optional": true
|
|
62
|
+
},
|
|
63
|
+
"@deepseek-ai/dsh-commands": {
|
|
64
|
+
"optional": true
|
|
65
|
+
},
|
|
66
|
+
"@deepseek-ai/dsh-llm": {
|
|
67
|
+
"optional": true
|
|
68
|
+
},
|
|
69
|
+
"@deepseek-ai/dsh-session": {
|
|
70
|
+
"optional": true
|
|
71
|
+
},
|
|
72
|
+
"@deepseek-ai/dsh-subagent": {
|
|
73
|
+
"optional": true
|
|
74
|
+
},
|
|
75
|
+
"@deepseek-ai/dsh-subprocess": {
|
|
76
|
+
"optional": true
|
|
77
|
+
},
|
|
78
|
+
"@deepseek-ai/dsh-system-prompt": {
|
|
79
|
+
"optional": true
|
|
80
|
+
},
|
|
81
|
+
"@deepseek-ai/dsh-working-directory": {
|
|
82
|
+
"optional": true
|
|
83
|
+
},
|
|
84
|
+
"@deepseek-ai/dsh-tool-subagent": {
|
|
85
|
+
"optional": true
|
|
86
|
+
}
|
|
54
87
|
},
|
|
55
88
|
"overrides": {
|
|
56
89
|
"zod": "^4.6.6",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kimi",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.2",
|
|
4
4
|
"description": "Kimi for Codex: code questions, independent reviews, bounded fixes, autonomous goals, parallel tasks, and MCP job controls through the local Kimi Code CLI.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "linxule"
|