@cavelang/cli 0.29.1 → 0.31.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.
Files changed (83) hide show
  1. package/README.md +15 -1
  2. package/dist/internal/act/engine.d.ts +5 -1
  3. package/dist/internal/act/engine.d.ts.map +1 -1
  4. package/dist/internal/act/engine.js +39 -32
  5. package/dist/internal/act/engine.js.map +1 -1
  6. package/dist/internal/automate/engine.d.ts +4 -0
  7. package/dist/internal/automate/engine.d.ts.map +1 -1
  8. package/dist/internal/automate/engine.js +31 -25
  9. package/dist/internal/automate/engine.js.map +1 -1
  10. package/dist/internal/automate/main.d.ts.map +1 -1
  11. package/dist/internal/automate/main.js +7 -4
  12. package/dist/internal/automate/main.js.map +1 -1
  13. package/dist/internal/eval/loop.d.ts +1 -0
  14. package/dist/internal/eval/loop.d.ts.map +1 -1
  15. package/dist/internal/eval/loop.js +2 -1
  16. package/dist/internal/eval/loop.js.map +1 -1
  17. package/dist/internal/eval/main.d.ts.map +1 -1
  18. package/dist/internal/eval/main.js +2 -1
  19. package/dist/internal/eval/main.js.map +1 -1
  20. package/dist/internal/eval/run.d.ts +2 -0
  21. package/dist/internal/eval/run.d.ts.map +1 -1
  22. package/dist/internal/eval/run.js +6 -4
  23. package/dist/internal/eval/run.js.map +1 -1
  24. package/dist/internal/ingest/index.d.ts +1 -1
  25. package/dist/internal/ingest/index.d.ts.map +1 -1
  26. package/dist/internal/ingest/index.js.map +1 -1
  27. package/dist/internal/ingest/main.d.ts.map +1 -1
  28. package/dist/internal/ingest/main.js +4 -2
  29. package/dist/internal/ingest/main.js.map +1 -1
  30. package/dist/internal/ingest/run.d.ts +8 -1
  31. package/dist/internal/ingest/run.d.ts.map +1 -1
  32. package/dist/internal/ingest/run.js +17 -34
  33. package/dist/internal/ingest/run.js.map +1 -1
  34. package/dist/internal/loop/index.d.ts +2 -0
  35. package/dist/internal/loop/index.d.ts.map +1 -1
  36. package/dist/internal/loop/index.js +1 -0
  37. package/dist/internal/loop/index.js.map +1 -1
  38. package/dist/internal/loop/llm.d.ts +6 -0
  39. package/dist/internal/loop/llm.d.ts.map +1 -1
  40. package/dist/internal/loop/llm.js +22 -49
  41. package/dist/internal/loop/llm.js.map +1 -1
  42. package/dist/internal/loop/process-worker.d.ts +3 -0
  43. package/dist/internal/loop/process-worker.d.ts.map +1 -0
  44. package/dist/internal/loop/process-worker.js +32 -0
  45. package/dist/internal/loop/process-worker.js.map +1 -0
  46. package/dist/internal/loop/process.d.ts +61 -0
  47. package/dist/internal/loop/process.d.ts.map +1 -0
  48. package/dist/internal/loop/process.js +268 -0
  49. package/dist/internal/loop/process.js.map +1 -0
  50. package/dist/internal/mcp/guide.d.ts +12 -0
  51. package/dist/internal/mcp/guide.d.ts.map +1 -0
  52. package/dist/internal/mcp/guide.js +56 -0
  53. package/dist/internal/mcp/guide.js.map +1 -0
  54. package/dist/internal/mcp/index.d.ts +2 -2
  55. package/dist/internal/mcp/index.d.ts.map +1 -1
  56. package/dist/internal/mcp/index.js +2 -2
  57. package/dist/internal/mcp/index.js.map +1 -1
  58. package/dist/internal/mcp/server.d.ts +36 -36
  59. package/dist/internal/mcp/server.d.ts.map +1 -1
  60. package/dist/internal/mcp/server.js +90 -141
  61. package/dist/internal/mcp/server.js.map +1 -1
  62. package/dist/internal/mcp/tools.d.ts +5 -1
  63. package/dist/internal/mcp/tools.d.ts.map +1 -1
  64. package/dist/internal/mcp/tools.js +26 -1
  65. package/dist/internal/mcp/tools.js.map +1 -1
  66. package/dist/internal/view/scope.d.ts +19 -4
  67. package/dist/internal/view/scope.d.ts.map +1 -1
  68. package/dist/internal/view/scope.js +115 -31
  69. package/dist/internal/view/scope.js.map +1 -1
  70. package/dist/src/cli.d.ts +6 -2
  71. package/dist/src/cli.d.ts.map +1 -1
  72. package/dist/src/cli.js +12 -5
  73. package/dist/src/cli.js.map +1 -1
  74. package/dist/src/dispatch.d.ts.map +1 -1
  75. package/dist/src/dispatch.js +2 -2
  76. package/dist/src/dispatch.js.map +1 -1
  77. package/dist/src/doctor.d.ts.map +1 -1
  78. package/dist/src/doctor.js +19 -7
  79. package/dist/src/doctor.js.map +1 -1
  80. package/package.json +22 -21
  81. package/src/cli.ts +18 -5
  82. package/src/dispatch.ts +4 -2
  83. package/src/doctor.ts +18 -7
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACpI,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EACnE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EACtC,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAC/D,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EACxD,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EACnE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EACtC,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
@@ -6,7 +6,7 @@
6
6
  * { "command": "cave", "args": ["mcp", "--db", "knowledge.db"] }
