fix(runtime): enforce all miniapp tool permissions

This commit is contained in:
2026-08-06 01:36:30 +08:00
parent 94817f798c
commit e91d07b389
3 changed files with 29 additions and 5 deletions
@@ -22,7 +22,7 @@ export type AppToolDefinition = {
handling: "direct" | "interactive" | "launch" | "foreground" | "operation";
/** JSON-object property names accepted by this tool. */
parameters: readonly string[];
requires_permission?: string;
requires_permissions?: readonly string[];
input_schema?: JsonObject;
output_schema?: JsonObject;
target?: {
@@ -126,7 +126,7 @@ export class CoreAppRegistry {
input_schema: tool.input_schema,
output_schema: tool.output_schema,
target: tool.target,
...(tool.permissions?.[0] ? { requires_permission: tool.permissions[0] } : {}),
...(tool.permissions?.length ? { requires_permissions: [...tool.permissions] } : {}),
})),
},
});
@@ -162,7 +162,10 @@ function isManifest(manifest: AppManifest): boolean {
&& tool.parameters.every(parameter => /^[a-z][a-z0-9_]{0,63}$/.test(parameter))
&& (!tool.input_schema || isJsonObject(tool.input_schema))
&& (!tool.output_schema || isJsonObject(tool.output_schema))
&& (!tool.requires_permission || manifest.permissions.includes(tool.requires_permission));
&& (!tool.requires_permissions || (tool.requires_permissions.length > 0
&& new Set(tool.requires_permissions).size === tool.requires_permissions.length
&& tool.requires_permissions.every(permission => /^[a-z][a-z0-9._-]{0,63}$/.test(permission)
&& manifest.permissions.includes(permission))));
toolNames.add(tool.name);
return valid;
});