@agentskit/doc-bridge 1.2.3 → 1.2.6

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,13 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.2.6
4
+
5
+ ### Patch Changes
6
+
7
+ - Restore the stable release security gate with patched Next.js and Sharp versions and pnpm 11-compatible dependency overrides.
8
+
9
+ ## 1.2.5
10
+
11
+ ### Patch Changes
12
+
13
+ - d2429f4: Add read-only MCP tool annotations, a public privacy policy, and deterministic MCPB packaging for local Claude Desktop installation.
14
+
15
+ ## 1.2.4
16
+
17
+ ### Patch Changes
18
+
19
+ - 8106e2e: Add the verified MCP Registry namespace to the published package metadata.
20
+
3
21
  ## 1.2.3
4
22
 
5
23
  ### Fixed
24
+
6
25
  - Publish path for seven-product `properties[]` contract and `formatEcosystemLlmsBlock` (v1.2.2 GitHub tag/package.json were misaligned; npm still on 1.2.1)
7
26
  - Marketplace Action dogfoods the local workspace package when run in this repository
8
27
  - Docs site `llms.txt` renders the shared seven-product mesh with role, maturity, machine index, and **(current)**
9
28
 
10
29
  ### Changed
30
+
11
31
  - Sync `ecosystem.json` upstream snapshot from AgentsKit hub main
12
32
 
13
33
  ## 1.2.1
@@ -26,6 +46,7 @@
26
46
 
27
47
  ### Features
28
48
 
49
+ - Add read-only MCP tool annotations, a public privacy policy, and validated MCPB packaging for local Claude Desktop installation.
29
50
  - Migrate the documentation portal dogfood from AgentsKit Chat 0.2 packages (`@agentskit/chat-protocol`, `@agentskit/chat-react`) to the consolidated 0.3.x surface (`@agentskit/chat/protocol`, `@agentskit/chat/react`) while keeping `@agentskit/chat` as the root package.
30
51
  - Replace the legacy Pages landing with a statically exported Fumadocs portal backed directly by the canonical `docs/**` corpus.
31
52
  - Generate `llms.txt`, `llms-full.txt`, raw Markdown, and a hash-verified deterministic AgentsKit Chat artifact from the repository's own Doc Bridge index.
package/CONTRIBUTING.md CHANGED
@@ -19,6 +19,7 @@ pnpm build
19
19
  - Add or update the smallest test that would fail if the behavior regresses.
20
20
  - Public contract changes must update the relevant docs under `docs/spec/` or `docs/schemas/`.
21
21
  - Dogfood AgentsKit Chat 0.4.x only: `@agentskit/chat`, `@agentskit/chat/protocol`, and `@agentskit/chat/react`. Never reintroduce `@agentskit/chat-protocol` or `@agentskit/chat-react` (`pnpm check:no-legacy-chat-imports`).
22
+ - Never commit API keys, tokens, secrets, or private repository content.
22
23
 
23
24
  ## Pull request checklist
24
25
 