7
7
  * ```
8
8
  *
9
- * Tools: cave_add, cave_query, cave_fuse, cave_search, cave_about,
9
+ * Tools: cave_help, cave_add, cave_query, cave_fuse, cave_search, cave_about,
10
10
  * cave_neighbors, cave_reconstruct, cave_derive, cave_export, cave_lint —
11
11
  * plus one generated `act_<name>` tool per action declared in the store
12
12
  * (spec §25.5), the governed write vocabulary. `cave_fuse` and
@@ -17,7 +17,7 @@
17
17
  * `--tools <list>` narrow the served surface — the minimum viable agent
18
18
  * permission boundary.
19
19
  */
20
- export { agentSource, createServer, serve, instructions, instructionsFor, protocolVersion, serverInfo, specCard } from "./server.js";
20
+ export { agentSource, createServer, serve, instructions, instructionsFor, protocolVersion, protocolVersions, serverInfo, specCard } from "./server.js";
21
21
  export { runMcp } from "./main.js";
22
22
  export { actionTools, actToolName, actToolPrefix, allowsActions, permissions, scopedActionTools, scopedTools, tools } from "./tools.js";
23
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEpI,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EACnE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EACtC,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAC/D,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EACxD,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EACnE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EACtC,MAAM,YAAY,CAAA"}
@@ -1,24 +1,20 @@
1
1
  /**
2
- * MCP server over stdio — newline-delimited JSON-RPC 2.0.
2
+ * CAVE's tool surface on the official MCP TypeScript SDK v2.
3
3
  *
4
- * Implements the slice of the Model Context Protocol a tools-only server
5
- * needs: `initialize` / `notifications/initialized`, `ping`, `tools/list`
6
- * and `tools/call`. The dispatcher is a pure function from message to
7
- * optional response, so it is testable without a process or a socket;
8
- * `serve` wires it to stdin/stdout.
9
- *
10
- * Hand-rolled rather than pulling in an SDK: the protocol surface here is
11
- * ~150 lines, the repo is otherwise dependency-free beyond
12
- * `@prelude/parser`, and `@prelude/jsonrpc` targets WebSocket-style
13
- * transports with numeric-only ids (MCP ids may be strings).
4
+ * `createToolSurface` keeps domain behavior transport-free and testable;
5
+ * `createServer` binds it to the SDK's low-level Server; `serve` delegates
6
+ * stdio framing, lifecycle, protocol-era detection, and legacy fallback to
7
+ * `serveStdio`.
14
8
  */
9
+ import { Server } from '@modelcontextprotocol/server';
15
10
  import type { Store } from '@cavelang/store';
16
11
  import { type Scope, type Tool } from './tools.ts';
17
12
  export type ServerOptions = Scope & {
18
13
  /**
19
14
  * Actor provenance stamp for appends (spec §9.5), without the `src:`
20
- * prefix. Default: `agent/<client-name>` from the initialize handshake,
21
- * plain `agent` before or without one. `false` disables stamping.
15
+ * prefix. Default: `agent/<client-name>` from the initialize handshake or
16
+ * modern request envelope, plain `agent` without one. `false` disables
17
+ * stamping.
22
18
  */
23
19
  readonly source?: string | false;
24
20
  /** Out-of-band hook command templates for action tools (spec §25.4). */
@@ -32,8 +28,10 @@ export type ServerOptions = Scope & {
32
28
  * plain `agent` when no usable name is known (spec §9.5).
33
29
  */
34
30
  export declare const agentSource: (clientName: undefined | string) => string;
35
- /** The single MCP protocol revision this server implements. */
36
- export declare const protocolVersion = "2025-06-18";
31
+ /** Legacy initialize-era revisions supported by the official MCP SDK. */
32
+ export declare const protocolVersions: string[];
33
+ /** The preferred MCP protocol revision offered during version negotiation. */
34
+ export declare const protocolVersion = "2025-11-25";
37
35
  export declare const serverInfo: {
38
36
  readonly name: "cave";
39
37
  readonly version: string;
@@ -60,33 +58,35 @@ export declare const instructionsFor: (served: readonly Tool[], options?: {
60
58
  * how to write CAVE without reading the full specification.
61
59
  */
62
60
  export declare const instructions: string;
63
- type Id = null | string | number;
64
- type Response = {
65
- jsonrpc: '2.0';
66
- id: null | Id;
67
- result?: unknown;
68
- error?: {
69
- code: number;
70
- message: string;
61
+ export type ListedTool = {
62
+ readonly name: string;
63
+ readonly description: string;
64
+ readonly inputSchema: Tool['inputSchema'];
65
+ readonly annotations?: {
66
+ readonly readOnlyHint: true;
71
67
  };
72
68
  };
73
- type Reply = Response | Response[];
69
+ export type ToolCallResult = {
70
+ content: [{
71
+ type: 'text';
72
+ text: string;
73
+ }];
74
+ readonly isError?: true;
75
+ };
74
76
  /**
75
- * @returns pure MCP dispatcher over an open store: message in, response
76
- * out (`undefined` for notifications). The client name captured from
77
- * `initialize` becomes the default `agent/<name>` provenance stamp on
78
- * appends (spec §9.5). Serves the scoped tool surface — tools outside the
79
- * scope are absent from `tools/list` and unknown to `tools/call`; throws
80
- * when the scope names an unknown tool or serves none.
77
+ * Pure CAVE tool surface beneath the MCP SDK. Action declarations are read on
78
+ * every list/call, so actions added mid-session appear without reconnecting.
81
79
  */
82
- export declare const createServer: (store: Store, options?: ServerOptions) => {
83
- handle: (message: unknown) => undefined | Reply;
80
+ export declare const createToolSurface: (store: Store, options?: ServerOptions) => {
81
+ list: () => ListedTool[];
82
+ call: (name: string, args: Record<string, unknown>, clientName?: string) => ToolCallResult;
84
83
  };
85
84
  /**
86
- * Serves MCP over newline-delimited JSON-RPC on the given streams until
87
- * the input closes. Protocol traffic only on `output` — logs belong on
88
- * stderr.
85
+ * Builds an official SDK server over CAVE's scoped, dynamic tool surface.
86
+ * Protocol negotiation, validation, lifecycle, ping, and error envelopes are
87
+ * owned by `@modelcontextprotocol/server`.
89
88
  */
89
+ export declare const createServer: (store: Store, options?: ServerOptions) => Server;
90
+ /** Serves both the 2026 MCP era and legacy initialize-era clients on stdio. */
90
91
  export declare const serve: (store: Store, input: NodeJS.ReadableStream, output: NodeJS.WritableStream, options?: ServerOptions) => Promise<void>;
91
- export {};
92
92
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAuE,KAAK,KAAK,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAA;AAEvH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG;IAClC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAChC,wEAAwE;IACxE,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACjD,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAC9B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,YAAY,SAAS,GAAG,MAAM,KAAG,MAO5D,CAAA;AAED,+DAA+D;AAC/D,eAAO,MAAM,eAAe,eAAe,CAAA;AAE3C,eAAO,MAAM,UAAU;;;CAGb,CAAA;AAEV;;;GAGG;AACH,eAAO,MAAM,QAAQ,i5BAgB4C,CAAA;AAEjE;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,SAAS,IAAI,EAAE,EAAE,UAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,KAAG,MAiC9F,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAA4C,CAAA;AAErE,KAAK,EAAE,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;AAShC,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,KAAK,CAAA;IACd,EAAE,EAAE,IAAI,GAAG,EAAE,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC1C,CAAA;AAWD,KAAK,KAAK,GAAG,QAAQ,GAAG,QAAQ,EAAE,CAAA;AAElC;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,EAAE,UAAS,aAAkB;sBAyF3C,OAAO,KAAG,SAAS,GAAG,KAAK;CAUrD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAChB,OAAO,KAAK,EACZ,OAAO,MAAM,CAAC,cAAc,EAC5B,QAAQ,MAAM,CAAC,cAAc,EAC7B,UAAS,aAAkB,KAC1B,OAAO,CAAC,IAAI,CA8Bd,CAAA"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAEc,MAAM,EAC1B,MAAM,8BAA8B,CAAA;AAGrC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAuE,KAAK,KAAK,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAA;AAEvH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAChC,wEAAwE;IACxE,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACjD,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAC9B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,YAAY,SAAS,GAAG,MAAM,KAAG,MAO5D,CAAA;AAED,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,UAAmC,CAAA;AAEhE,8EAA8E;AAC9E,eAAO,MAAM,eAAe,eAA0B,CAAA;AAEtD,eAAO,MAAM,UAAU;;;CAGb,CAAA;AAEV;;;GAGG;AACH,eAAO,MAAM,QAAQ,i5BAgB4C,CAAA;AAEjE;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,SAAS,IAAI,EAAE,EAAE,UAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,KAAG,MAkC9F,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAA4C,CAAA;AAErE,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE;QAAE,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAA;KAAE,CAAA;CACvD,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAA;CACxB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,KAAK,EAAE,UAAS,aAAkB;gBAMxD,UAAU,EAAE;iBAQrB,MAAM,QACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eAChB,MAAM,KAClB,cAAc;CAmBlB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,EAAE,UAAS,aAAkB,KAAG,MAqBxE,CAAA;AAED,+EAA+E;AAC/E,eAAO,MAAM,KAAK,GAChB,OAAO,KAAK,EACZ,OAAO,MAAM,CAAC,cAAc,EAC5B,QAAQ,MAAM,CAAC,cAAc,EAC7B,UAAS,aAAkB,KAC1B,OAAO,CAAC,IAAI,CAgCd,CAAA"}
@@ -1,18 +1,13 @@
1
1
  /**
2
- * MCP server over stdio — newline-delimited JSON-RPC 2.0.
2
+ * CAVE's tool surface on the official MCP TypeScript SDK v2.
3
3
  *
4
- * Implements the slice of the Model Context Protocol a tools-only server
5
- * needs: `initialize` / `notifications/initialized`, `ping`, `tools/list`
6
- * and `tools/call`. The dispatcher is a pure function from message to
7
- * optional response, so it is testable without a process or a socket;
8
- * `serve` wires it to stdin/stdout.
9
- *
10
- * Hand-rolled rather than pulling in an SDK: the protocol surface here is
11
- * ~150 lines, the repo is otherwise dependency-free beyond
12
- * `@prelude/parser`, and `@prelude/jsonrpc` targets WebSocket-style
13
- * transports with numeric-only ids (MCP ids may be strings).
4
+ * `createToolSurface` keeps domain behavior transport-free and testable;
5
+ * `createServer` binds it to the SDK's low-level Server; `serve` delegates
6
+ * stdio framing, lifecycle, protocol-era detection, and legacy fallback to
7
+ * `serveStdio`.
14
8
  */
15
- import { createInterface } from 'node:readline';
9
+ import { CLIENT_INFO_META_KEY, LATEST_PROTOCOL_VERSION, ProtocolError, ProtocolErrorCode, Server, SUPPORTED_PROTOCOL_VERSIONS } from '@modelcontextprotocol/server';
10
+ import { serveStdio, StdioServerTransport } from '@modelcontextprotocol/server/stdio';
16
11
  import { Version } from '@cavelang/core';
17
12
  import { actToolPrefix, allowsActions, scopedActionTools, scopedTools, tools } from "./tools.js";
18
13
  /**
@@ -28,8 +23,10 @@ export const agentSource = (clientName) => {
28
23
  .replace(/[^a-z0-9._/-]/g, '');
29
24
  return name === '' ? 'agent' : `agent/${name}`;
30
25
  };
31
- /** The single MCP protocol revision this server implements. */
32
- export const protocolVersion = '2025-06-18';
26
+ /** Legacy initialize-era revisions supported by the official MCP SDK. */
27
+ export const protocolVersions = [...SUPPORTED_PROTOCOL_VERSIONS];
28
+ /** The preferred MCP protocol revision offered during version negotiation. */
29
+ export const protocolVersion = LATEST_PROTOCOL_VERSION;
33
30
  export const serverInfo = {
34
31
  name: 'cave',
35
32
  version: Version.current()
@@ -67,6 +64,7 @@ export const instructionsFor = (served, options = {}) => {
67
64
  const has = (name) => served.some(tool => tool.name === name);
68
65
  const explore = ['cave_about', 'cave_neighbors'].filter(has);
69
66
  const clauses = [
67
+ ...has('cave_help') ? ['consult cave_help for version-matched usage guidance when needed'] : [],
70
68
  ...has('cave_add') ?
71
69
  [`extract knowledge with one claim per line via cave_add${has('cave_lint') ? ' (validate with cave_lint first)' : ''}`] :
72
70
  has('cave_lint') ? ['validate CAVE text with cave_lint'] : [],
@@ -103,149 +101,100 @@ export const instructionsFor = (served, options = {}) => {
103
101
  * how to write CAVE without reading the full specification.
104
102
  */
105
103
  export const instructions = instructionsFor(tools, { actions: true });
106
- const result = (id, value) => ({ jsonrpc: '2.0', id, result: value });
107
- const failure = (id, code, message) => ({ jsonrpc: '2.0', id, error: { code, message } });
108
- const isId = (value) => value === null || typeof value === 'string' || typeof value === 'number';
109
104
  /**
110
- * @returns pure MCP dispatcher over an open store: message in, response
111
- * out (`undefined` for notifications). The client name captured from
112
- * `initialize` becomes the default `agent/<name>` provenance stamp on
113
- * appends (spec §9.5). Serves the scoped tool surface — tools outside the
114
- * scope are absent from `tools/list` and unknown to `tools/call`; throws
115
- * when the scope names an unknown tool or serves none.
105
+ * Pure CAVE tool surface beneath the MCP SDK. Action declarations are read on
106
+ * every list/call, so actions added mid-session appear without reconnecting.
116
107
  */
117
- export const createServer = (store, options = {}) => {
108
+ export const createToolSurface = (store, options = {}) => {
118
109
  const served = scopedTools(options);
119
110
  const servedByName = new Map(served.map(tool => [tool.name, tool]));
120
- // Action tools are generated from the store's current declarations per
121
- // request (spec §25.5) — an action declared mid-session appears in the
122
- // next tools/list without reconnecting.
123
111
  const actionsPossible = allowsActions(options);
124
112
  const actServed = () => actionsPossible ? scopedActionTools(store, options) : [];
125
- const servedInstructions = instructionsFor(served, { actions: actionsPossible });
126
- let clientName;
127
- const source = () => options.source === false ? undefined : options.source ?? agentSource(clientName);
128
- const dispatch = (message) => {
129
- if (typeof message !== 'object' || message === null || Array.isArray(message)) {
130
- return failure(null, -32600, 'Invalid request');
113
+ const list = () => [...served, ...actServed()].map(tool => ({
114
+ name: tool.name,
115
+ description: tool.description,
116
+ inputSchema: tool.inputSchema,
117
+ ...(tool.permission === 'record' || tool.permission === 'action' ?
118
+ {} : { annotations: { readOnlyHint: true } })
119
+ }));
120
+ const call = (name, args, clientName) => {
121
+ const tool = servedByName.get(name) ??
122
+ (name.startsWith(actToolPrefix) ? actServed().find(candidate => candidate.name === name) : undefined);
123
+ if (tool === undefined) {
124
+ throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Unknown tool: ${name}`);
131
125
  }
