functionalscript 0.39.0 → 0.41.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 (95) hide show
  1. package/README.md +1 -1
  2. package/fjs/bnf/descent/module.f.d.ts +43 -2
  3. package/fjs/bnf/descent/module.f.js +37 -12
  4. package/fjs/bnf/descent/proof.f.d.ts +1 -0
  5. package/fjs/bnf/descent/proof.f.js +73 -32
  6. package/fjs/bnf/ll1/module.f.js +2 -2
  7. package/fjs/cas/evo/module.f.d.ts +28 -8
  8. package/fjs/cas/evo/module.f.js +43 -10
  9. package/fjs/cas/evo/proof.f.d.ts +4 -0
  10. package/fjs/cas/evo/proof.f.js +82 -1
  11. package/fjs/ci/config/module.f.d.ts +10 -7
  12. package/fjs/ci/config/module.f.js +23 -8
  13. package/fjs/ci/module.f.js +12 -5
  14. package/fjs/ci/nix/module.f.d.ts +61 -0
  15. package/fjs/ci/nix/module.f.js +92 -0
  16. package/fjs/ci/nix/proof.f.d.ts +23 -0
  17. package/fjs/ci/nix/proof.f.js +109 -0
  18. package/fjs/ci/node/module.f.d.ts +23 -1
  19. package/fjs/ci/node/module.f.js +47 -3
  20. package/fjs/ci/node/proof.f.d.ts +3 -0
  21. package/fjs/ci/node/proof.f.js +17 -0
  22. package/fjs/ci/proof.f.d.ts +2 -0
  23. package/fjs/ci/proof.f.js +47 -9
  24. package/fjs/dev/module.f.d.ts +1 -0
  25. package/fjs/dev/module.f.js +13 -2
  26. package/fjs/dev/update/module.f.d.ts +11 -0
  27. package/fjs/dev/update/module.f.js +20 -0
  28. package/fjs/dev/update/proof.f.d.ts +7 -0
  29. package/fjs/dev/update/proof.f.js +35 -0
  30. package/fjs/djs/ast/module.f.d.ts +47 -0
  31. package/fjs/djs/ast/module.f.js +9 -0
  32. package/fjs/djs/tokenizer/module.f.js +2 -2
  33. package/fjs/djs/tokenizer/proof.f.d.ts +1 -0
  34. package/fjs/djs/tokenizer/proof.f.js +70 -16
  35. package/fjs/effects/module.f.d.ts +20 -0
  36. package/fjs/effects/module.f.js +25 -1
  37. package/fjs/effects/node/module.d.ts +3 -3
  38. package/fjs/effects/node/module.f.d.ts +17 -7
  39. package/fjs/effects/node/module.f.js +22 -0
  40. package/fjs/effects/node/module.js +12 -12
  41. package/fjs/effects/node/proof.f.d.ts +1 -0
  42. package/fjs/effects/node/proof.f.js +14 -1
  43. package/fjs/effects/node/virtual/module.f.js +1 -1
  44. package/fjs/effects/proof.f.d.ts +5 -0
  45. package/fjs/effects/proof.f.js +22 -0
  46. package/fjs/emergent_testing/all.test.js +2 -1
  47. package/fjs/emergent_testing/module.f.d.ts +3 -3
  48. package/fjs/emergent_testing/module.f.js +8 -10
  49. package/fjs/emergent_testing/proof.f.js +2 -2
  50. package/fjs/emergent_testing/scenarios/thenable.pass.js +1 -1
  51. package/fjs/fsc/module.f.js +4 -4
  52. package/fjs/fsm/module.f.js +1 -1
  53. package/fjs/js/tokenizer/module.f.d.ts +1 -0
  54. package/fjs/js/tokenizer/module.f.js +13 -6
  55. package/fjs/{cas/mcp → mcp/cas}/module.f.d.ts +3 -25
  56. package/fjs/{cas/mcp → mcp/cas}/module.f.js +18 -58
  57. package/fjs/mcp/evo/module.f.d.ts +32 -0
  58. package/fjs/{cas/evo/mcp → mcp/evo}/module.f.js +19 -14
  59. package/fjs/{cas/evo/mcp → mcp/evo}/proof.f.d.ts +1 -0
  60. package/fjs/{cas/evo/mcp → mcp/evo}/proof.f.js +23 -7
  61. package/fjs/mcp/module.f.d.ts +54 -237
  62. package/fjs/mcp/module.f.js +55 -258
  63. package/fjs/mcp/proof.f.d.ts +43 -32
  64. package/fjs/mcp/proof.f.js +508 -200
  65. package/fjs/media/nix/module.f.d.ts +30 -0
  66. package/fjs/media/nix/module.f.js +166 -0
  67. package/fjs/media/nix/proof.f.d.ts +32 -0
  68. package/fjs/media/nix/proof.f.js +127 -0
  69. package/fjs/module.f.js +1 -1
  70. package/fjs/protocol/json_rpc/module.f.d.ts +114 -0
  71. package/fjs/{media/json/rpc → protocol/json_rpc}/module.f.js +3 -3
  72. package/fjs/{media/json/rpc → protocol/json_rpc}/proof.f.js +3 -3
  73. package/fjs/protocol/mcp/module.f.d.ts +239 -0
  74. package/fjs/protocol/mcp/module.f.js +272 -0
  75. package/fjs/protocol/mcp/proof.f.d.ts +34 -0
  76. package/fjs/protocol/mcp/proof.f.js +208 -0
  77. package/fjs/{mcp → protocol/mcp}/stdio/module.f.d.ts +5 -5
  78. package/fjs/{mcp → protocol/mcp}/stdio/module.f.js +11 -11
  79. package/fjs/{mcp → protocol/mcp}/stdio/proof.f.js +9 -9
  80. package/fjs/types/range_map/module.f.d.ts +14 -13
  81. package/fjs/types/range_map/module.f.js +18 -13
  82. package/fjs/types/range_map/proof.f.js +26 -39
  83. package/fjs/types/range_set/module.f.d.ts +5 -0
  84. package/fjs/types/range_set/module.f.js +16 -0
  85. package/fjs/types/range_set/proof.f.d.ts +1 -0
  86. package/fjs/types/range_set/proof.f.js +19 -0
  87. package/package.json +5 -5
  88. package/fjs/cas/evo/mcp/module.f.d.ts +0 -27
  89. package/fjs/cas/mcp/proof.f.d.ts +0 -45
  90. package/fjs/cas/mcp/proof.f.js +0 -545
  91. package/fjs/ci/playwright/module.f.d.ts +0 -2
  92. package/fjs/ci/playwright/module.f.js +0 -25
  93. package/fjs/media/json/rpc/module.f.d.ts +0 -114
  94. /package/fjs/{media/json/rpc → protocol/json_rpc}/proof.f.d.ts +0 -0
  95. /package/fjs/{mcp → protocol/mcp}/stdio/proof.f.d.ts +0 -0
