kith-coord 0.1.1 → 0.1.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/CHANGELOG.md +9 -0
- package/README.md +4 -12
- package/dist/cli/index.js +15 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/docs/client-validation.md +6 -0
- package/docs/integrations.md +2 -2
- package/docs/protocol/tools.v1.json +6 -2
- package/docs/protocol.md +6 -4
- package/docs/roadmap.md +1 -1
- package/docs/usage.md +9 -1
- package/package.json +4 -2
- package/server.json +52 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.2 — 2026-10-21
|
|
4
|
+
|
|
5
|
+
- Address AgentScrum’s first external Claude Code/OpenCode task trial: compact default MCP status (protocol 1.1; full contracts remain opt-in), omit unchanged contracts from edit reports, and return the current worktree-bearing agent record immediately.
|
|
6
|
+
- Clarify same-connection token omission and transcript limits, independent PR worktrees, retained worktrees/session completion, and integration target preservation. Record the maintainer-reported completed workflow and merged PRs without treating it as broad client certification.
|
|
7
|
+
|
|
8
|
+
- Add the official MCP Registry ownership marker and server manifest, with pinned npm launch and a required repository path.
|
|
9
|
+
- Clarify npm-first client onboarding and expose the public package version in the README. No new runtime dependencies or storage schema changes.
|
|
10
|
+
- Synchronize the MCP mutex test with command readiness and release, and assert lease renewal directly, avoiding fixed-duration races on busy CI runners. Installation examples pin this release.
|
|
11
|
+
|
|
3
12
|
## 0.1.1 — 2026-10-20
|
|
4
13
|
|
|
5
14
|
- Validate the real Cursor CLI model/editor/MCP workflow and missing-guard refusal, with redacted reusable proof.
|
package/README.md
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
6
|
<a href="https://github.com/connorhriley/kith/actions/workflows/ci.yml"><img src="https://github.com/connorhriley/kith/actions/workflows/ci.yml/badge.svg" alt="CI status"></a>
|
|
7
|
+
<a href="https://www.npmjs.com/package/kith-coord"><img src="https://img.shields.io/npm/v/kith-coord" alt="npm version"></a>
|
|
7
8
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-22C55E" alt="MIT license"></a>
|
|
8
9
|
</p>
|
|
9
10
|
|
|
@@ -40,8 +41,9 @@ Requires **Git 2.38+** and **Node.js 22.13+ on 22.x or Node.js 24+**. Full workf
|
|
|
40
41
|
Install the release, then configure your project:
|
|
41
42
|
|
|
42
43
|
```sh
|
|
43
|
-
npm install --global kith-coord@0.1.
|
|
44
|
+
npm install --global kith-coord@0.1.2
|
|
44
45
|
cd /path/to/your/project
|
|
46
|
+
kith init --dry-run
|
|
45
47
|
kith init
|
|
46
48
|
```
|
|
47
49
|
|
|
@@ -78,17 +80,7 @@ The implementation is in [examples/two-agents.mjs](examples/two-agents.mjs). Thi
|
|
|
78
80
|
|
|
79
81
|
### Connect your client
|
|
80
82
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
```sh
|
|
84
|
-
# From the Kith checkout
|
|
85
|
-
pnpm link --global
|
|
86
|
-
kith help
|
|
87
|
-
|
|
88
|
-
# From your target repository, preview the selected integrations first
|
|
89
|
-
kith init --dry-run
|
|
90
|
-
kith init
|
|
91
|
-
```
|
|
83
|
+
After the npm quick start above, restart your coding client in that project and approve its Kith MCP connection. Generated configuration uses the installed `kith` executable; no source checkout or `pnpm link` is needed. Review and commit the generated files before asking agents to integrate work.
|
|
92
84
|
|
|
93
85
|
Default setup installs MCP configuration for Claude, Codex and Cursor plus agent instructions, without adding hooks or package-manager shims. Review and commit the generated configuration before starting work; integration requires a clean target checkout. Restart your client with `kith` on its `PATH`. To select clients, use `--mcp-only --only claude,codex,agents`. Existing hooks are preserved; review warnings if they require an inherited session. See [hook setup](docs/integrations.md) if you need them.
|
|
94
86
|
|
package/dist/cli/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
// src/version.ts
|
|
4
|
-
var KITH_VERSION = "0.1.
|
|
5
|
-
var KITH_PROTOCOL_VERSION = "1.
|
|
4
|
+
var KITH_VERSION = "0.1.2";
|
|
5
|
+
var KITH_PROTOCOL_VERSION = "1.1.0";
|
|
6
6
|
|
|
7
7
|
// src/cli/setup-ledger.ts
|
|
8
8
|
import fs2 from "fs";
|
|
@@ -2589,6 +2589,7 @@ var DependencyAndContractEngine = class {
|
|
|
2589
2589
|
}
|
|
2590
2590
|
for (const exp of analysis.exports) {
|
|
2591
2591
|
const prev = existingBySymbol.get(exp.symbolName);
|
|
2592
|
+
if (prev && prev.kind === exp.kind && prev.signature === exp.signature && prev.ast_hash === exp.astHash && prev.params_fingerprint === exp.paramsFingerprint && prev.doc_comment === exp.docComment) continue;
|
|
2592
2593
|
const isBreaking = prev !== void 0 && prev.ast_hash !== exp.astHash;
|
|
2593
2594
|
if (isBreaking && prev) {
|
|
2594
2595
|
changedSymbols.push({
|
|
@@ -3921,7 +3922,7 @@ function createKithMcpServer(repoRoot = process.cwd()) {
|
|
|
3921
3922
|
const server = new McpServer({
|
|
3922
3923
|
name: "kith-coordinator",
|
|
3923
3924
|
version: KITH_VERSION
|
|
3924
|
-
}, { instructions: "Kith coordinates work claims, isolated worktrees, local resources and verified integration for cooperating coding agents. State stays local; no hosted service or model API key is required. Recommended workflow: one isolated worktree per parallel agent. Call kith_begin_work with isolateWorktree:true and explicit scopeGlobs; edit only the returned worktreePath, call kith_record_file_edit, run literal argv with kith_run_with_mutex, and finish with kith_complete_work plus a project verificationCmd. Heartbeat before the session expires. " + (process.env.KITH_AGENT_ID ? `This server shares a session with CLI/hooks. Use agentId '${process.env.KITH_AGENT_ID}'. Its inherited capability is handled internally; do not request or log it.` : "Start with kith_begin_work or kith_start_session and a unique agentId. This connection retains its granted capability.
|
|
3925
|
+
}, { instructions: "Kith coordinates work claims, isolated worktrees, local resources and verified integration for cooperating coding agents. State stays local; no hosted service or model API key is required. Recommended workflow: one isolated worktree per parallel agent. Call kith_begin_work with isolateWorktree:true and explicit scopeGlobs; edit only the returned worktreePath, call kith_record_file_edit, run literal argv with kith_run_with_mutex, and finish with kith_complete_work plus a project verificationCmd. Heartbeat before the session expires. " + (process.env.KITH_AGENT_ID ? `This server shares a session with CLI/hooks. Use agentId '${process.env.KITH_AGENT_ID}'. Its inherited capability is handled internally; do not request or log it.` : "Start with kith_begin_work or kith_start_session and a unique agentId. This connection retains its granted capability. Omit sessionToken on subsequent calls on this connection; only another connection needs it to resume that ID. Initial grant/resume replies contain the token and client transcripts may record it. Keep transcripts private.") });
|
|
3925
3926
|
const tokenFor = (args) => args.sessionToken ?? (process.env.KITH_AGENT_ID === args.agentId ? process.env.KITH_SESSION_TOKEN : void 0);
|
|
3926
3927
|
const owned = /* @__PURE__ */ new Set();
|
|
3927
3928
|
const register = (args) => {
|
|
@@ -4006,7 +4007,7 @@ function createKithMcpServer(repoRoot = process.cwd()) {
|
|
|
4006
4007
|
const contracts = engine.depGraph.listContracts().slice(0, 30);
|
|
4007
4008
|
return formatReply(args.agentId, {
|
|
4008
4009
|
ok: intentRes.ok,
|
|
4009
|
-
agent:
|
|
4010
|
+
agent: engine.fencing.getAgent(args.agentId),
|
|
4010
4011
|
sessionToken: reg.sessionToken,
|
|
4011
4012
|
fencingToken: intentRes.fencingToken,
|
|
4012
4013
|
task: intentRes.task,
|
|
@@ -4163,12 +4164,18 @@ function createKithMcpServer(repoRoot = process.cwd()) {
|
|
|
4163
4164
|
"Retrieve coordination state, FIFO waiters and guarded commands, plus worktree paths, actual branches, dirty-file overlaps, commit age and ahead/behind against the current integration target HEAD. Normal engine startup may reap expired ownership.",
|
|
4164
4165
|
{
|
|
4165
4166
|
agentId: z.string().optional(),
|
|
4166
|
-
sessionToken: z.string().optional()
|
|
4167
|
+
sessionToken: z.string().optional(),
|
|
4168
|
+
includeContracts: z.boolean().optional().describe("Include the full contract registry. Default false keeps frequent status polls compact; contractCount always reports its size.")
|
|
4167
4169
|
},
|
|
4168
4170
|
async (args) => {
|
|
4169
4171
|
if (args.agentId) authorize({ ...args, agentId: args.agentId });
|
|
4170
4172
|
const state = engine.getStatus();
|
|
4171
|
-
return formatReply(args.agentId,
|
|
4173
|
+
return formatReply(args.agentId, {
|
|
4174
|
+
...state,
|
|
4175
|
+
contracts: args.includeContracts ? state.contracts : [],
|
|
4176
|
+
contractCount: state.contracts.length,
|
|
4177
|
+
contractsIncluded: args.includeContracts ?? false
|
|
4178
|
+
});
|
|
4172
4179
|
}
|
|
4173
4180
|
);
|
|
4174
4181
|
server.tool(
|
|
@@ -4188,7 +4195,7 @@ function createKithMcpServer(repoRoot = process.cwd()) {
|
|
|
4188
4195
|
sessionToken: z.string().optional(),
|
|
4189
4196
|
taskId: z.string().optional(),
|
|
4190
4197
|
fencingToken: z.number().optional(),
|
|
4191
|
-
mergeBranch: z.string().optional().describe("
|
|
4198
|
+
mergeBranch: z.string().optional().describe("Source branch to integrate, not the destination. Defaults to the registered agent branch; destination is the selected repository checkout current branch. Omit for claims-only work without a registered branch."),
|
|
4192
4199
|
verificationCmd: z.string().optional().describe('Command to run in speculative merge tree (e.g. "npm run typecheck")')
|
|
4193
4200
|
},
|
|
4194
4201
|
async (args) => {
|
|
@@ -4556,7 +4563,7 @@ Use Kith MCP to claim work, isolate changes in worktrees, share local resources
|
|
|
4556
4563
|
4. Renew idle sessions with \`kith_heartbeat\` before their lease expires (every two minutes for the default five-minute lease; sooner for a shorter lease). Inspect \`kith_get_status\`.
|
|
4557
4564
|
5. Complete with \`kith_complete_work\` and a project-specific \`verificationCmd\`. Failed verification keeps the integration target unchanged. Successful worktrees are retained for inspection.
|
|
4558
4565
|
|
|
4559
|
-
The MCP connection retains its capability;
|
|
4566
|
+
The MCP connection retains its capability; omit \`sessionToken\` on subsequent calls on that connection. Initial grant/resume replies contain the token, so keep client transcripts private. Do not copy tokens into shell commands or public reports. A new connection needs a valid capability to resume an existing ID. Locks coordinate cooperating writers; hooks are not an OS security sandbox.
|
|
4560
4567
|
|
|
4561
4568
|
If Claude/Cursor edit hooks or CLI commands are also enabled, launch the client from a persistent shell after \`eval "$(kith session start --agent <id> --owner-pid "$$" --shell)"\`. CLI, hooks and MCP must inherit the same KITH_AGENT_ID/KITH_SESSION_TOKEN and use the same agent ID. Separate stateless shell calls do not preserve these exports or the owning shell. MCP-only setup skips new native edit hooks and preserves existing ones.
|
|
4562
4569
|
<!-- KITH:END -->`;
|