@extentos/mcp-server 0.0.75 → 0.0.77

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/dist/tools/data/codeExamples.d.ts +53 -0
  2. package/dist/tools/data/codeExamples.d.ts.map +1 -1
  3. package/dist/tools/data/codeExamples.js +254 -62
  4. package/dist/tools/data/codeExamples.js.map +1 -1
  5. package/dist/tools/definitions.d.ts.map +1 -1
  6. package/dist/tools/definitions.js +6 -8
  7. package/dist/tools/definitions.js.map +1 -1
  8. package/dist/tools/docs/index.d.ts.map +1 -1
  9. package/dist/tools/docs/index.js +16 -7
  10. package/dist/tools/docs/index.js.map +1 -1
  11. package/dist/tools/handlers/createSimulatorSession.d.ts.map +1 -1
  12. package/dist/tools/handlers/createSimulatorSession.js +12 -1
  13. package/dist/tools/handlers/createSimulatorSession.js.map +1 -1
  14. package/dist/tools/handlers/generateConnectionModule.d.ts.map +1 -1
  15. package/dist/tools/handlers/generateConnectionModule.js +20 -13
  16. package/dist/tools/handlers/generateConnectionModule.js.map +1 -1
  17. package/dist/tools/handlers/getCodeExample.d.ts.map +1 -1
  18. package/dist/tools/handlers/getCodeExample.js +11 -1
  19. package/dist/tools/handlers/getCodeExample.js.map +1 -1
  20. package/dist/tools/handlers/getCredentialGuide.js +57 -8
  21. package/dist/tools/handlers/getCredentialGuide.js.map +1 -1
  22. package/dist/tools/handlers/getEventLog.d.ts.map +1 -1
  23. package/dist/tools/handlers/getEventLog.js +8 -10
  24. package/dist/tools/handlers/getEventLog.js.map +1 -1
  25. package/dist/tools/handlers/inspectIntegration.d.ts.map +1 -1
  26. package/dist/tools/handlers/inspectIntegration.js +8 -3
  27. package/dist/tools/handlers/inspectIntegration.js.map +1 -1
  28. package/dist/tools/handlers/validateIntegration.d.ts.map +1 -1
  29. package/dist/tools/handlers/validateIntegration.js +9 -3
  30. package/dist/tools/handlers/validateIntegration.js.map +1 -1
  31. package/dist/tools/util/generatedHash.d.ts +24 -8
  32. package/dist/tools/util/generatedHash.d.ts.map +1 -1
  33. package/dist/tools/util/generatedHash.js +88 -11
  34. package/dist/tools/util/generatedHash.js.map +1 -1
  35. package/package.json +1 -1
  36. package/dist/tools/data/examplePatterns.d.ts +0 -4
  37. package/dist/tools/data/examplePatterns.d.ts.map +0 -1
  38. package/dist/tools/data/examplePatterns.js +0 -546
  39. package/dist/tools/data/examplePatterns.js.map +0 -1
  40. package/dist/tools/data/presetTriggers.d.ts +0 -4
  41. package/dist/tools/data/presetTriggers.d.ts.map +0 -1
  42. package/dist/tools/data/presetTriggers.js +0 -47
  43. package/dist/tools/data/presetTriggers.js.map +0 -1
  44. package/dist/tools/handlers/generateConsumer.d.ts +0 -3
  45. package/dist/tools/handlers/generateConsumer.d.ts.map +0 -1
  46. package/dist/tools/handlers/generateConsumer.js +0 -477
  47. package/dist/tools/handlers/generateConsumer.js.map +0 -1
  48. package/dist/tools/handlers/getExampleSpec.d.ts +0 -3
  49. package/dist/tools/handlers/getExampleSpec.d.ts.map +0 -1
  50. package/dist/tools/handlers/getExampleSpec.js +0 -50
  51. package/dist/tools/handlers/getExampleSpec.js.map +0 -1
  52. package/dist/tools/handlers/initSpec.d.ts +0 -3
  53. package/dist/tools/handlers/initSpec.d.ts.map +0 -1
  54. package/dist/tools/handlers/initSpec.js +0 -350
  55. package/dist/tools/handlers/initSpec.js.map +0 -1
  56. package/dist/tools/handlers/planIntegration.d.ts +0 -3
  57. package/dist/tools/handlers/planIntegration.d.ts.map +0 -1
  58. package/dist/tools/handlers/planIntegration.js +0 -293
  59. package/dist/tools/handlers/planIntegration.js.map +0 -1
  60. package/dist/tools/handlers/updateSpec.d.ts +0 -3
  61. package/dist/tools/handlers/updateSpec.d.ts.map +0 -1
  62. package/dist/tools/handlers/updateSpec.js +0 -579
  63. package/dist/tools/handlers/updateSpec.js.map +0 -1
  64. package/dist/tools/handlers/validateSpec.d.ts +0 -3
  65. package/dist/tools/handlers/validateSpec.d.ts.map +0 -1
  66. package/dist/tools/handlers/validateSpec.js +0 -33
  67. package/dist/tools/handlers/validateSpec.js.map +0 -1
  68. package/dist/tools/templates/callbackHandler.d.ts +0 -11
  69. package/dist/tools/templates/callbackHandler.d.ts.map +0 -1
  70. package/dist/tools/templates/callbackHandler.js +0 -215
  71. package/dist/tools/templates/callbackHandler.js.map +0 -1
  72. package/dist/tools/templates/streamConsumer.d.ts +0 -8
  73. package/dist/tools/templates/streamConsumer.d.ts.map +0 -1
  74. package/dist/tools/templates/streamConsumer.js +0 -322
  75. package/dist/tools/templates/streamConsumer.js.map +0 -1
  76. package/dist/tools/util/userCodeMerge.d.ts +0 -69
  77. package/dist/tools/util/userCodeMerge.d.ts.map +0 -1
  78. package/dist/tools/util/userCodeMerge.js +0 -168
  79. package/dist/tools/util/userCodeMerge.js.map +0 -1
  80. package/dist/tools/validation/validateSpec.d.ts +0 -22
  81. package/dist/tools/validation/validateSpec.d.ts.map +0 -1
  82. package/dist/tools/validation/validateSpec.js +0 -623
  83. package/dist/tools/validation/validateSpec.js.map +0 -1