@@ -1,272 +1,69 @@
1
1
  /**
2
- * MCP (Model Context Protocol) message schemas minimal subset for a
3
- * hello-world tool server.
2
+ * The FJS MCP server: the composition root the `fjs mcp` / `m` CLI command
3
+ * runs. Session configuration (`McpConfig`), the top-level entry point
4
+ * (`casMcpServer`, wiring `mcpStep` + `stdioTransport` from
5
+ * `fjs/protocol/mcp/`), and the composed tool registry — nothing CAS- or
6
+ * Evo-specific lives here, it only knows about tool *registries*, not what is
7
+ * in them, so a future non-CAS tool set can land as a new sibling of
8
+ * `fjs/mcp/cas/` and `fjs/mcp/evo/` without touching either of them.
4
9
  *
5
- * Covers the three exchanges a minimal server must handle:
6
- * - `initialize` / `notifications/initialized` lifecycle
7
- * - `tools/list` — advertise available tools
8
- * - `tools/call` — invoke a tool and return text content
10
+ * ## Tools
9
11
  *
10
- * Each schema is both a runtime decoder (`validate(schema)`) and a static
11
- * TypeScript type (`Ts<typeof schema>`). Transport framing (stdio) and the
12
- * JSON-RPC dispatcher are in `fjs/media/json/rpc/module.f.ts`.
12
+ * | Tool | args | action | result |
13
+ * |----------------|------------------------------------------------|------------------|--------------------------------------|
14
+ * | `cas_add` | `{ content, type? }` | `c.write(...)` | hash (cBase32) |
15
+ * | `cas_get` | `{ hash, content?: boolean }` | `c.read(key)` | JSON `{length,mimeType,type[,uri][,text\|blob]}` |
16
+ * | `cas_list` | `{}` | `c.list()` | hashes, one per line |
17
+ * | `evo_list` | `{ archived? }` | `e.list(...)` | subjects, as a JSON array of strings |
18
+ * | `evo_head` | `{ subject }` | `e.head(...)` | head hashes, one per line |
19
+ * | `evo_revision` | `{ hash }` | `e.revision(...)`| the revision, as JSON |
20
+ * | `evo_add` | `{ parents, snapshot?, subject?, archived? }` | `e.add(...)` | hash (cBase32) |
21
+ *
22
+ * `cas_add`/`cas_get`/`cas_list` are `fjs/mcp/cas` — see that module for tool
23
+ * documentation (input encoding, output shape, error convention). `evo_*` is
24
+ * `fjs/mcp/evo`. Both tool sets run in one process, sharing one `~/.cas/`
25
+ * store and one in-memory Evo cache scanned once at startup (`initEvo`).
13
26
  *
14
27
  * @module
15
28
  */