132
- const { jsonrpc, id, method, params } = message;
133
- const hasId = Object.hasOwn(message, 'id');
134
- if (jsonrpc !== '2.0' || typeof method !== 'string' || (hasId && !isId(id))) {
135
- return failure(isId(id) ? id : null, -32600, 'Invalid request');
126
+ try {
127
+ const stamp = options.source === false ? undefined : options.source ?? agentSource(clientName);
128
+ const text = tool.run(store, args, {
129
+ ...stamp === undefined ? {} : { source: stamp },
130
+ ...options.hooks === undefined ? {} : { hooks: options.hooks }
131
+ });
132
+ return { content: [{ type: 'text', text }] };
136
133
  }
137
- if (!hasId) {
138
- // Notifications (notifications/initialized, notifications/cancelled, …)
139
- // require no response.
140
- return undefined;
134
+ catch (error) {
135
+ const text = error instanceof Error ? error.message : String(error);
136
+ return { content: [{ type: 'text', text }], isError: true };
141
137
  }
142
- const requestId = id;
143
- switch (method) {
144
- case 'initialize': {
145
- const requested = params?.protocolVersion;
146
- if (requested !== protocolVersion) {
147
- return failure(requestId, -32602, `Unsupported protocol version: ${String(requested)}; supported: ${protocolVersion}`);
148
- }
149
- const name = params?.clientInfo?.name;
150
- if (typeof name === 'string') {
151
- clientName = name;
152
- }
153
- return result(requestId, {
154
- protocolVersion,
155
- capabilities: { tools: {} },
156
- serverInfo,
157
- instructions: servedInstructions
158
- });
159
- }
160
- case 'ping':
161
- return result(requestId, {});
162
- case 'tools/list':
163
- return result(requestId, {
164
- tools: [...served, ...actServed()].map(tool => ({
165
- name: tool.name,
166
- description: tool.description,
167
- inputSchema: tool.inputSchema,
168
- ...(tool.permission === 'record' || tool.permission === 'action' ?
169
- {} : { annotations: { readOnlyHint: true } })
170
- }))
171
- });
172
- case 'tools/call': {
173
- const call = (params ?? {});
174
- const tool = typeof call.name === 'string' ?
175
- servedByName.get(call.name) ??
176
- (call.name.startsWith(actToolPrefix) ? actServed().find(candidate => candidate.name === call.name) : undefined) :
177
- undefined;
178
- if (tool === undefined) {
179
- return failure(requestId, -32602, `Unknown tool: ${String(call.name)}`);
180
- }
181
- const args = typeof call.arguments === 'object' && call.arguments !== null ?
182
- call.arguments :
183
- {};
184
- try {
185
- const stamp = source();
186
- const text = tool.run(store, args, {
187
- ...stamp === undefined ? {} : { source: stamp },
188
- ...options.hooks === undefined ? {} : { hooks: options.hooks }
189
- });
190
- return result(requestId, { content: [{ type: 'text', text }] });
191
- }
192
- catch (error) {
193
- const text = error instanceof Error ? error.message : String(error);
194
- return result(requestId, { content: [{ type: 'text', text }], isError: true });
195
- }
196
- }
197
- default:
198
- return failure(requestId, -32601, `Method not found: ${method}`);
199
- }
200
- };
201
- const handle = (message) => {
202
- if (!Array.isArray(message))
203
- return dispatch(message);
204
- if (message.length === 0)
205
- return failure(null, -32600, 'Invalid request');
206
- const responses = message.flatMap(item => {
207
- const response = dispatch(item);
208
- return response === undefined ? [] : [response];
209
- });
210
- return responses.length === 0 ? undefined : responses;
211
138
  };
212
- return { handle };
139
+ return { list, call };
213
140
  };