@@ -1,477 +0,0 @@
1
- // generateConsumer — unified tool for callback handlers + stream consumers.
2
- // Spec: docs/mcp/MCP_TOOLS.md § generateConsumer
3
- // kind: "callback" → emits ExtentosCallbacks.{kt,swift} + bootstrap register patch
4
- // kind: "stream" → emits ExtentosStreams.{kt,swift}
5
- //
6
- // Manifest contract: when the agent passes `currentManifest`, this tool applies
7
- // the patch in-memory and returns the full next-state manifest under
8
- // `manifest: { path, content }`. Agent overwrites the manifest file verbatim.
9
- import { existsSync, readFileSync } from "node:fs";
10
- import { join } from "node:path";
11
- import { androidSourcePath, iosModuleName } from "../util/appPackage.js";
12
- import { renderAndroidCallbacksRich, renderIosCallbacksRich, } from "../templates/callbackHandler.js";
13
- import { renderAndroidStreams, renderIosStreams, } from "../templates/streamConsumer.js";
14
- import { renderAndroidBootstrap } from "../templates/androidBootstrap.js";
15
- import { renderIosBootstrap } from "../templates/iosBootstrap.js";
16
- import { applyManifestPatch, manifestPath, } from "../util/manifest.js";
17
- import { okResponse, errorResponse } from "../response.js";
18
- import { hashGeneratedContent } from "../util/generatedHash.js";
19
- import { mergeUserCodeBlocks } from "../util/userCodeMerge.js";
20
- // Compute "names that were tracked by the spec/integration last time but
21
- // aren't tracked now" from a manifest snapshot. Used as
22
- // MergeOptions.removedTrackedNames so the merge utility can correctly
23
- // distinguish (a) USER-CODE blocks for handlers/streams that were just
24
- // removed from the spec — TRUE orphans — from (b) developer-created shared
25
- // utility blocks that the template never knew about (preserved silently).
26
- // See util/userCodeMerge.ts MergeOptions.removedTrackedNames for rationale.
27
- function removedTrackedNamesFromManifest(manifest, newTrackedNames) {
28
- if (!manifest)
29
- return [];
30
- const integration = manifest.integration;
31
- if (!integration)
32
- return [];
33
- const previousHandlers = Array.isArray(integration.handlerNames)
34
- ? integration.handlerNames.filter((n) => typeof n === "string")
35
- : [];
36
- const previousStreams = Array.isArray(integration.streams)
37
- ? integration.streams.filter((n) => typeof n === "string")
38
- : [];
39
- const previous = new Set([...previousHandlers, ...previousStreams, "imports"]);
40
- const next = new Set([...newTrackedNames, "imports"]);
41
- return [...previous].filter((n) => !next.has(n));
42
- }
43
- // Server-side USER-CODE merge for create_or_merge files. When projectPath is
44
- // provided, the action upgrades to "write" (server has done all merging,
45
- // agent writes verbatim). Two cases:
46
- //
47
- // - File exists on disk: splice existing USER-CODE bodies into the new
48
- // content; return merged content + mergeReport.
49
- // - File doesn't exist: nothing to merge, but still return action
50
- // "write" with the raw template + empty mergeReport. F-R3-4:
51
- // previously returned "create_or_merge" here, contradicting the
52
- // docstring "action becomes 'write'". Functionally equivalent
53
- // (both = "write the file fresh") but the contract was inconsistent.
54
- //
55
- // When projectPath is omitted, fall through to the legacy create_or_merge
56
- // contract (agent runs its own merge). See util/userCodeMerge.ts.
57
- function applyServerSideMerge(raw, projectPath, removedTrackedNames = []) {
58
- if (!projectPath)
59
- return { content: raw.content, action: "create_or_merge" };
60
- const abs = join(projectPath, raw.path);
61
- if (!existsSync(abs)) {
62
- return {
63
- content: raw.content,
64
- action: "write",
65
- mergeReport: { preserved: [], orphaned: [], extra: [], warnings: [] },
66
- };
67
- }
68
- const existing = readFileSync(abs, "utf8");
69
- const result = mergeUserCodeBlocks(existing, raw.content, { removedTrackedNames });
70
- return {
71
- content: result.merged,
72
- action: "write",
73
- mergeReport: {
74
- preserved: result.preserved,
75
- orphaned: result.orphaned,
76
- extra: result.extra,
77
- warnings: result.warnings,
78
- },
79
- };
80
- }
81
- // Compute the bootstrap file's post-patch content so its manifest hash matches
82
- // what's actually on disk after the agent applies the replace_region patch.
83
- // Without this, every fresh integration shows file drift on the bootstrap
84
- // because the manifest still carries the pre-patch hash from
85
- // generateConnectionModule (F6).
86
- function bootstrapPostPatch(platform, appPackage, dispatchBody) {
87
- const original = platform === "android"
88
- ? renderAndroidBootstrap(appPackage)
89
- : renderIosBootstrap(appPackage);
90
- return original.replace(/(\/\/\s*EXTENTOS-GENERATED-START:dispatch\n)[\s\S]*?(\n[ \t]*\/\/\s*EXTENTOS-GENERATED-END:dispatch)/, `$1${dispatchBody}$2`);
91
- }
92
- export function handleGenerateConsumer(raw) {
93
- const parsed = parseArgs(raw);
94
- if ("error" in parsed)
95
- return parsed.error;
96
- const args = parsed.args;
97
- return args.kind === "callback" ? buildCallback(args) : buildStream(args);
98
- }
99
- function buildCallback(args) {
100
- const concise = args.responseFormat === "concise";
101
- const files = [];
102
- // Build the raw callbacks file, then apply server-side merge if projectPath was supplied.
103
- const callbacksPath = args.platform === "android"
104
- ? `app/src/main/java/${androidSourcePath(args.appPackage)}/extentos/ExtentosCallbacks.kt`
105
- : `Sources/${iosModuleName(args.appPackage)}/Extentos/ExtentosCallbacks.swift`;
106
- const rawCallbacksContent = args.platform === "android"
107
- ? renderAndroidCallbacksRich(args.appPackage, args.handlers, concise)
108
- : renderIosCallbacksRich(args.handlers, concise);
109
- // F-R3-6: compute names that were tracked last cycle but are absent from
110
- // this call's args. Anything in the existing file matching one of these is
111
- // a TRUE orphan (handler removed from spec) — gets the ORPHANED label.
112
- // Anything else in-existing-only is a developer-created shared block and
113
- // is preserved silently.
114
- const removedHandlerNames = removedTrackedNamesFromManifest(args.currentManifest, args.handlers.map((h) => h.name));
115
- const callbacksMerged = applyServerSideMerge({ path: callbacksPath, content: rawCallbacksContent }, args.projectPath, removedHandlerNames);
116
- if (callbacksMerged.action === "write") {
117
- files.push({
118
- path: callbacksPath,
119
- action: "write",
120
- content: callbacksMerged.content,
121
- mergeReport: callbacksMerged.mergeReport,
122
- });
123
- }
124
- else {
125
- files.push({
126
- path: callbacksPath,
127
- action: "create_or_merge",
128
- content: callbacksMerged.content,
129
- });
130
- }
131
- // Bootstrap dispatch patch — same regardless of platform & merge.
132
- if (args.platform === "android") {
133
- const src = androidSourcePath(args.appPackage);
134
- files.push({
135
- path: `app/src/main/java/${src}/extentos/ExtentosBootstrap.kt`,
136
- action: "replace_region",
137
- marker: "dispatch",
138
- content: androidBootstrapDispatchBody(),
139
- });
140
- }
141
- else {
142
- const mod = iosModuleName(args.appPackage);
143
- files.push({
144
- path: `Sources/${mod}/Extentos/ExtentosBootstrap.swift`,
145
- action: "replace_region",
146
- marker: "dispatch",
147
- content: iosBootstrapDispatchBody(),
148
- });
149
- }
150
- const handlersGenerated = args.handlers.map((h) => h.name);
151
- const summary = `Generated callback handler with ${handlersGenerated.length} stub${handlersGenerated.length === 1 ? "" : "s"}${handlersGenerated.length ? " (" + handlersGenerated.join(", ") + ")" : ""}. Bootstrap patch registers the handler in the EXTENTOS-GENERATED-START:dispatch region. BYOK — fill in your provider client inside USER-CODE blocks.`;
152
- const nowIso = new Date().toISOString();
153
- const callbacksFile = files[0];
154
- const bootstrapFile = files[1];
155
- const dispatchBody = args.platform === "android"
156
- ? androidBootstrapDispatchBody()
157
- : iosBootstrapDispatchBody();
158
- const bootstrapPatchedContent = bootstrapPostPatch(args.platform, args.appPackage, dispatchBody);
159
- const manifestPatch = {
160
- lastUpdatedAt: nowIso,
161
- generatedFilesUpdated: [
162
- {
163
- path: callbacksFile.path,
164
- template: "callback_handler",
165
- hash: hashGeneratedContent(callbacksFile.content),
166
- generatedAt: nowIso,
167
- generatedByTool: "generateConsumer",
168
- },
169
- {
170
- // F6: bootstrap was patched via replace_region; manifest must reflect
171
- // the post-patch hash so the next inspectIntegration / validateIntegration
172
- // sees no spurious drift.
173
- path: bootstrapFile.path,
174
- template: "connection_module",
175
- hash: hashGeneratedContent(bootstrapPatchedContent),
176
- generatedAt: nowIso,
177
- generatedByTool: "generateConsumer",
178
- },
179
- ],
180
- integrationAdded: { handlerNames: handlersGenerated },
181
- };
182
- const response = {
183
- files,
184
- handlersGenerated,
185
- summary,
186
- };
187
- // Manifest contract (matches updateSpec, initSpec):
188
- // - currentManifest supplied → return `manifest: { path, content }`. Drop
189
- // manifestPatch to avoid two-source-of-truth ambiguity.
190
- // - currentManifest omitted → return `manifestPatch` only (legacy fallback).
191
- if (args.currentManifest) {
192
- const next = applyManifestPatch(args.currentManifest, manifestPatch);
193
- response.manifest = { path: manifestPath(), content: next };
194
- }
195
- else {
196
- response.manifestPatch = manifestPatch;
197
- }
198
- return okResponse(response);
199
- }
200
- function buildStream(args) {
201
- const concise = args.responseFormat === "concise";
202
- const files = [];
203
- const streamsPath = args.platform === "android"
204
- ? `app/src/main/java/${androidSourcePath(args.appPackage)}/extentos/ExtentosStreams.kt`
205
- : `Sources/${iosModuleName(args.appPackage)}/Extentos/ExtentosStreams.swift`;
206
- const rawStreamsContent = args.platform === "android"
207
- ? renderAndroidStreams(args.appPackage, args.streams, args.scope, concise)
208
- : renderIosStreams(args.streams, args.scope, concise);
209
- // F-R3-6: stream consumer block names are derived from stream IDs
210
- // (s.id), but the manifest currently records `integration.streams` as
211
- // stream TYPES, not IDs — so we can't reconstruct "removed stream IDs"
212
- // from the manifest diff alone. Pass an empty list: any in-existing-but-
213
- // not-in-next blocks are preserved silently (no spurious ORPHANED label).
214
- // Trade-off chosen: under-flagging > mis-flagging dev-owned utility
215
- // blocks (which was the F-R3-6 production bug). When manifest gains an
216
- // integration.streamIds field, switch to a real diff here.
217
- const streamsMerged = applyServerSideMerge({ path: streamsPath, content: rawStreamsContent }, args.projectPath, []);
218
- if (streamsMerged.action === "write") {
219
- files.push({
220
- path: streamsPath,
221
- action: "write",
222
- content: streamsMerged.content,
223
- mergeReport: streamsMerged.mergeReport,
224
- });
225
- }
226
- else {
227
- files.push({
228
- path: streamsPath,
229
- action: "create_or_merge",
230
- content: streamsMerged.content,
231
- });
232
- }
233
- const streamIds = args.streams.map((s) => s.id);
234
- const summary = `Generated stream consumers for ${streamIds.length} stream${streamIds.length === 1 ? "" : "s"}${streamIds.length ? " (" + streamIds.join(", ") + ")" : ""}. Scope: ${args.scope}.`;
235
- const nowIso = new Date().toISOString();
236
- const streamsFile = files[0];
237
- const androidDeltas = args.platform === "android" ? androidStreamPermissions(args.streams) : null;
238
- const manifestPatch = {
239
- lastUpdatedAt: nowIso,
240
- generatedFilesUpdated: [
241
- {
242
- path: streamsFile.path,
243
- template: "stream_consumer",
244
- hash: hashGeneratedContent(streamsFile.content),
245
- generatedAt: nowIso,
246
- generatedByTool: "generateConsumer",
247
- },
248
- ],
249
- integrationAdded: { streams: args.streams.map((s) => s.type).sort() },
250
- permissionsAdded: androidDeltas?.added.length ? androidDeltas.added : undefined,
251
- };
252
- // streamsAdded is a sibling delta — promoted out of manifestPatch (where it
253
- // didn't belong type-wise) into a top-level response field. Mirrors the
254
- // permissionsDelta pattern below.
255
- const response = {
256
- files,
257
- streamsAdded: streamIds,
258
- summary,
259
- };
260
- if (androidDeltas && androidDeltas.added.length)
261
- response.permissionsDelta = androidDeltas;
262
- if (args.platform === "ios") {
263
- const infoPlist = iosStreamInfoPlist(args.streams);
264
- if (Object.keys(infoPlist.added).length)
265
- response.infoPlistPatch = infoPlist;
266
- }
267
- // Same manifest contract as the callback branch.
268
- if (args.currentManifest) {
269
- const next = applyManifestPatch(args.currentManifest, manifestPatch);
270
- response.manifest = { path: manifestPath(), content: next };
271
- }
272
- else {
273
- response.manifestPatch = manifestPatch;
274
- }
275
- return okResponse(response);
276
- }
277
- function androidStreamPermissions(streams) {
278
- const set = new Set();
279
- for (const s of streams) {
280
- if (s.type === "video_frames" || s.type === "outgoing_video_stream")
281
- set.add("android.permission.CAMERA");
282
- if (s.type === "audio_chunks" ||
283
- s.type === "transcription_incremental" ||
284
- s.type === "outgoing_audio_stream")
285
- set.add("android.permission.RECORD_AUDIO");
286
- set.add("android.permission.FOREGROUND_SERVICE");
287
- }
288
- const added = [...set].sort();
289
- return {
290
- added,
291
- manifestEntries: added.map((p) => `<uses-permission android:name="${p}" />`),
292
- };
293
- }
294
- function iosStreamInfoPlist(streams) {
295
- const added = {};
296
- for (const s of streams) {
297
- if (s.type === "video_frames" || s.type === "outgoing_video_stream") {
298
- added.NSCameraUsageDescription = "Used to capture photos and video from your glasses.";
299
- }
300
- if (s.type === "audio_chunks" ||
301
- s.type === "transcription_incremental" ||
302
- s.type === "outgoing_audio_stream") {
303
- added.NSMicrophoneUsageDescription = "Used to capture audio from your glasses for voice commands.";
304
- if (s.type === "transcription_incremental") {
305
- added.NSSpeechRecognitionUsageDescription =
306
- "Used to transcribe voice commands from your glasses.";
307
- }
308
- }
309
- }
310
- return { added };
311
- }
312
- // Body of the dispatch region (between START and END markers, exclusive).
313
- // The agent splices this into ExtentosBootstrap.kt's dispatch region.
314
- // extentosCallbackHandler is in the same package as the bootstrap, so no
315
- // import is needed. Indentation matches the bootstrap template's 8-space
316
- // in-coroutine context.
317
- function androidBootstrapDispatchBody() {
318
- return ` glasses.extensions.registerAppCallbackHandler(extentosCallbackHandler)`;
319
- }
320
- function iosBootstrapDispatchBody() {
321
- return ` glasses.extensions.registerAppCallbackHandler(ExtentosCallbacks())`;
322
- }
323
- function parseArgs(raw) {
324
- if (!raw || typeof raw !== "object") {
325
- return {
326
- error: errorResponse({
327
- code: "invalid_arguments",
328
- message: "generateConsumer requires an object argument.",
329
- fixHint: 'Pass { kind: "callback" | "stream", appPackage, platform, ... }.',
330
- retryable: false,
331
- }),
332
- };
333
- }
334
- const obj = raw;
335
- const kind = obj.kind;
336
- if (kind !== "callback" && kind !== "stream") {
337
- return {
338
- error: errorResponse({
339
- code: "invalid_arguments",
340
- message: `kind must be "callback" or "stream" (got ${JSON.stringify(kind)}).`,
341
- fixHint: 'Pass kind: "callback" or "stream".',
342
- retryable: false,
343
- }),
344
- };
345
- }
346
- if (typeof obj.appPackage !== "string" || !obj.appPackage) {
347
- return errInvalid("appPackage is required and must be a non-empty string.", "Pass the developer's package/bundle id.");
348
- }
349
- if (obj.platform !== "android" && obj.platform !== "ios") {
350
- return errInvalid(`platform must be "android" or "ios" (got ${JSON.stringify(obj.platform)}).`, 'Pass platform: "android" or "ios".');
351
- }
352
- const responseFormat = obj.responseFormat === "concise" ? "concise" : "detailed";
353
- const currentManifest = obj.currentManifest && typeof obj.currentManifest === "object" && !Array.isArray(obj.currentManifest)
354
- ? obj.currentManifest
355
- : undefined;
356
- const projectPath = typeof obj.projectPath === "string" && obj.projectPath ? obj.projectPath : undefined;
357
- if (kind === "callback") {
358
- // F-R5-1 shape-aware errors — distinguish missing / wrong-type / empty so
359
- // a fresh agent (or one fighting an MCP client that over-serializes
360
- // arrays as JSON strings) sees the actual problem instead of a generic
361
- // "must be an array" no matter what they passed.
362
- if (obj.handlers === undefined || obj.handlers === null) {
363
- return errInvalid("handlers is required when kind: \"callback\".", 'Pass handlers: [{ name: "save_clip", inputKeys?: [...], service?, suggestedProvider? }, ...]');
364
- }
365
- if (!Array.isArray(obj.handlers)) {
366
- return errInvalid(`handlers must be an array when kind: "callback" (got ${describeShape(obj.handlers)}).`, 'Pass handlers as a native array, e.g. [{ name: "save_clip" }]. If you passed it as a JSON-stringified array, your MCP client may be over-serializing — pass the array value directly.');
367
- }
368
- // Note: empty arrays are LEGITIMATE here. When every handler has been
369
- // removed from the spec, an agent re-runs generateConsumer with
370
- // handlers: [] so the server can append the now-orphaned USER-CODE
371
- // blocks at end-of-file with `// ORPHANED:<name>` markers (F-R3-6).
372
- // Don't reject empty.
373
- const handlers = [];
374
- for (const [i, raw] of obj.handlers.entries()) {
375
- if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
376
- return errInvalid(`handlers[${i}] must be an object (got ${describeShape(raw)}).`, "Each handler: { name: \"<id>\", inputKeys?: [...] }.");
377
- }
378
- const h = raw;
379
- if (typeof h.name !== "string" || !h.name) {
380
- return errInvalid(`handlers[${i}].name is required and must be a non-empty string.`, "Pass each handler's spec name (the value of app_callback.handler in your spec).");
381
- }
382
- handlers.push({
383
- name: h.name,
384
- inputKeys: Array.isArray(h.inputKeys)
385
- ? h.inputKeys.filter((k) => typeof k === "string")
386
- : undefined,
387
- service: typeof h.service === "string" ? h.service : undefined,
388
- suggestedProvider: typeof h.suggestedProvider === "string" ? h.suggestedProvider : undefined,
389
- });
390
- }
391
- return {
392
- args: {
393
- kind: "callback",
394
- appPackage: obj.appPackage,
395
- platform: obj.platform,
396
- handlers,
397
- responseFormat,
398
- currentManifest,
399
- projectPath,
400
- },
401
- };
402
- }
403
- // kind: "stream" — same shape-aware errors as the callback branch.
404
- if (obj.streams === undefined || obj.streams === null) {
405
- return errInvalid("streams is required when kind: \"stream\".", "Pass streams: [{ id: \"<spec_id>\", type: \"<stream_type>\" }, ...]");
406
- }
407
- if (!Array.isArray(obj.streams)) {
408
- return errInvalid(`streams must be an array when kind: "stream" (got ${describeShape(obj.streams)}).`, 'Pass streams as a native array. If your MCP client over-serializes arrays as strings, pass the array value directly.');
409
- }
410
- // Note: empty arrays are LEGITIMATE here too — when every stream has been
411
- // removed from the spec, an agent passes streams: [] to clear consumers.
412
- const streams = [];
413
- const validTypes = [
414
- "video_frames",
415
- "audio_chunks",
416
- "transcription_incremental",
417
- "outgoing_audio_stream",
418
- "outgoing_video_stream",
419
- ];
420
- for (const [i, raw] of obj.streams.entries()) {
421
- if (!raw || typeof raw !== "object") {
422
- return errInvalid(`streams[${i}] must be an object.`, "Each stream: { id, type }.");
423
- }
424
- const s = raw;
425
- if (typeof s.id !== "string" || !s.id) {
426
- return errInvalid(`streams[${i}].id is required.`, "Give each stream a spec id.");
427
- }
428
- if (typeof s.type !== "string" || !validTypes.includes(s.type)) {
429
- return errInvalid(`streams[${i}].type must be one of: ${validTypes.join(", ")} (got ${JSON.stringify(s.type)}).`, "Copy the stream type verbatim from the spec's streams[] entry.");
430
- }
431
- streams.push({ id: s.id, type: s.type });
432
- }
433
- const scope = obj.scope === "connection" ? "connection" : "lifecycle";
434
- return {
435
- args: {
436
- kind: "stream",
437
- appPackage: obj.appPackage,
438
- platform: obj.platform,
439
- streams,
440
- scope,
441
- responseFormat,
442
- currentManifest,
443
- projectPath,
444
- },
445
- };
446
- }
447
- function errInvalid(message, fixHint) {
448
- return {
449
- error: errorResponse({
450
- code: "invalid_arguments",
451
- message,
452
- fixHint,
453
- retryable: false,
454
- }),
455
- };
456
- }
457
- // Human-readable shape description for error messages. Helps when an agent
458
- // host (or a misconfigured MCP client) coerces an array into a JSON-stringified
459
- // blob — the agent sees "got string: \"[{\\\"name\\\":...\"" and recognizes
460
- // the mistake instead of guessing why "must be an array" fired with what
461
- // looks like a perfectly fine array.
462
- function describeShape(v) {
463
- if (v === null)
464
- return "null";
465
- if (Array.isArray(v))
466
- return `array of ${v.length}`;
467
- if (typeof v === "object") {
468
- const keyCount = Object.keys(v).length;
469
- return `object with ${keyCount} key${keyCount === 1 ? "" : "s"}`;
470
- }
471
- if (typeof v === "string") {
472
- const sample = v.length > 60 ? v.slice(0, 57) + "..." : v;
473
- return `string: ${JSON.stringify(sample)}`;
474
- }
475
- return typeof v;
476
- }
477
- //# sourceMappingURL=generateConsumer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generateConsumer.js","sourceRoot":"","sources":["../../../src/tools/handlers/generateConsumer.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { type McpContent } from "../response.js";
2
- export declare function handleGetExampleSpec(raw: unknown): McpContent;
3
- //# sourceMappingURL=getExampleSpec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getExampleSpec.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/getExampleSpec.ts"],"names":[],"mappings":"AAIA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAM5E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAmB7D"}
@@ -1,50 +0,0 @@
1
- // getExampleSpec — retrieve one of 8 canonical reference specs.
2
- // Spec: docs/mcp/MCP_TOOLS.md § getExampleSpec
3
- import { PATTERNS, PATTERN_IDS } from "../data/examplePatterns.js";
4
- import { okResponse, errorResponse } from "../response.js";
5
- export function handleGetExampleSpec(raw) {
6
- const parsed = parseArgs(raw);
7
- if ("error" in parsed)
8
- return parsed.error;
9
- const p = PATTERNS[parsed.args.pattern];
10
- const u = (p.usedPrimitives ?? {});
11
- const blocks = Array.isArray(u.blocks) ? u.blocks.length : 0;
12
- const streams = Array.isArray(u.streams) ? u.streams.length : 0;
13
- const triggers = Array.isArray(u.triggers) ? u.triggers.length : 0;
14
- const handlers = Array.isArray(p.handlerNames) ? p.handlerNames.length : 0;
15
- return okResponse({
16
- pattern: p.id,
17
- description: p.description,
18
- spec: p.spec,
19
- usedPrimitives: p.usedPrimitives,
20
- handlerNames: p.handlerNames,
21
- codeSnippets: p.codeSnippets,
22
- summary: `Reference spec '${p.id}': ${blocks} block${blocks === 1 ? "" : "s"}, ${streams} stream${streams === 1 ? "" : "s"}, ${triggers} trigger${triggers === 1 ? "" : "s"}, ${handlers} handler${handlers === 1 ? "" : "s"}. Study, don't copy whole — peel pieces relevant to your goal.`,
23
- });
24
- }
25
- function parseArgs(raw) {
26
- if (!raw || typeof raw !== "object") {
27
- return {
28
- error: errorResponse({
29
- code: "invalid_arguments",
30
- message: "getExampleSpec requires an object argument.",
31
- fixHint: "Pass { pattern: <one of 8 pattern ids> }.",
32
- retryable: false,
33
- }),
34
- };
35
- }
36
- const obj = raw;
37
- const pattern = obj.pattern;
38
- if (typeof pattern !== "string" || !PATTERN_IDS.includes(pattern)) {
39
- return {
40
- error: errorResponse({
41
- code: "invalid_arguments",
42
- message: `pattern must be one of: ${PATTERN_IDS.join(", ")} (got ${JSON.stringify(pattern)}).`,
43
- fixHint: "Pass pattern: one of the 8 canonical ids.",
44
- retryable: false,
45
- }),
46
- };
47
- }
48
- return { args: { pattern: pattern } };
49
- }
50
- //# sourceMappingURL=getExampleSpec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getExampleSpec.js","sourceRoot":"","sources":["../../../src/tools/handlers/getExampleSpec.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { type McpContent } from "../response.js";
2
- export declare function handleInitSpec(raw: unknown): McpContent;
3
- //# sourceMappingURL=initSpec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"initSpec.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/initSpec.ts"],"names":[],"mappings":"AAyBA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA2B5E,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CA8GvD"}