@@ -38,3 +39,8 @@ pnpm release
38
39
  ```
39
40
 
40
41
  Do not publish from a dirty worktree.
42
+
43
+ Project decisions and maintainer responsibilities are documented in
44
+ [GOVERNANCE.md](GOVERNANCE.md). By participating, you agree to follow the
45
+ [Code of Conduct](CODE_OF_CONDUCT.md). Report vulnerabilities through the
46
+ private process in [SECURITY.md](SECURITY.md).
package/PRIVACY.md ADDED
@@ -0,0 +1,38 @@
1
+ # Privacy Policy
2
+
3
+ Effective date: July 31, 2026
4
+
5
+ This policy covers the local Doc Bridge MCP server distributed by AgentsKit, including its MCP Bundle for Claude Desktop.
6
+
7
+ ## Data the connector accesses
8
+
9
+ Doc Bridge accesses only the local project selected by the user through its `doc-bridge.config.json` file. Within that project, its MCP tools may read:
10
+
11
+ - the Doc Bridge configuration and deterministic index;
12
+ - documentation files explicitly included in that index;
13
+ - ownership and package metadata described by the configuration;
14
+ - `.agent-memory/**` and `.cursor/rules/*.mdc` when the user calls a memory-classification or draft-promotion tool.
15
+
16
+ Doc Bridge does not read Claude conversation history, Claude memory, browser data, credentials, or files outside the selected project boundary. Indexed-document reads reject paths and symbolic links that resolve outside that boundary.
17
+
18
+ ## Collection, use, and storage
19
+
20
+ The local MCP server uses project data only to return the handoff, search, documentation, gate, retrieval, memory-classification, draft, or topology result requested by the user. The eight MCP tools are read-only and do not modify project files or publish data.
21
+
22
+ AgentsKit does not collect or store MCP requests, tool results, project files, or usage telemetry. Source files and any existing Doc Bridge index remain on the user's device and under the user's control.
23
+
24
+ ## Sharing and external services
25
+
26
+ The local MCP server does not send project data to AgentsKit or another model provider and requires no API key. Claude Desktop receives tool results as the MCP client selected by the user; Anthropic's handling of data in Claude Desktop is governed by Anthropic's own terms and privacy policy.
27
+
28
+ Optional Doc Bridge RAG and chat integrations are not enabled or bundled by this local connector. If a user separately configures an external adapter or model provider, that provider's privacy terms apply to the data the user chooses to send through that separate integration.
29
+
30
+ ## Retention and deletion
31
+
32
+ AgentsKit retains no data from the local MCP server. Users control retention by managing their project files, Doc Bridge index, MCP client history, and installed MCP Bundle. Uninstalling the bundle removes the connector; deleting local project data remains the user's responsibility.
33
+
34
+ ## Contact
35
+
36
+ Questions about this policy can be filed at https://github.com/AgentsKit-io/doc-bridge/issues. Security concerns should follow the private reporting process at https://github.com/AgentsKit-io/doc-bridge/security/policy.
37
+
38
+ Material changes to this policy will be published in this repository with an updated effective date.
package/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  [![npm](https://img.shields.io/npm/v/@agentskit/doc-bridge?style=flat-square)](https://www.npmjs.com/package/@agentskit/doc-bridge)
4
4
  [![CI](https://img.shields.io/github/actions/workflow/status/AgentsKit-io/doc-bridge/ci.yml?branch=master&style=flat-square)](https://github.com/AgentsKit-io/doc-bridge/actions/workflows/ci.yml)
5
5
  [![Pages](https://img.shields.io/github/actions/workflow/status/AgentsKit-io/doc-bridge/pages.yml?branch=master&label=pages&style=flat-square)](https://doc-bridge.agentskit.io/)
6
+ [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/13872/baseline)](https://www.bestpractices.dev/projects/13872)
6
7
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](LICENSE)
7
8
  [![Node](https://img.shields.io/badge/node-%3E%3D22-339933?style=flat-square)](package.json)
8
9
  [![TypeScript](https://img.shields.io/badge/types-TypeScript-3178c6?style=flat-square)](dist/index.d.ts)
@@ -122,6 +123,21 @@ ak-docs mcp install --cursor # wires MCP into .cursor/mcp.json
122
123
 
123
124
  See [docs/getting-started.md](docs/getting-started.md), [docs/mcp.md](docs/mcp.md), and [docs/examples.md](docs/examples.md).
124
125
 
126
+ ## Claude Desktop MCP Bundle
127
+
128
+ Doc Bridge can be packaged as a local MCP Bundle for Claude Desktop. The bundle keeps the eight MCP tools read-only and asks the user to select the repository's `doc-bridge.config.json`; that file defines the project boundary Doc Bridge may read.
129
+
130
+ From a clean checkout:
131
+
132
+ ```bash
133
+ pnpm install --frozen-lockfile
134
+ pnpm mcpb:pack
135
+ ```
136
+
137
+ The command builds Doc Bridge, creates a production-only staging directory, validates the MCPB manifest, packs the extension, checks its file inventory, and writes the local artifact under `.mcpb-output/`. Generated bundles and staging directories are intentionally excluded from Git.
138
+
139
+ Current packaged compatibility is macOS. Other operating systems will be declared only after the exact bundle passes an independent installation test there.
140
+
125
141
  ## Why this exists
126
142
 
127
143
  | Pattern | Gap |
@@ -299,6 +315,10 @@ pnpm smoke:ollama # optional — skips if Ollama/peers unavailable
299
315
 
300
316
  **Landing:** https://doc-bridge.agentskit.io/
301
317
 
318
+ ## Privacy Policy
319
+
320
+ The local MCP server reads only the project selected through `doc-bridge.config.json`. It does not require an API key, send project data to AgentsKit, collect telemetry, or write project files through its eight MCP tools. See the complete [Privacy Policy](PRIVACY.md) for accessed paths, use, storage, sharing, retention, optional integrations, and contact information.
321
+
302
322
  ## Contributing
303
323
 
304
324
  Issues and PRs are welcome. Start here:
@@ -306,6 +326,7 @@ Issues and PRs are welcome. Start here:
306
326
  | Need | Doc |
307
327
  |------|-----|
308
328
  | Local setup, tests, release flow | [CONTRIBUTING.md](CONTRIBUTING.md) |
329
+ | Governance and maintainer responsibilities | [GOVERNANCE.md](GOVERNANCE.md) |
309
330
  | Vulnerability reports | [SECURITY.md](SECURITY.md) |
310
331
  | Community standards | [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) |
311
332
  | Release history | [CHANGELOG.md](CHANGELOG.md) |
package/SECURITY.md CHANGED
@@ -8,14 +8,19 @@ Security fixes target the latest stable `@agentskit/doc-bridge` release on npm.
8
8
 
9
9
  Please do not open a public issue for security reports.
10
10
 
11
- Email security reports to `security@agentskit.io` with:
11
+ Use [GitHub private vulnerability reporting](https://github.com/AgentsKit-io/doc-bridge/security/advisories/new) when possible. If that channel is unavailable, email `security@agentskit.io`.
12
+
13
+ Include:
12
14
 
13
15
  - affected version or commit
14
16
  - reproduction steps
15
17
  - impact
16
18
  - any suggested fix
17
19
 
18
- We will acknowledge reports as soon as practical and coordinate disclosure before publishing details.
20
+ Please do not include secrets or private repository content beyond what is
21
+ necessary to reproduce the issue. We aim to acknowledge a complete report
22
+ within 14 days, investigate it, and coordinate disclosure and remediation with
23
+ the reporter before publishing details.
19
24
 
20
25
  ## Security expectations
21
26
 
package/action.yml CHANGED
@@ -20,7 +20,7 @@ inputs:
20
20
  package-version:
21
21
  description: Exact @agentskit/doc-bridge npm version (kept in sync with this Action release)
22
22
  required: false
23
- default: '1.2.3'
23
+ default: '1.2.6'
24
24
 
25
25
  runs:
26
26
  using: composite
@@ -1347,7 +1347,7 @@ var buildLookup = (config, packages, corpus, indexOutFile, humanDocs = {}, root
1347
1347
  };
1348
1348
 
1349
1349
  // src/version.ts
1350
- var PACKAGE_VERSION = "1.2.3";
1350
+ var PACKAGE_VERSION = "1.2.6";
1351
1351
 
1352
1352
  // src/index-builder/capabilities.ts
1353
1353
  var renderCapabilitiesJson = (config, index, paths) => {
@@ -4080,7 +4080,9 @@ import { z as z6, ZodError } from "zod";
4080
4080
  var MCP_TOOLS = [
4081
4081
  {
4082
4082
  name: "handoff.resolve",
4083
- description: "Resolve a package or ownership id to an AgentHandoff.",
4083
+ title: "Resolve repository handoff",
4084
+ description: "Resolve a package or ownership id to its deterministic AgentHandoff.",
4085
+ annotations: { readOnlyHint: true },
4084
4086
  inputSchema: {
4085
4087
  type: "object",
4086
4088
  properties: { id: { type: "string" }, kind: { type: "string", enum: ["package", "ownership"] } },
@@ -4089,7 +4091,9 @@ var MCP_TOOLS = [
4089
4091
  },
4090
4092
  {
4091
4093
  name: "doc.search",
4092
- description: "Search the deterministic doc-bridge index.",
4094
+ title: "Search repository documentation",
4095
+ description: "Search the deterministic Doc Bridge index for repository documentation.",
4096
+ annotations: { readOnlyHint: true },
4093
4097
  inputSchema: {
4094
4098
  type: "object",
4095
4099
  properties: { term: { type: "string" }, limit: { type: "number" } },
@@ -4098,7 +4102,9 @@ var MCP_TOOLS = [
4098
4102
  },
4099
4103
  {
4100
4104
  name: "doc.get",
4101
- description: "Read an indexed agent documentation file by id or path.",
4105
+ title: "Read indexed documentation",
4106
+ description: "Read one indexed agent documentation file by id or indexed path.",
4107
+ annotations: { readOnlyHint: true },
4102
4108
  inputSchema: {
4103
4109
  type: "object",
4104
4110
  properties: { id: { type: "string" }, path: { type: "string" } }
@@ -4106,12 +4112,16 @@ var MCP_TOOLS = [
4106
4112
  },
4107
4113
  {
4108
4114
  name: "gate.status",
4109
- description: "Run the index-freshness gate.",
4115
+ title: "Check documentation gates",
4116
+ description: "Evaluate documentation gates without writing files.",
4117
+ annotations: { readOnlyHint: true },
4110
4118
  inputSchema: { type: "object", properties: {} }
4111
4119
  },
4112
4120
  {
4113
4121
  name: "retriever.query",
4114
- description: "Return local doc-bridge retriever chunks for a query.",
4122
+ title: "Retrieve documentation context",
4123
+ description: "Return relevant local Doc Bridge index chunks for a query.",
4124
+ annotations: { readOnlyHint: true },
4115
4125
  inputSchema: {
4116
4126
  type: "object",
4117
4127
  properties: { query: { type: "string" }, limit: { type: "number" } },
@@ -4120,17 +4130,23 @@ var MCP_TOOLS = [
4120
4130
  },
4121
4131
  {
4122
4132
  name: "memory.classify",
4123
- description: "Classify local memory candidates into agent/human/playbook/discard routes.",
4133
+ title: "Classify memory candidates",
4134
+ description: "Classify local memory candidates into agent, human, playbook, or discard routes.",
4135
+ annotations: { readOnlyHint: true },
4124
4136
  inputSchema: { type: "object", properties: {} }
4125
4137
  },
4126
4138
  {
4127
4139
  name: "memory.promoteDraft",
4128
- description: "Build a safe draft promotion body for local memory candidates.",
4140
+ title: "Draft memory promotion",
4141
+ description: "Build a reviewable draft promotion body from local memory candidates without publishing it.",
4142
+ annotations: { readOnlyHint: true },
4129
4143
  inputSchema: { type: "object", properties: {} }
4130
4144
  },
4131
4145
  {
4132
4146
  name: "registry.topology",
4133
- description: "Return the doc-curator registry topology.",
4147
+ title: "Inspect registry topology",
4148
+ description: "Return the static Doc Bridge curator and delegate topology.",
4149
+ annotations: { readOnlyHint: true },
4134
4150
  inputSchema: { type: "object", properties: {} }
4135
4151
  }
4136
4152
  ];
@@ -4247,13 +4263,14 @@ var handleMcpRequest = (ctx, request) => {
4247
4263
  if (request.method?.startsWith("notifications/")) return void 0;
4248
4264
  throw new Error(`Unsupported MCP method "${request.method ?? ""}"`);
4249
4265
  };
4250
- var writeFrame = (payload) => {
4266
+ var writeFrame = (payload, framing) => {
4251
4267
  const body = JSON.stringify(payload);
4252
- process.stdout.write(`Content-Length: ${Buffer.byteLength(body)}\r
4268
+ process.stdout.write(framing === "json-line" ? `${body}
4269
+ ` : `Content-Length: ${Buffer.byteLength(body)}\r
4253
4270
  \r
4254
4271
  ${body}`);
4255
4272
  };
4256
- var respond = (ctx, request) => {
4273
+ var respond = (ctx, request, framing) => {
4257
4274
  if (request.id === void 0) {
4258
4275
  try {
4259
4276
  handleMcpRequest(ctx, request);
@@ -4263,13 +4280,13 @@ var respond = (ctx, request) => {
4263
4280
  }
4264
4281
  try {
4265
4282
  const result = handleMcpRequest(ctx, request);
4266
- writeFrame({ jsonrpc: "2.0", id: request.id, result: result ?? {} });
4283
+ writeFrame({ jsonrpc: "2.0", id: request.id, result: result ?? {} }, framing);
4267
4284
  } catch (error) {
4268
4285
  writeFrame({
4269
4286
  jsonrpc: "2.0",
4270
4287
  id: request.id,
4271
4288
  error: { code: -32e3, message: error instanceof Error ? error.message : String(error) }
4272
- });
4289
+ }, framing);
4273
4290
  }
4274
4291
  };
4275
4292
  var startMcpStdioServer = (ctx) => {
@@ -4277,21 +4294,34 @@ var startMcpStdioServer = (ctx) => {
4277
4294
  process.stdin.on("data", (chunk) => {
4278
4295
  buffer = Buffer.concat([buffer, chunk]);
4279
4296
  while (true) {
4280
- const headerEnd = buffer.indexOf("\r\n\r\n");
4281
- if (headerEnd === -1) return;
4282
- const header = buffer.subarray(0, headerEnd).toString("utf8");
4283
- const match = /content-length:\s*(\d+)/i.exec(header);
4284
- if (!match?.[1]) {
4285
- buffer = buffer.subarray(headerEnd + 4);
4297
+ if (/^content-length:/i.test(buffer.subarray(0, Math.min(buffer.length, 32)).toString("utf8"))) {
4298
+ const headerEnd = buffer.indexOf("\r\n\r\n");
4299
+ if (headerEnd === -1) return;
4300
+ const header = buffer.subarray(0, headerEnd).toString("utf8");
4301
+ const match = /content-length:\s*(\d+)/i.exec(header);
4302
+ if (!match?.[1]) {
4303
+ buffer = buffer.subarray(headerEnd + 4);
4304
+ continue;
4305
+ }
4306
+ const length = Number(match[1]);
4307
+ const bodyStart = headerEnd + 4;
4308
+ const bodyEnd = bodyStart + length;
4309
+ if (buffer.length < bodyEnd) return;
4310
+ const raw2 = buffer.subarray(bodyStart, bodyEnd).toString("utf8");
4311
+ buffer = buffer.subarray(bodyEnd);
4312
+ respond(ctx, JSON.parse(raw2), "content-length");
4286
4313
  continue;
4287
4314
  }
4288
- const length = Number(match[1]);
4289
- const bodyStart = headerEnd + 4;
4290
- const bodyEnd = bodyStart + length;
4291
- if (buffer.length < bodyEnd) return;
4292
- const raw = buffer.subarray(bodyStart, bodyEnd).toString("utf8");
4293
- buffer = buffer.subarray(bodyEnd);
4294
- respond(ctx, JSON.parse(raw));
4315
+ const lineEnd = buffer.indexOf("\n");
4316
+ if (lineEnd === -1) return;
4317
+ const raw = buffer.subarray(0, lineEnd).toString("utf8").trim();
4318
+ buffer = buffer.subarray(lineEnd + 1);
4319
+ if (!raw) continue;
4320
+ try {
4321
+ respond(ctx, JSON.parse(raw), "json-line");
4322
+ } catch {
4323
+ writeFrame({ jsonrpc: "2.0", id: null, error: { code: -32700, message: "Parse error" } }, "json-line");
4324
+ }
4295
4325
  }
4296
4326
  });
4297
4327
  process.stdin.resume();