fix(packages): load bundled Pi runtime for local installs

This commit is contained in:
2026-09-02 22:46:58 +08:00
parent 28e1690038
commit 5a2f0eb678
9 changed files with 356 additions and 19 deletions

View File

@@ -17,6 +17,7 @@ import type { PiProductTools } from './product-tools';
import type { CodingPluginToolDefinition } from '../../../shared/coding-plugins';
import type { PiSkillEntry } from './resource-loader';
import type { EffectivePluginSnapshot } from '../../coding-plugins/effective-resolver';
import { DevicePackageError } from '../../coding-packages/device-package-manager';
const MAX_REQUEST_BYTES = 64 * 1024;
const PRODUCT_TOOL_NAME_PATTERN = /^[A-Za-z][A-Za-z0-9._:-]{0,63}$/u;
@@ -483,7 +484,14 @@ export class PiManagedExtensionHost {
response.removeListener('close', cancel);
record.waiters.delete(value.resourceId);
}
} catch {
} catch (error) {
if (!response.writableEnded && error instanceof DevicePackageError) {
this.respond(response, 400, {
code: error.code,
error: error.message.slice(0, 512),
});
return;
}
if (!response.writableEnded) this.respond(response, 400, { error: 'Bridge request failed' });
}
}

View File

@@ -1,7 +1,7 @@
import path from 'node:path';
import { atomicWriteText } from '../../../coding-projects/atomic-json';
export const MAKELORE_PI_EXTENSION_VERSION = 4;
export const MAKELORE_PI_EXTENSION_VERSION = 5;
export const MAKELORE_PI_EXTENSION_FILENAME = `makelore-runtime-v${MAKELORE_PI_EXTENSION_VERSION}.mjs`;
const BUNDLE_SOURCE = String.raw`
@@ -93,7 +93,15 @@ export function createMakeloreRuntime(runtimeDefaults = {}) {
signal,
});
const result = await response.json().catch(() => ({}));
if (!response.ok) throw new Error(result.error || 'Makelore runtime bridge rejected the request');
if (!response.ok) {
const message = typeof result.error === 'string' && result.error
? result.error
: 'Makelore runtime bridge rejected the request';
const code = typeof result.code === 'string' && /^local_package_[a-z_]+$/.test(result.code)
? result.code
: '';
throw new Error(code ? code + ': ' + message : message);
}
return result;
}