16
- import { boolean, string, option, array, record, or } from '../types/rtti/module.f.js';
17
- import { unknown } from '../media/json/module.f.js';
18
- import { pure, step } from '../effects/module.f.js';
19
- import { read, write } from '../effects/memory/module.f.js';
20
- import { decodeRequest, rpcError, invalidRequest, invalidParams, methodNotFound, jsonrpc, } from '../media/json/rpc/module.f.js';
21
- import { validate } from '../types/rtti/validate/module.f.js';
22
- import { toJsonSchema } from '../media/json/schema/module.f.js';
23
- // ── Shared ─────────────────────────────────────────────────────────────────────
24
- /** Name + version pair sent in `initialize` requests and responses. */
25
- export const implementation = {
26
- name: string,
27
- version: string,
28
- };
29
- // ── Capabilities ───────────────────────────────────────────────────────────────
30
- const toolsCapability = { listChanged: option(boolean) };
31
- /** Server capabilities advertised in the `initialize` response. */
32
- export const serverCapabilities = {
33
- tools: option(toolsCapability),
34
- };
35
- // ── Lifecycle ──────────────────────────────────────────────────────────────────
36
- /** Params for the `initialize` request. */
37
- export const initializeParams = {
38
- protocolVersion: string,
39
- capabilities: unknown,
40
- clientInfo: implementation,
41
- };
42
- /** Result for the `initialize` request. */
43
- export const initializeResult = {
44
- protocolVersion: string,
45
- capabilities: serverCapabilities,
46
- serverInfo: implementation,
47
- instructions: option(string),
48
- };
49
- // ── Content ────────────────────────────────────────────────────────────────────
50
- /** Plain-text content item returned by a tool call. */
51
- export const textContent = { type: 'text', text: string };
52
- /**
53
- * A binary resource carried inside an {@link embeddedResource}: a base64
54
- * `blob`, an addressing `uri`, and an optional `mimeType`. This is MCP's
55
- * `BlobResource` shape — the idiomatic way to return typed binary content so a
56
- * `mimeType` travels alongside the bytes and clients know how to route them.
57
- */
58
- export const blobResource = {
59
- uri: string,
60
- mimeType: option(string),
61
- blob: string,
62
- };
63
- /** An `EmbeddedResource` content item wrapping a {@link blobResource}. */
64
- export const embeddedResource = {
65
- type: 'resource',
66
- resource: blobResource,
67
- };
68
- /**
69
- * A single item in a `tools/call` result's `content` array: either plain
70
- * {@link textContent} or an {@link embeddedResource} for typed binary. The
71
- * `image` and `audio` variants are not modelled yet.
72
- */
73
- export const contentItem = or(textContent, embeddedResource);
74
- // ── Tools ──────────────────────────────────────────────────────────────────────
29
+ import { step } from '../effects/module.f.js';
30
+ import { create } from '../effects/memory/module.f.js';
31
+ import {} from '../effects/node/module.f.js';
32
+ import { stdioTransport } from '../protocol/mcp/stdio/module.f.js';
33
+ import { mcpStep, uninitializedState, fromRegistry, } from '../protocol/mcp/module.f.js';
34
+ import { fileCas } from '../cas/module.f.js';
35
+ import { initEvo, evo } from '../cas/evo/module.f.js';
36
+ import { sha256 } from '../crypto/sha2/module.f.js';
37
+ import { casToolRegistry } from './cas/module.f.js';
38
+ import { evoToolRegistry } from './evo/module.f.js';
39
+ // ── Handlers ────────────────────────────────────────────────────────────────────
75
40
  /**
76
- * A tool descriptor returned by `tools/list`.
77
- * `inputSchema` is a JSON Schema object use `toJsonSchema` to derive it from
78
- * an rtti schema.
41
+ * MCP handlers for `FileCas` (`fjs/mcp/cas`) plus the Evo API (`fjs/mcp/evo`)
42
+ * layered on it, bound to `home` and an already-built Evo cache slot (see
43
+ * `initEvo`).
79
44
  */