214
141
  /**
215
- * Serves MCP over newline-delimited JSON-RPC on the given streams until
216
- * the input closes. Protocol traffic only on `output` — logs belong on
217
- * stderr.
142
+ * Builds an official SDK server over CAVE's scoped, dynamic tool surface.
143
+ * Protocol negotiation, validation, lifecycle, ping, and error envelopes are
144
+ * owned by `@modelcontextprotocol/server`.
218
145
  */
146
+ export const createServer = (store, options = {}) => {
147
+ const served = scopedTools(options);
148
+ const actionsPossible = allowsActions(options);
149
+ const surface = createToolSurface(store, options);
150
+ const server = new Server(serverInfo, {
151
+ capabilities: { tools: {} },
152
+ instructions: instructionsFor(served, { actions: actionsPossible })
153
+ });
154
+ const clientName = (context) => {
155
+ const envelope = context.mcpReq.envelope;
156
+ const modern = envelope?.[CLIENT_INFO_META_KEY];
157
+ return typeof modern?.name === 'string' ? modern.name : server.getClientVersion()?.name;
158
+ };
159
+ server.setRequestHandler('tools/list', async () => ({ tools: surface.list() }));
160
+ server.setRequestHandler('tools/call', async (request, context) => server.projectCallToolResult(surface.call(request.params.name, request.params.arguments ?? {}, clientName(context)), undefined));
161
+ return server;
162
+ };
163
+ /** Serves both the 2026 MCP era and legacy initialize-era clients on stdio. */
219
164
  export const serve = (store, input, output, options = {}) => {
220
- const server = createServer(store, options);
221
- return new Promise(resolve => {
222
- const lines = createInterface({ input });
223
- const abort = () => lines.close();
224
- options.signal?.addEventListener('abort', abort, { once: true });
225
- lines.on('line', line => {
226
- if (line.trim() === '') {
165
+ const transport = new StdioServerTransport(input, output);
166
+ const handle = serveStdio(() => createServer(store, options), { transport });
167
+ return new Promise((resolve, reject) => {
168
+ let finished = false;
169
+ const cleanup = () => {
170
+ input.removeListener('end', close);
171
+ input.removeListener('close', close);
172
+ input.removeListener('error', fail);
173
+ options.signal?.removeEventListener('abort', close);
174
+ };
175
+ const done = () => {
176
+ if (finished)
227
177
  return;
228
- }
229
- let message;
230
- try {
231
- message = JSON.parse(line);
232
- }
233
- catch {
234
- output.write(`${JSON.stringify(failure(null, -32700, 'Parse error'))}\n`);
235
- return;
236
- }
237
- const response = server.handle(message);
238
- if (response !== undefined) {
239
- output.write(`${JSON.stringify(response)}\n`);
240
- }
241
- });
242
- lines.on('close', () => {
243
- options.signal?.removeEventListener('abort', abort);
178
+ finished = true;
179
+ cleanup();
244
180
  resolve();
245
- });
246
- if (options.signal?.aborted === true) {
247
- lines.close();
248
- }
181
+ };
182
+ const fail = (error) => {
183
+ if (finished)
184
+ return;
185
+ finished = true;
186
+ cleanup();
187
+ reject(error);
188
+ };
189
+ const close = () => {
190
+ void handle.close().then(done, fail);
191
+ };
192
+ input.once('end', close);
193
+ input.once('close', close);
194
+ input.once('error', fail);
195
+ options.signal?.addEventListener('abort', close, { once: true });
196
+ if (options.signal?.aborted === true)
197
+ close();
249
198
  });
250
199
  };
251
200
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,KAAK,EAAyB,MAAM,YAAY,CAAA;AAevH;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,UAA8B,EAAU,EAAE;IACpE,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;SAC5B,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;IAChC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAA;AAChD,CAAC,CAAA;AAED,+DAA+D;AAC/D,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAA;AAE3C,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;CAClB,CAAA;AAEV;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;iEAgByC,CAAA;AAEjE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAuB,EAAE,UAAiC,EAAE,EAAU,EAAE;IACtG,MAAM,GAAG,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAC9E,MAAM,OAAO,GAAG,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG;QACd,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;YAClB,CAAC,yDAAyD,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACzH,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,CAAC,EAAE;QAC/D,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,sDAAsD,CAAC,CAAC,CAAC,CAAC,EAAE;QACpF,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,oGAAoG,CAAC,CAAC,CAAC,CAAC,EAAE;QACjI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QACpE,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,gGAAgG,CAAC,CAAC,CAAC,CAAC,EAAE;QACpI,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,uFAAuF,CAAC,CAAC,CAAC,CAAC,EAAE;KACvH,CAAA;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAG;QACf,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;iBACjI,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;QACrB,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACnB,6EAA6E;gBAC7E,yEAAyE;gBACzE,qCAAqC;SACtC,CAAC,CAAC,CAAC,EAAE;QACN,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC;YAC5B,uEAAuE;gBACvE,yEAAyE;gBACzE,kEAAkE;gBAClE,gDAAgD,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB,iBAAiB;SACnH,CAAC,CAAC,CAAC,EAAE;QACN,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;YACjH,EAAE,CAAC,CAAC,CAAC,CAAC,qEAAqE,CAAC,CAAC;KAChF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACZ,OAAO,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,QAAQ,EAAE,CAAA;AAClE,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AAkBrE,MAAM,MAAM,GAAG,CAAC,EAAM,EAAE,KAAc,EAAY,EAAE,CAClD,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;AAEzC,MAAM,OAAO,GAAG,CAAC,EAAa,EAAE,IAAY,EAAE,OAAe,EAAY,EAAE,CACzE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;AAEpD,MAAM,IAAI,GAAG,CAAC,KAAc,EAAe,EAAE,CAC3C,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAA;AAI1E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,UAAyB,EAAE,EAAE,EAAE;IACxE,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IACnC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IACnE,uEAAuE;IACvE,uEAAuE;IACvE,wCAAwC;IACxC,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,GAAW,EAAE,CAC7B,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1D,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAA;IAChF,IAAI,UAA8B,CAAA;IAClC,MAAM,MAAM,GAAG,GAAuB,EAAE,CACtC,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,CAAA;IAClF,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAwB,EAAE;QAC1D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9E,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAA;QACjD,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAkB,CAAA;QAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAC1C,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC5E,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAA;QACjE,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,wEAAwE;YACxE,uBAAuB;YACvB,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,MAAM,SAAS,GAAG,EAAQ,CAAA;QAC1B,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,SAAS,GAAI,MAAoD,EAAE,eAAe,CAAA;gBACxF,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;oBAClC,OAAO,OAAO,CACZ,SAAS,EACT,CAAC,KAAK,EACN,iCAAiC,MAAM,CAAC,SAAS,CAAC,gBAAgB,eAAe,EAAE,CACpF,CAAA;gBACH,CAAC;gBACD,MAAM,IAAI,GAAI,MAA0D,EAAE,UAAU,EAAE,IAAI,CAAA;gBAC1F,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7B,UAAU,GAAG,IAAI,CAAA;gBACnB,CAAC;gBACD,OAAO,MAAM,CAAC,SAAS,EAAE;oBACvB,eAAe;oBACf,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;oBAC3B,UAAU;oBACV,YAAY,EAAE,kBAAkB;iBACjC,CAAC,CAAA;YACJ,CAAC;YACD,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;YAC9B,KAAK,YAAY;gBACf,OAAO,MAAM,CAAC,SAAS,EAAE;oBACvB,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAC9C,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC;4BAChE,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC;qBAChD,CAAC,CAAC;iBACJ,CAAC,CAAA;YACJ,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAA4C,CAAA;gBACtE,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;oBAC1C,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;wBACzB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;oBACnH,SAAS,CAAA;gBACX,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,iBAAiB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACzE,CAAC;gBACD,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC;oBAC1E,IAAI,CAAC,SAAoC,CAAC,CAAC;oBAC3C,EAAE,CAAA;gBACJ,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAA;oBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE;wBACjC,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE;wBAC/C,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;qBAC/D,CAAC,CAAA;oBACF,OAAO,MAAM,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;gBACjE,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,IAAI,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;oBACnE,OAAO,MAAM,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;gBAChF,CAAC;YACH,CAAC;YACD;gBACE,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,qBAAqB,MAAM,EAAE,CAAC,CAAA;QACpE,CAAC;IACH,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,CAAC,OAAgB,EAAqB,EAAE;QACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAA;QACrD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAA;QACzE,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC/B,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;QACF,OAAO,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;IACvD,CAAC,CAAA;IACD,OAAO,EAAE,MAAM,EAAE,CAAA;AACnB,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,KAAY,EACZ,KAA4B,EAC5B,MAA6B,EAC7B,UAAyB,EAAE,EACZ,EAAE;IACjB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC3C,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QACxC,MAAM,KAAK,GAAG,GAAS,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QACvC,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAChE,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;YACtB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACvB,OAAM;YACR,CAAC;YACD,IAAI,OAAgB,CAAA;YACpB,IAAI,CAAC;gBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,CAAA;gBACzE,OAAM;YACR,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC/C,CAAC;QACH,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACrB,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YACnD,OAAO,EAAE,CAAA;QACX,CAAC,CAAC,CAAA;QACF,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;YACrC,KAAK,CAAC,KAAK,EAAE,CAAA;QACf,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@
4
4
  *
5
5
  * | Tool | Purpose |
6
6
  * |---|---|
7
+ * | `cave_help` | version-matched usage guidance for agents |
7
8
  * | `cave_add` | append CAVE text (extraction output) to the store |
8
9
  * | `cave_query` | run a CAVE-Q pattern (spec §12) |
9
10
  * | `cave_fuse` | Bayesian fusion of numeric estimates (§10.1) — named computation |
@@ -23,6 +24,7 @@
23
24
  * the minimum viable agent permission boundary.
24
25
  */
25
26
  import type { Store } from '@cavelang/store';
27
+ import type { Tool as McpTool } from '@modelcontextprotocol/server';
26
28
  /** Per-connection state the server threads into tool calls. */
27
29
  export type ToolContext = {
28
30
  /**
@@ -40,7 +42,9 @@ export type Tool = {
40
42
  readonly description: string;
41
43
  /** Evaluation is ephemeral, recording is durable, and action may cause effects. */
42
44
  readonly permission: Permission;
43
- readonly inputSchema: object;
45
+ readonly inputSchema: McpTool['inputSchema'] & {
46
+ readonly properties: NonNullable<McpTool['inputSchema']['properties']>;
47
+ };
44
48
  readonly run: (store: Store, args: Record<string, unknown>, context: ToolContext) => string;
45
49
  };
46
50
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAO5C,+DAA+D;AAC/D,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,wEAAwE;IACxE,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAClD,CAAA;AAED,eAAO,MAAM,WAAW,mDAAoD,CAAA;AAC5E,MAAM,MAAM,UAAU,GAAG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAA;AAEnD,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,MAAM,CAAA;CAC5F,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,KAAK,GAAG;IAClB,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;IAC5C;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC,CAAA;AA6GD,eAAO,MAAM,KAAK,EAAE,SAAS,IAAI,EA6UhC,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CACE,CAAA;AAE/C,+DAA+D;AAC/D,eAAO,MAAM,aAAa,SAAS,CAAA;AAEnC;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,KAAG,MACmB,CAAA;AAkDhE;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,KAAG,IAAI,EAY9C,CAAA;AAiBD,eAAO,MAAM,aAAa,GAAI,QAAO,KAAU,KAAG,OAEuC,CAAA;AAEzF,eAAO,MAAM,iBAAiB,GAAI,OAAO,KAAK,EAAE,QAAO,KAAU,KAAG,IAAI,EAGlE,CAAA;AAEN;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GAAI,QAAO,KAAU,KAAG,SAAS,IAAI,EAkB5D,CAAA"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAM5C,OAAO,KAAK,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAGnE,+DAA+D;AAC/D,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,wEAAwE;IACxE,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAClD,CAAA;AAED,eAAO,MAAM,WAAW,mDAAoD,CAAA;AAC5E,MAAM,MAAM,UAAU,GAAG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAA;AAEnD,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG;QAC7C,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,CAAA;KACvE,CAAA;IACD,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,MAAM,CAAA;CAC5F,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,KAAK,GAAG;IAClB,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;IAC5C;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC,CAAA;AA6GD,eAAO,MAAM,KAAK,EAAE,SAAS,IAAI,EAoWhC,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CACE,CAAA;AAE/C,+DAA+D;AAC/D,eAAO,MAAM,aAAa,SAAS,CAAA;AAEnC;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,KAAG,MACmB,CAAA;AAkDhE;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,KAAG,IAAI,EAY9C,CAAA;AAiBD,eAAO,MAAM,aAAa,GAAI,QAAO,KAAU,KAAG,OAEuC,CAAA;AAEzF,eAAO,MAAM,iBAAiB,GAAI,OAAO,KAAK,EAAE,QAAO,KAAU,KAAG,IAAI,EAGlE,CAAA;AAEN;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GAAI,QAAO,KAAU,KAAG,SAAS,IAAI,EAkB5D,CAAA"}
@@ -4,6 +4,7 @@
4
4
  *
5
5
  * | Tool | Purpose |
6
6
  * |---|---|
7
+ * | `cave_help` | version-matched usage guidance for agents |
7
8
  * | `cave_add` | append CAVE text (extraction output) to the store |
8
9
  * | `cave_query` | run a CAVE-Q pattern (spec §12) |
9
10
  * | `cave_fuse` | Bayesian fusion of numeric estimates (§10.1) — named computation |
@@ -31,6 +32,7 @@ import { estimateOf, fuse } from '@cavelang/fusion';
31
32
  import { derive } from '@cavelang/cli/rules';
32
33
  import { reconstruct, heuristicPolicy, sqliteStore } from '@cavelang/cli/loop';
33
34
  import { act, listActions } from '@cavelang/cli/act';
35
+ import { guideFor, guideTopics } from "./guide.js";
34
36
  export const permissions = ['read', 'evaluate', 'record', 'action'];
35
37
  const text = (value, name) => {
36
38
  if (typeof value !== 'string' || value === '') {
@@ -131,6 +133,29 @@ const selectFuseClaims = (store, args) => {
131
133
  return result.claims.map(entry => entry.claim);
132
134
  };
133
135
  export const tools = [
136
+ {
137
+ name: 'cave_help',
138
+ description: 'Version-matched CAVE usage guidance for agents. Call before the first CAVE task ' +
139
+ 'or when choosing how to write, find, revise, or safely handle knowledge. This reads no user data.',
140
+ permission: 'read',
141
+ inputSchema: {
142
+ type: 'object',
143
+ properties: {
144
+ topic: {
145
+ type: 'string',
146
+ enum: [...guideTopics],
147
+ description: 'guide topic (default: overview)'
148
+ }
149
+ }
150
+ },
151
+ run: (_store, args) => {
152
+ const topic = args['topic'] ?? 'overview';
153
+ if (typeof topic !== 'string' || !guideTopics.includes(topic)) {
154
+ throw new Error(`topic must be one of ${guideTopics.join(', ')}`);
155
+ }
156
+ return guideFor(topic);
157
+ }
158
+ },
134
159
  {
135
160
  name: 'cave_add',
136
161
  description: 'Append CAVE claims to the knowledge database. Input is CAVE text ' +
@@ -429,7 +454,7 @@ export const tools = [
429
454
  type: 'object',
430
455
  properties: {
431
456
  current: { type: 'boolean' },
432
- maxSensitivity: { type: 'string', enum: Sensitivity.levels }
457
+ maxSensitivity: { type: 'string', enum: [...Sensitivity.levels] }
433
458
  }
434
459
  },
435
460
  run: (store, args) => {