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 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.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
- Link the built CLI, then switch to the repository you want to coordinate:
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.1";
5
- var KITH_PROTOCOL_VERSION = "1.0.0";
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. Another connection needs the session token to resume that ID. Keep tokens private.") });
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: reg.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, state);
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("If work was done on a worktree/branch, run Speculative Merge Train to integrate it"),
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; do not copy or log session tokens. A new connection needs a valid capability to resume an existing ID. Locks coordinate cooperating writers; hooks are not an OS security sandbox.
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 -->`;