80
- export const tool = {
81
- name: string,
82
- description: option(string),
83
- inputSchema: unknown,
84
- };
45
+ export const casMcpHandlers = (home) => (cacheKey) => fromRegistry([...casToolRegistry(home)(cacheKey), ...evoToolRegistry(evo(fileCas(sha256)(home))(cacheKey))]);
46
+ // ── Session configuration ───────────────────────────────────────────────────────
85
47
  /**
86
- * Params for the `tools/list` request. `cursor` is an opaque pagination token
87
- * from a previous `ToolsListResult.nextCursor`.
48
+ * Static MCP configuration for the CAS server: advertises the `tools`
49
+ * capability, identifies the server, and pins the protocol version.
88
50
  */
89
- export const toolsListParams = {
90
- cursor: option(string),
91
- };
92
- export const toolsListResult = {
93
- tools: array(tool),
94
- nextCursor: option(string),
95
- };
96
- export const toolsCallParams = {
97
- name: string,
98
- arguments: option(record(unknown)),
99
- };
100
- export const toolsCallResult = {
101
- content: array(contentItem),
102
- isError: option(boolean),
51
+ export const casConfig = {
52
+ serverInfo: { name: 'functionalscript-cas', version: '0.30.0' },
53
+ capabilities: { tools: {} },
54
+ protocolVersion: '2024-11-05',
103
55
  };
56
+ // ── Server ──────────────────────────────────────────────────────────────────────
104
57
  /**
105
- * Creates a type-safe tool entry that binds an RTTI schema with a handler.
106
- *
107
- * The builder validates arguments at runtime using the RTTI and passes pre-validated
108
- * arguments (typed as `Ts<T>`) to the handler. This eliminates manual validation
109
- * boilerplate and type assertions.
110
- *
111
- * @param name - The tool name (used in `tools/call` requests)
112
- * @param description - Human-readable description for `tools/list`
113
- * @param inputRtti - Runtime type info for input validation
114
- * @param handle - Handler receiving validated arguments of type `Ts<inputRtti>`
115
- * @returns A `ToolEntry` ready to be added to a registry
116
- */
117
- export const toolEntry = (name, description, inputRtti, handle) => ({
118
- name,
119
- description,
120
- inputRtti,
121
- handle: (a) => {
122
- const [t, r] = validate(inputRtti)(a);
123
- return t === 'error'
124
- ? pure(errorResult(`invalid arguments: ${r.message}`))
125
- : handle(r);
126
- }
127
- });
128
- /**
129
- * Helper to create a successful single-text-block tool result.
130
- *
131
- * @param text - The text to return to the client
132
- * @returns A `ToolsCallResult` with the text content
133
- */
134
- export const okResult = (text) => ({ content: [{ type: 'text', text }] });
135
- /**
136
- * Helper to create a tool-level error result with plain text explanation.
137
- *
138
- * @param text - The error message to return to the client
139
- * @returns A `ToolsCallResult` with `isError: true` and the text explanation
140
- */
141
- export const errorResult = (text) => ({ ...okResult(text), isError: true });
142
- /**
143
- * Builds `McpHandlers` from a registry of tool entries.
144
- *
145
- * This factory generates `toolsList` and `toolsCall` handlers that work with a
146
- * declarative registry, eliminating boilerplate. The `toolsList` handler converts
147
- * entries into MCP `Tool` descriptors, and `toolsCall` dispatches by name and
148
- * delegates to the appropriate handler.
149
- *
150
- * @param registry - Array of tool entries
151
- * @returns Complete `McpHandlers` ready for use with `mcpStep`
152
- */
153
- export const fromRegistry = (registry) => ({
154
- toolsList: () => {
155
- const tools = registry.map(entry => ({
156
- name: entry.name,
157
- description: entry.description,
158
- inputSchema: toJsonSchema(entry.inputRtti),
159
- }));
160
- return pure({ tools });
161
- },
162
- toolsCall: ({ name, arguments: args }) => {
163
- const entry = registry.find(e => e.name === name);
164
- return entry === undefined
165
- ? pure(errorResult(`unknown tool: ${name}`))
166
- : entry.handle(args === undefined ? {} : args);
167
- },
168
- });
169
- // ── Lifecycle / capability state machine ───────────────────────────────────────
170
- const _errResponse = (id) => (error) => ({ jsonrpc, error, id });
171
- const _okResponse = (id) => (result) => ({ jsonrpc, result, id });
172
- /** MCP error -32002: the client called a method before `initialize`. */
173
- export const notInitialized = rpcError(-32002)('Server not initialized');
174
- // Params for methods that take no arguments (`ping`, `notifications/initialized`):
175
- // absent, or an object (which may carry `_meta`).
176
- const _noParams = option(record(unknown));
177
- /** Initial session state — always start here. */
178
- export const uninitializedState = ['uninitialized'];
179
- /**
180
- * State-machine step for an MCP session using memory effects.
181
- *
182
- * Given configuration, handlers, and a memory key holding the session state,
183
- * returns a function `(value) => Effect<MemOp | O, Response | null>`.
184
- *
185
- * Rules:
186
- * - `ping` returns an empty success regardless of session state; non-object
187
- * params → -32602.
188
- * - `initialize` is accepted only while uninitialized; a second call returns -32600.
189
- * On success the state moves to `initializing`, not `initialized`.
190
- * - `notifications/initialized` (no `id`) transitions `initializing` → `initialized`;
191
- * a malformed one (non-object params) is ignored and the session stays gated;
192
- * other notifications are silently ignored in any state.
193
- * - Any other method before `notifications/initialized` → error -32002 (not initialized).
194
- * - Methods gated by a capability (e.g. `tools/list`) → -32601 when the capability
195
- * is absent.
196
- * - `tools/list` params (an optional pagination `cursor`) are validated and passed
197
- * to the handler; invalid params → -32602.
58
+ * Runs the combined CAS + Evo MCP server over stdio: scans `~/.cas/` once to
59
+ * build the Evo subject/head cache (`initEvo`), allocates the session-state
60
+ * slot, builds the `mcpStep` for the merged tool registry, and drives the
61
+ * read parse dispatch write loop until stdin EOF.
198
62
  */
199
- export const mcpStep = ({ protocolVersion, capabilities, serverInfo, }) => (handlers) => (stateKey) => (value) => {
200
- const [t, message] = decodeRequest(value);
201
- if (t === 'error') {
202
- return pure(_errResponse(null)(invalidRequest));
203
- }
204
- const { id, method, params } = message;
205
- // Notifications (no `id`) never receive a response.
206
- // `notifications/initialized` transitions the session from initializing → initialized.
207
- if (id === undefined) {
208
- if (method === 'notifications/initialized') {
209
- const [pt] = validate(_noParams)(params);
210
- if (pt === 'error') {
211
- // Malformed handshake — ignore it; the session stays gated.
212
- return pure(null);
213
- }
214
- return step(read(stateKey), ([t]) => t === 'initializing'
215
- ? step(write(stateKey, ['initialized', true]), () => pure(null))
216
- : pure(null));
217
- }
218
- return pure(null);
219
- }
220
- // `ping` is always valid regardless of session state, but its params
221
- // (if present) must be an object.
222
- if (method === 'ping') {
223
- const [pt] = validate(_noParams)(params);
224
- return pt === 'error'
225
- ? pure(_errResponse(id)(invalidParams))
226
- : pure(_okResponse(id)({}));
227
- }
228
- // `initialize` transitions uninitialized → initializing; reject if already done.
229
- if (method === 'initialize') {
230
- return step(read(stateKey), ([t]) => {
231
- if (t !== 'uninitialized') {
232
- return pure(_errResponse(id)(invalidRequest));
233
- }
234
- const [pr] = validate(initializeParams)(params);
235
- if (pr === 'error') {
236
- return pure(_errResponse(id)(invalidParams));
237
- }
238
- const result = {
239
- protocolVersion,
240
- capabilities,
241
- serverInfo,
242
- };
243
- return step(write(stateKey, ['initializing']), () => pure(_okResponse(id)(result)));
244
- });
245
- }
246
- // All other methods require fully initialized state — read it first.
247
- return step(read(stateKey), ([t]) => {
248
- if (t !== 'initialized') {
249
- return pure(_errResponse(id)(notInitialized));
250
- }
251
- if (method === 'tools/list') {
252
- if (capabilities.tools === undefined) {
253
- return pure(_errResponse(id)(methodNotFound));
254
- }
255
- // `params` may be absent — `tools/list` without a cursor.
256
- const [t, pr] = validate(toolsListParams)(params === undefined ? {} : params);
257
- return t === 'error'
258
- ? pure(_errResponse(id)(invalidParams))
259
- : step(handlers.toolsList(pr), r => pure(_okResponse(id)(r)));
260
- }
261
- if (method === 'tools/call') {
262
- if (capabilities.tools === undefined) {
263
- return pure(_errResponse(id)(methodNotFound));
264
- }
265
- const [t, pr] = validate(toolsCallParams)(params);
266
- return t === 'error'
267
- ? pure(_errResponse(id)(invalidParams))
268
- : step(handlers.toolsCall(pr), r => pure(_okResponse(id)(r)));
269
- }
270
- return pure(_errResponse(id)(methodNotFound));
271
- });
63
+ export const casMcpServer = (home) => step(initEvo(fileCas(sha256)(home)), cacheKey => step(create(uninitializedState), sessionKey => stdioTransport(mcpStep(casConfig)(casMcpHandlers(home)(cacheKey))(sessionKey))));
64
+ // ── Tests ────────────────────────────────────────────────────────────────────
65
+ export const proof = {
66
+ // casMcpServer is never called in integration tests because it drives a
67
+ // real stdio server; call it here to cover its Effect-building body.
68
+ casMcpServer: () => { casMcpServer('/'); },
272
69
  };
@@ -1,34 +1,45 @@
1
1
  export declare const proof: {
2
- lifecycle: {
3
- initialStateIsUninitialized: () => void;
4
- initializeTransitionsToInitializing: () => void;
5
- initializedNotificationTransitionsToInitialized: () => void;
6
- initializeReturnsResult: () => void;
7
- initializeWithBadParamsReturnsInvalidParams: () => void;
8
- notificationBeforeInitReturnNull: () => void;
9
- unknownNotificationReturnNull: () => void;
10
- doubleInitializeReturnsInvalidRequest: () => void;
11
- pingBeforeInitSucceeds: () => void;
12
- pingDuringInitializingSucceeds: () => void;
13
- pingAfterInitSucceeds: () => void;
14
- pingWithObjectParamsSucceeds: () => void;
15
- pingInvalidParamsReturnsInvalidParams: () => void;
16
- initializedNotificationObjectParamsTransitions: () => void;
17
- initializedNotificationBadParamsIgnored: () => void;
18
- methodBeforeInitReturnsNotInitialized: () => void;
19
- methodDuringInitializingReturnsNotInitialized: () => void;
20
- invalidEnvelopeReturnsInvalidRequest: () => void;
21
- };
22
- tools: {
23
- toolsListSucceeds: () => void;
24
- toolsListPassesCursorToHandler: () => void;
25
- toolsListInvalidCursorReturnsInvalidParams: () => void;
26
- toolsCallSucceeds: () => void;
27
- toolsCallBadParamsReturnsInvalidParams: () => void;
28
- toolsCallAbsentArgumentsSucceeds: () => void;
29
- toolsCallNullArgumentsReturnsInvalidParams: () => void;
30
- toolsListWithoutCapabilityReturnsMethodNotFound: () => void;
31
- toolsCallWithoutCapabilityReturnsMethodNotFound: () => void;
32
- unknownMethodReturnsMethodNotFound: () => void;
33
- };
2
+ getMetaLargeMultiChunkBlobNoError: () => void;
3
+ getMetaLargeMultiChunkUtf8Symbols: () => void;
4
+ getMetaLargeMultiChunkTextThenBinary: () => void;
5
+ getContentLargeBlobTooLargeError: () => void;
6
+ getContentMissingHashIsError: () => void;
7
+ getContentBase64InflationOverflowWritesInternalError: () => void;
8
+ getContentBase64NearBoundarySucceeds: () => void;
9
+ getContentDoubleEscapedOverflowWritesInternalError: () => void;
10
+ toolsListAdvertisesSevenTools: () => void;
11
+ evoAddListHeadRoundTripsThroughCasServer: () => void;
12
+ evoAddDomainErrorIsErrorThroughCasServer: () => void;
13
+ casAddSyncsEvoCacheForRevisionContent: () => void;
14
+ addReturnsHash: () => void;
15
+ textAddGetMetaRoundTrips: () => void;
16
+ textAddGetContentRoundTrips: () => void;
17
+ binaryAddGetMetaRoundTrips: () => void;
18
+ binaryAddGetContentRoundTrips: () => void;
19
+ addGetRoundTrips: () => void;
20
+ getUntypedReturnsText: () => void;
21
+ getTypedReturnsBinaryJson: () => void;
22
+ getMetaRecognizesRevisionDialect: () => void;
23
+ getContentRecognizesRevisionDialect: () => void;
24
+ listEnumeratesStoredHashes: () => void;
25
+ addInvalidContentIsError: () => void;
26
+ addBadLengthContentIsError: () => void;
27
+ addBase64OverLimitIsError: () => void;
28
+ addTextOverLimitIsError: () => void;
29
+ addTextAtLimitSucceeds: () => void;
30
+ addBase64AtLimitSucceeds: () => void;
31
+ getUnterminatedHashIsError: () => void;
32
+ addMissingContentIsError: () => void;
33
+ getMissingHashArgumentIsError: () => void;
34
+ getInvalidHashIsError: () => void;
35
+ getMissingHashIsError: () => void;
36
+ unknownToolIsError: () => void;
37
+ toolErrorIsNotJsonRpcError: () => void;
38
+ getMetaReturnsLengthAndMimeType: () => void;
39
+ getMetaBinaryBlob: () => void;
40
+ getMetaOctetStreamForUnknownBinary: () => void;
41
+ getMetaOctetStreamForNulBlob: () => void;
42
+ getMetaMissingHashIsError: () => void;
43
+ getMetaInvalidHashIsError: () => void;
44
+ getOctetStreamWithContentIncludesBase64: () => void;
34
45
  };