minutes-mcp 0.22.1 → 0.24.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.
- package/dist/index.d.ts +6 -0
- package/dist/index.js +51 -2
- package/dist-ui/index.html +18 -18
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -204,4 +204,10 @@ export type LiveEventsSubscriptionController = {
|
|
|
204
204
|
subscriptionCount: () => number;
|
|
205
205
|
};
|
|
206
206
|
export declare function registerLiveEventsSubscriptionHandlers(mcpServer: McpServer, options?: LiveEventsSubscriptionOptions): LiveEventsSubscriptionController;
|
|
207
|
+
export interface DictationModelMissingError {
|
|
208
|
+
model: string;
|
|
209
|
+
expectedPath: string;
|
|
210
|
+
setupCommand: string;
|
|
211
|
+
}
|
|
212
|
+
export declare function parseDictationModelMissingError(stderr: string): DictationModelMissingError | null;
|
|
207
213
|
export {};
|
package/dist/index.js
CHANGED
|
@@ -419,7 +419,7 @@ const COPILOT_SUPPORTED = hasFeature(CLI_CAPABILITIES, "copilot_realtime");
|
|
|
419
419
|
// `./version.ts` (see issue #183). Hosted `.mcpb` bundles will run
|
|
420
420
|
// against CLIs with different minor/patch numbers within the same
|
|
421
421
|
// major; that is explicitly supported.
|
|
422
|
-
const MCP_SERVER_VERSION = "0.
|
|
422
|
+
const MCP_SERVER_VERSION = "0.24.0";
|
|
423
423
|
export function parseKnowledgeConfig(configContent) {
|
|
424
424
|
const knowledgeMatch = configContent.match(/\[knowledge\][\s\S]*?(?=\n\[|$)/);
|
|
425
425
|
if (!knowledgeMatch) {
|
|
@@ -3064,7 +3064,14 @@ server.resource("recent-ideas", "minutes://ideas/recent", { description: "Recent
|
|
|
3064
3064
|
}],
|
|
3065
3065
|
};
|
|
3066
3066
|
});
|
|
3067
|
-
|
|
3067
|
+
export function parseDictationModelMissingError(stderr) {
|
|
3068
|
+
const model = stderr.match(/Dictation model not installed:\s*([^\r\n]+)/)?.[1]?.trim();
|
|
3069
|
+
const expectedPath = stderr.match(/Expected:\s*([^\r\n]+)/)?.[1]?.trim();
|
|
3070
|
+
const setupCommand = stderr.match(/Fix:\s*([^\r\n]+)/)?.[1]?.trim();
|
|
3071
|
+
if (!model || !expectedPath || !setupCommand)
|
|
3072
|
+
return null;
|
|
3073
|
+
return { model, expectedPath, setupCommand };
|
|
3074
|
+
}
|
|
3068
3075
|
registerTool("start_dictation", "Start dictation mode. Speak naturally — text accumulates across pauses and the combined result is written when dictation ends. Runs until stop_dictation is called or silence timeout.", {
|
|
3069
3076
|
language: z.string().optional().describe("Transcription language code (e.g. 'en', 'ur', 'es', 'zh'). Overrides config.toml setting."),
|
|
3070
3077
|
}, { title: "Start Dictation", readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false }, async ({ language }) => {
|
|
@@ -3099,6 +3106,48 @@ registerTool("start_dictation", "Start dictation mode. Speak naturally — text
|
|
|
3099
3106
|
isError: true,
|
|
3100
3107
|
};
|
|
3101
3108
|
}
|
|
3109
|
+
try {
|
|
3110
|
+
await execFileAsync(MINUTES_BIN, ["dictate", "--preflight"], {
|
|
3111
|
+
timeout: 5000,
|
|
3112
|
+
env: augmentedEnv(),
|
|
3113
|
+
});
|
|
3114
|
+
}
|
|
3115
|
+
catch (error) {
|
|
3116
|
+
const stderr = typeof error?.stderr === "string" ? error.stderr : "";
|
|
3117
|
+
const missing = parseDictationModelMissingError(stderr);
|
|
3118
|
+
if (missing) {
|
|
3119
|
+
return {
|
|
3120
|
+
content: [
|
|
3121
|
+
{
|
|
3122
|
+
type: "text",
|
|
3123
|
+
text: `Dictation model '${missing.model}' is not installed. ` +
|
|
3124
|
+
`Expected it at ${missing.expectedPath}.\n\nFix: ${missing.setupCommand}`,
|
|
3125
|
+
},
|
|
3126
|
+
],
|
|
3127
|
+
structuredContent: {
|
|
3128
|
+
status: "error",
|
|
3129
|
+
code: "MODEL_MISSING",
|
|
3130
|
+
model: missing.model,
|
|
3131
|
+
expectedPath: missing.expectedPath,
|
|
3132
|
+
setupCommand: missing.setupCommand,
|
|
3133
|
+
},
|
|
3134
|
+
isError: true,
|
|
3135
|
+
};
|
|
3136
|
+
}
|
|
3137
|
+
return {
|
|
3138
|
+
content: [
|
|
3139
|
+
{
|
|
3140
|
+
type: "text",
|
|
3141
|
+
text: `Dictation could not pass startup checks: ${stderr.trim() || error?.message || error}`,
|
|
3142
|
+
},
|
|
3143
|
+
],
|
|
3144
|
+
structuredContent: {
|
|
3145
|
+
status: "error",
|
|
3146
|
+
code: "DICTATION_PREFLIGHT_FAILED",
|
|
3147
|
+
},
|
|
3148
|
+
isError: true,
|
|
3149
|
+
};
|
|
3150
|
+
}
|
|
3102
3151
|
// Spawn dictation as child (not detached — preserves macOS TCC mic grant)
|
|
3103
3152
|
const dictArgs = ["dictate"];
|
|
3104
3153
|
if (language)
|