@mearl/client 2.21.0 → 2.22.1
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/README.md +52 -8
- package/dist/actionTimeouts.js +1 -1
- package/dist/artifacts.d.ts +1 -1
- package/dist/browserRegistry.d.ts +1 -1
- package/dist/check.d.ts +1 -1
- package/dist/cli.js +4 -3
- package/dist/commands.d.ts +12 -12
- package/dist/commands.js +6 -4
- package/dist/{generated-app-profile-definition.d.ts → generated/app-profile-definition.d.ts} +2 -2
- package/dist/{generated-app-profile-runtime-types.d.ts → generated/app-profile-runtime-types.d.ts} +2 -2
- package/dist/{generated-browser-action-protocol.d.ts → generated/browser-action-protocol.d.ts} +1 -1
- package/dist/{generated-plugin-diagnostics.d.ts → generated/plugin-diagnostics.d.ts} +4 -4
- package/dist/{generated-plugin-execution.d.ts → generated/plugin-execution.d.ts} +2 -2
- package/dist/generated/plugin-host-build.d.ts +1 -0
- package/dist/generated/plugin-host-build.js +2 -0
- package/dist/{generated-plugin-pages.d.ts → generated/plugin-pages.d.ts} +1 -1
- package/dist/{generated-plugin-tasks.d.ts → generated/plugin-tasks.d.ts} +2 -2
- package/dist/index.d.ts +15 -15
- package/dist/index.js +7 -7
- package/dist/pageEvalArguments.d.ts +1 -1
- package/dist/pageEvalArguments.js +1 -1
- package/dist/plugin-task-host.js +1 -1
- package/dist/plugin-worker.js +2 -2
- package/dist/plugin.d.ts +2 -118
- package/dist/plugin.js +2 -672
- package/dist/pluginModelSessionWorker.d.ts +2 -2
- package/dist/pluginModelSessionWorker.js +4 -4
- package/dist/{pluginHostConnection.d.ts → plugins/clients/pluginHostConnection.d.ts} +4 -2
- package/dist/{pluginHostConnection.js → plugins/clients/pluginHostConnection.js} +9 -8
- package/dist/{pluginModels.d.ts → plugins/clients/pluginModels.d.ts} +3 -3
- package/dist/{pluginPages.d.ts → plugins/clients/pluginPages.d.ts} +3 -3
- package/dist/{pluginPages.js → plugins/clients/pluginPages.js} +1 -1
- package/dist/{pluginState.d.ts → plugins/clients/pluginState.d.ts} +3 -3
- package/dist/{pluginTasks.d.ts → plugins/clients/pluginTasks.d.ts} +4 -4
- package/dist/{pluginTasks.js → plugins/clients/pluginTasks.js} +4 -4
- package/dist/{officialPluginInstaller.js → plugins/officialPluginInstaller.js} +1 -3
- package/dist/{pluginRegistry.d.ts → plugins/pluginRegistry.d.ts} +2 -2
- package/dist/{pluginRegistry.js → plugins/pluginRegistry.js} +14 -7
- package/dist/{pluginTaskProtocol.d.ts → plugins/pluginTaskProtocol.d.ts} +2 -2
- package/dist/{pluginCommandWorker.js → plugins/runtime/pluginCommandWorker.js} +3 -3
- package/dist/{pluginDiagnostics.d.ts → plugins/runtime/pluginDiagnostics.d.ts} +4 -4
- package/dist/{pluginDiagnostics.js → plugins/runtime/pluginDiagnostics.js} +2 -2
- package/dist/{pluginExecution.d.ts → plugins/runtime/pluginExecution.d.ts} +3 -3
- package/dist/{pluginExecution.js → plugins/runtime/pluginExecution.js} +1 -1
- package/dist/{pluginExecutor.d.ts → plugins/runtime/pluginExecutor.d.ts} +3 -3
- package/dist/{pluginExecutor.js → plugins/runtime/pluginExecutor.js} +4 -4
- package/dist/{pluginExecutorProtocol.d.ts → plugins/runtime/pluginExecutorProtocol.d.ts} +4 -4
- package/dist/{pluginHost.d.ts → plugins/runtime/pluginHost.d.ts} +3 -3
- package/dist/{pluginHostPaths.js → plugins/runtime/pluginHostPaths.js} +1 -1
- package/dist/{pluginHostServer.js → plugins/runtime/pluginHostServer.js} +11 -3
- package/dist/{pluginModelCatalog.d.ts → plugins/runtime/pluginModelCatalog.d.ts} +1 -1
- package/dist/{pluginModelSessions.js → plugins/runtime/pluginModelSessions.js} +3 -3
- package/dist/{pluginPageManager.d.ts → plugins/runtime/pluginPageManager.d.ts} +4 -4
- package/dist/{pluginPageManager.js → plugins/runtime/pluginPageManager.js} +4 -8
- package/dist/{pluginRevision.d.ts → plugins/runtime/pluginRevision.d.ts} +1 -1
- package/dist/{pluginRevision.js → plugins/runtime/pluginRevision.js} +3 -53
- package/dist/{pluginRuntimeCleanup.js → plugins/runtime/pluginRuntimeCleanup.js} +2 -2
- package/dist/{pluginStateManager.d.ts → plugins/runtime/pluginStateManager.d.ts} +2 -2
- package/dist/{pluginStateManager.js → plugins/runtime/pluginStateManager.js} +2 -2
- package/dist/{pluginStateStore.d.ts → plugins/runtime/pluginStateStore.d.ts} +1 -1
- package/dist/{pluginStateStore.js → plugins/runtime/pluginStateStore.js} +3 -8
- package/dist/{pluginTaskManager.d.ts → plugins/runtime/pluginTaskManager.d.ts} +12 -12
- package/dist/{pluginTaskManager.js → plugins/runtime/pluginTaskManager.js} +8 -12
- package/dist/{pluginTaskStore.d.ts → plugins/runtime/pluginTaskStore.d.ts} +4 -4
- package/dist/{pluginTaskStore.js → plugins/runtime/pluginTaskStore.js} +1 -1
- package/dist/{pythonPlugin.d.ts → plugins/runtime/pythonPlugin.d.ts} +2 -2
- package/dist/{pythonPlugin.js → plugins/runtime/pythonPlugin.js} +2 -2
- package/dist/plugins/sdk/plugin.d.ts +118 -0
- package/dist/plugins/sdk/plugin.js +676 -0
- package/dist/{pluginAppProfiles.d.ts → plugins/sdk/pluginAppProfiles.d.ts} +1 -1
- package/dist/{pluginAppProfiles.js → plugins/sdk/pluginAppProfiles.js} +2 -2
- package/dist/{pluginModelDefinition.d.ts → plugins/sdk/pluginModelDefinition.d.ts} +1 -1
- package/dist/{pluginModelDefinition.js → plugins/sdk/pluginModelDefinition.js} +0 -6
- package/dist/plugins/sdk/pluginPageDefinition.d.ts +2 -0
- package/dist/{pluginPageDefinition.js → plugins/sdk/pluginPageDefinition.js} +3 -19
- package/dist/{pluginRecoveryDefinition.d.ts → plugins/sdk/pluginRecoveryDefinition.d.ts} +1 -1
- package/dist/{pluginRecoveryDefinition.js → plugins/sdk/pluginRecoveryDefinition.js} +0 -3
- package/dist/plugins/sdk/pluginStateDefinition.d.ts +3 -0
- package/dist/{pluginStateDefinition.js → plugins/sdk/pluginStateDefinition.js} +0 -11
- package/dist/plugins/skillManifest.d.ts +5 -0
- package/dist/plugins/skillManifest.js +35 -0
- package/dist/runtimePaths.d.ts +4 -0
- package/dist/runtimePaths.js +8 -0
- package/dist/socket.d.ts +2 -2
- package/dist/socket.js +5 -4
- package/dist/unified.d.ts +2 -2
- package/dist/unified.js +7 -7
- package/package.json +6 -8
- package/dist/pluginPageDefinition.d.ts +0 -3
- package/dist/pluginStateDefinition.d.ts +0 -4
- /package/dist/{generated-app-profile-definition.js → generated/app-profile-definition.js} +0 -0
- /package/dist/{generated-app-profile-runtime-types.js → generated/app-profile-runtime-types.js} +0 -0
- /package/dist/{generated-browser-action-protocol.js → generated/browser-action-protocol.js} +0 -0
- /package/dist/{generated-plugin-diagnostics.js → generated/plugin-diagnostics.js} +0 -0
- /package/dist/{generated-plugin-execution.js → generated/plugin-execution.js} +0 -0
- /package/dist/{generated-plugin-models.d.ts → generated/plugin-models.d.ts} +0 -0
- /package/dist/{generated-plugin-models.js → generated/plugin-models.js} +0 -0
- /package/dist/{generated-plugin-pages.js → generated/plugin-pages.js} +0 -0
- /package/dist/{generated-plugin-recovery.d.ts → generated/plugin-recovery.d.ts} +0 -0
- /package/dist/{generated-plugin-recovery.js → generated/plugin-recovery.js} +0 -0
- /package/dist/{generated-plugin-state.d.ts → generated/plugin-state.d.ts} +0 -0
- /package/dist/{generated-plugin-state.js → generated/plugin-state.js} +0 -0
- /package/dist/{generated-plugin-tasks.js → generated/plugin-tasks.js} +0 -0
- /package/dist/{generated-toolbox-icon.d.ts → generated/toolbox-icon.d.ts} +0 -0
- /package/dist/{generated-toolbox-icon.js → generated/toolbox-icon.js} +0 -0
- /package/dist/{pluginModels.js → plugins/clients/pluginModels.js} +0 -0
- /package/dist/{pluginState.js → plugins/clients/pluginState.js} +0 -0
- /package/dist/{officialPluginCatalog.d.ts → plugins/officialPluginCatalog.d.ts} +0 -0
- /package/dist/{officialPluginCatalog.js → plugins/officialPluginCatalog.js} +0 -0
- /package/dist/{officialPluginInstaller.d.ts → plugins/officialPluginInstaller.d.ts} +0 -0
- /package/dist/{pluginPageBundle.d.ts → plugins/pluginPageBundle.d.ts} +0 -0
- /package/dist/{pluginPageBundle.js → plugins/pluginPageBundle.js} +0 -0
- /package/dist/{pluginSource.d.ts → plugins/pluginSource.d.ts} +0 -0
- /package/dist/{pluginSource.js → plugins/pluginSource.js} +0 -0
- /package/dist/{pluginTaskProtocol.js → plugins/pluginTaskProtocol.js} +0 -0
- /package/dist/{pluginTaskWire.d.ts → plugins/pluginTaskWire.d.ts} +0 -0
- /package/dist/{pluginTaskWire.js → plugins/pluginTaskWire.js} +0 -0
- /package/dist/{pluginCommandWorker.d.ts → plugins/runtime/pluginCommandWorker.d.ts} +0 -0
- /package/dist/{pluginExecutorProtocol.js → plugins/runtime/pluginExecutorProtocol.js} +0 -0
- /package/dist/{pluginExecutorSupervisor.d.ts → plugins/runtime/pluginExecutorSupervisor.d.ts} +0 -0
- /package/dist/{pluginExecutorSupervisor.js → plugins/runtime/pluginExecutorSupervisor.js} +0 -0
- /package/dist/{pluginHost.js → plugins/runtime/pluginHost.js} +0 -0
- /package/dist/{pluginHostFiles.d.ts → plugins/runtime/pluginHostFiles.d.ts} +0 -0
- /package/dist/{pluginHostFiles.js → plugins/runtime/pluginHostFiles.js} +0 -0
- /package/dist/{pluginHostPaths.d.ts → plugins/runtime/pluginHostPaths.d.ts} +0 -0
- /package/dist/{pluginHostServer.d.ts → plugins/runtime/pluginHostServer.d.ts} +0 -0
- /package/dist/{pluginModelCatalog.js → plugins/runtime/pluginModelCatalog.js} +0 -0
- /package/dist/{pluginModelSessions.d.ts → plugins/runtime/pluginModelSessions.d.ts} +0 -0
- /package/dist/{pluginProcessTree.d.ts → plugins/runtime/pluginProcessTree.d.ts} +0 -0
- /package/dist/{pluginProcessTree.js → plugins/runtime/pluginProcessTree.js} +0 -0
- /package/dist/{pluginRuntimeCleanup.d.ts → plugins/runtime/pluginRuntimeCleanup.d.ts} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { pluginStateSignature } from '
|
|
1
|
+
import { pluginStateSignature } from '../sdk/pluginStateDefinition.js';
|
|
2
2
|
import { readFileSync } from 'node:fs';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import { findPluginRegistration } from '
|
|
4
|
+
import { findPluginRegistration } from '../pluginRegistry.js';
|
|
5
5
|
import { pluginHostPaths } from './pluginHostPaths.js';
|
|
6
6
|
import { capturePluginRevision } from './pluginRevision.js';
|
|
7
7
|
import { PluginStateStore } from './pluginStateStore.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PluginStateCollection, PluginStateEntry, PluginStateTransaction } from '
|
|
1
|
+
import type { PluginStateCollection, PluginStateEntry, PluginStateTransaction } from '../../generated/plugin-state.js';
|
|
2
2
|
export interface PluginStateNamespace {
|
|
3
3
|
installationId: string;
|
|
4
4
|
collection: string;
|
|
@@ -3,7 +3,6 @@ import { existsSync, readFileSync, readdirSync, statSync, rmSync } from 'node:fs
|
|
|
3
3
|
import { join, sep } from 'node:path';
|
|
4
4
|
import { pluginHostPaths } from './pluginHostPaths.js';
|
|
5
5
|
import { writePluginHostFile } from './pluginHostFiles.js';
|
|
6
|
-
import { compilePluginStateSchema } from './pluginStateDefinition.js';
|
|
7
6
|
function fail(code, message) {
|
|
8
7
|
throw Object.assign(new Error(message), { code });
|
|
9
8
|
}
|
|
@@ -316,7 +315,6 @@ export class PluginStateStore {
|
|
|
316
315
|
else
|
|
317
316
|
delete entry.expiresAt;
|
|
318
317
|
}
|
|
319
|
-
const validate = compilePluginStateSchema(definition.schema);
|
|
320
318
|
for (const operation of input.operations) {
|
|
321
319
|
key(operation.key);
|
|
322
320
|
if (names.has(operation.key) ||
|
|
@@ -328,9 +326,9 @@ export class PluginStateStore {
|
|
|
328
326
|
delete entries[operation.key];
|
|
329
327
|
continue;
|
|
330
328
|
}
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
fail('
|
|
329
|
+
const json = JSON.stringify(operation.value);
|
|
330
|
+
if (json === undefined || Buffer.byteLength(json) > 256 * 1024)
|
|
331
|
+
fail('PLUGIN_STATE_INVALID', 'State value must be JSON within 256 KiB');
|
|
334
332
|
const ttl = operation.ttlMs ?? definition.ttlMs ?? 86400000;
|
|
335
333
|
if (definition.storage === 'persistent' && operation.ttlMs !== undefined)
|
|
336
334
|
fail('PLUGIN_STATE_INVALID', 'Persistent state does not accept TTL');
|
|
@@ -342,9 +340,6 @@ export class PluginStateStore {
|
|
|
342
340
|
...(definition.storage !== 'persistent' ? { expiresAt: now + ttl } : {}),
|
|
343
341
|
};
|
|
344
342
|
}
|
|
345
|
-
for (const entry of Object.values(entries))
|
|
346
|
-
if (!validate(entry.value))
|
|
347
|
-
fail('PLUGIN_STATE_SCHEMA_INVALID', 'Migration leaves entries incompatible with the target schema');
|
|
348
343
|
const commit = {
|
|
349
344
|
revision,
|
|
350
345
|
schemaVersion: definition.schemaVersion,
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import type { PluginModelCatalog } from './pluginModelCatalog.js';
|
|
2
2
|
import type { PluginStateManager } from './pluginStateManager.js';
|
|
3
3
|
import type { PluginPageManager } from './pluginPageManager.js';
|
|
4
|
-
import type { PluginStateDeclaration } from '
|
|
5
|
-
import type { PluginTaskCheckpoint, PluginTaskRecoveryContext, PluginTaskRecoveryDeclaration } from '
|
|
4
|
+
import type { PluginStateDeclaration } from '../../generated/plugin-state.js';
|
|
5
|
+
import type { PluginTaskCheckpoint, PluginTaskRecoveryContext, PluginTaskRecoveryDeclaration } from '../../generated/plugin-recovery.js';
|
|
6
6
|
import { executeRegisteredPlugin } from './pluginExecutor.js';
|
|
7
7
|
import { capturePluginRevision } from './pluginRevision.js';
|
|
8
8
|
import type { PluginRevision } from './pluginRevision.js';
|
|
9
9
|
import { PluginTaskStore } from './pluginTaskStore.js';
|
|
10
|
-
import type { PluginTask, PluginTaskStartResult, PluginTaskListResult } from '
|
|
11
|
-
import type { PluginTaskScope, PluginTaskStartRequest, PluginTaskResumeRequest } from '
|
|
12
|
-
import type { PluginInvocationIdentity } from '
|
|
13
|
-
import type { PluginPageTarget } from '
|
|
14
|
-
import type { PluginOptions } from '
|
|
15
|
-
import type { PluginPageBinding } from '
|
|
16
|
-
import type { PluginPageRuntime } from '
|
|
10
|
+
import type { PluginTask, PluginTaskStartResult, PluginTaskListResult } from '../../generated/plugin-tasks.js';
|
|
11
|
+
import type { PluginTaskScope, PluginTaskStartRequest, PluginTaskResumeRequest } from '../pluginTaskProtocol.js';
|
|
12
|
+
import type { PluginInvocationIdentity } from '../../generated/plugin-execution.js';
|
|
13
|
+
import type { PluginPageTarget } from '../../generated/plugin-pages.js';
|
|
14
|
+
import type { PluginOptions } from '../sdk/plugin.js';
|
|
15
|
+
import type { PluginPageBinding } from '../../generated/plugin-pages.js';
|
|
16
|
+
import type { PluginPageRuntime } from '../../generated/plugin-pages.js';
|
|
17
17
|
export interface PluginTaskBridge {
|
|
18
18
|
id: string;
|
|
19
19
|
scope: PluginTaskScope;
|
|
@@ -37,7 +37,7 @@ export interface PluginTaskServices {
|
|
|
37
37
|
export declare class PluginTaskManager {
|
|
38
38
|
private readonly configuration;
|
|
39
39
|
private readonly services?;
|
|
40
|
-
readonly host: import("./
|
|
40
|
+
readonly host: import("./pluginExecution.js").PluginExecutionHost;
|
|
41
41
|
readonly store: PluginTaskStore;
|
|
42
42
|
private readonly changes;
|
|
43
43
|
private readonly queue;
|
|
@@ -78,8 +78,8 @@ export declare class PluginTaskManager {
|
|
|
78
78
|
private resumeAttempt;
|
|
79
79
|
private assertExecutionTreeStopped;
|
|
80
80
|
cancel(taskId: string, scope: PluginTaskScope): PluginTask;
|
|
81
|
-
events(taskId: string, scope: PluginTaskScope, cursor: number, waitMs?: number, signal?: AbortSignal): Promise<import("
|
|
82
|
-
resultChunk(taskId: string, scope: PluginTaskScope, index: number): import("
|
|
81
|
+
events(taskId: string, scope: PluginTaskScope, cursor: number, waitMs?: number, signal?: AbortSignal): Promise<import("../../generated/plugin-tasks.js").PluginTaskEvents>;
|
|
82
|
+
resultChunk(taskId: string, scope: PluginTaskScope, index: number): import("../../generated/plugin-tasks.js").PluginTaskResultChunk;
|
|
83
83
|
private update;
|
|
84
84
|
private drain;
|
|
85
85
|
private execute;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { normalizeModelDiagnostic, diagnosticBinding } from './pluginDiagnostics.js';
|
|
2
|
-
import { pluginModelCapabilities, normalizePluginModel, validatePluginModelResult, } from '
|
|
3
|
-
import { pluginRecoverySignature } from '
|
|
4
|
-
import { compilePluginStateSchema } from './pluginStateDefinition.js';
|
|
2
|
+
import { pluginModelCapabilities, normalizePluginModel, validatePluginModelResult, } from '../sdk/pluginModelDefinition.js';
|
|
3
|
+
import { pluginRecoverySignature } from '../sdk/pluginRecoveryDefinition.js';
|
|
5
4
|
import { createHash, randomUUID } from 'node:crypto';
|
|
6
5
|
import { EventEmitter } from 'node:events';
|
|
7
6
|
import { isAbsolute, join, relative, sep } from 'node:path';
|
|
@@ -12,9 +11,9 @@ import { serializePluginExecutionError, pluginExecutionError } from './pluginExe
|
|
|
12
11
|
import { capturePluginRevision, prunePluginRevisions, restorePluginRevision, } from './pluginRevision.js';
|
|
13
12
|
import { pluginHostPaths } from './pluginHostPaths.js';
|
|
14
13
|
import { PluginTaskStore, pluginTaskExecutionUnconfirmed } from './pluginTaskStore.js';
|
|
15
|
-
import { isPluginTaskActive } from '
|
|
16
|
-
import { UnifiedClient, decodeBrowserTarget } from '
|
|
17
|
-
import { COMMAND_MAP } from '
|
|
14
|
+
import { isPluginTaskActive } from '../../generated/plugin-tasks.js';
|
|
15
|
+
import { UnifiedClient, decodeBrowserTarget } from '../../unified.js';
|
|
16
|
+
import { COMMAND_MAP } from '../../commands.js';
|
|
18
17
|
function error(code, message) {
|
|
19
18
|
return Object.assign(new Error(message), { code });
|
|
20
19
|
}
|
|
@@ -482,8 +481,7 @@ export class PluginTaskManager {
|
|
|
482
481
|
signal.throwIfAborted();
|
|
483
482
|
if (!sourceDefinition ||
|
|
484
483
|
sourceDefinition.checkpointVersion !== record.checkpoint.version ||
|
|
485
|
-
digest(sourceDefinition.schema) !== record.checkpoint.schemaHash
|
|
486
|
-
!compilePluginStateSchema(sourceDefinition.schema)(record.checkpoint.data))
|
|
484
|
+
digest(sourceDefinition.schema) !== record.checkpoint.schemaHash)
|
|
487
485
|
throw error('PLUGIN_TASK_RECOVERY_UNAVAILABLE', 'Checkpoint does not match the retained recovery declaration');
|
|
488
486
|
let checkpoint = structuredClone(record.checkpoint);
|
|
489
487
|
let declarationHash = pluginRecoverySignature(sourceDefinition);
|
|
@@ -542,8 +540,6 @@ export class PluginTaskManager {
|
|
|
542
540
|
data: JSON.parse(json),
|
|
543
541
|
};
|
|
544
542
|
}
|
|
545
|
-
if (!compilePluginStateSchema(target.schema)(checkpoint.data))
|
|
546
|
-
throw error('PLUGIN_TASK_CHECKPOINT_INVALID', 'Migrated checkpoint does not match the target schema');
|
|
547
543
|
}
|
|
548
544
|
signal.throwIfAborted();
|
|
549
545
|
// Admission is synchronous after both immutable snapshots and execution ownership are verified.
|
|
@@ -809,8 +805,8 @@ export class PluginTaskManager {
|
|
|
809
805
|
if (declaration &&
|
|
810
806
|
payload.expectedDeclaration !== pluginRecoverySignature(declaration))
|
|
811
807
|
throw error('PLUGIN_RECOVERY_DECLARATION_CHANGED', 'Checkpoint declaration differs from the executing command');
|
|
812
|
-
if (!declaration
|
|
813
|
-
throw error('PLUGIN_TASK_CHECKPOINT_INVALID', 'Checkpoint is undeclared
|
|
808
|
+
if (!declaration)
|
|
809
|
+
throw error('PLUGIN_TASK_CHECKPOINT_INVALID', 'Checkpoint is undeclared');
|
|
814
810
|
const current = this.store.read(taskId);
|
|
815
811
|
if (current.task.state !== 'running' ||
|
|
816
812
|
payload.expectedSequence !== (current.checkpoint?.sequence ?? 0))
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { PluginTaskDiagnosticMetadata } from '
|
|
2
|
-
import type { PluginTask, PluginTaskEvent, PluginTaskEvents, PluginTaskResultChunk } from '
|
|
3
|
-
import type { PluginTaskCheckpoint } from '
|
|
4
|
-
import type { PluginOptions } from '
|
|
1
|
+
import type { PluginTaskDiagnosticMetadata } from '../../generated/plugin-diagnostics.js';
|
|
2
|
+
import type { PluginTask, PluginTaskEvent, PluginTaskEvents, PluginTaskResultChunk } from '../../generated/plugin-tasks.js';
|
|
3
|
+
import type { PluginTaskCheckpoint } from '../../generated/plugin-recovery.js';
|
|
4
|
+
import type { PluginOptions } from '../sdk/plugin.js';
|
|
5
5
|
export declare const PLUGIN_TASK_RESULT_CHUNK_BYTES: number;
|
|
6
6
|
export interface PluginTaskRecord {
|
|
7
7
|
task: PluginTask;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { closeSync, openSync, opendirSync, readFileSync, readSync, readdirSync, rmSync, statSync, } from 'node:fs';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import { isPluginTaskActive, isPluginTaskId } from '
|
|
4
|
+
import { isPluginTaskActive, isPluginTaskId } from '../../generated/plugin-tasks.js';
|
|
5
5
|
import { writePluginHostFile } from './pluginHostFiles.js';
|
|
6
6
|
import { pluginHostPaths } from './pluginHostPaths.js';
|
|
7
7
|
import { isProcessGroupAlive, isProcessOwnerAlive } from '@mearl/daemon-core';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PluginOptions, PluginApp } from '
|
|
1
|
+
import type { PluginOptions, PluginApp } from '../sdk/plugin.js';
|
|
2
2
|
import type { PluginCommandContext } from './pluginExecution.js';
|
|
3
3
|
export interface PythonPluginCommand {
|
|
4
4
|
description: string;
|
|
@@ -28,4 +28,4 @@ export interface PythonPluginApp {
|
|
|
28
28
|
progress(message: string): void;
|
|
29
29
|
}
|
|
30
30
|
export declare function describePythonPlugin(entry: string, options: Readonly<PluginOptions>): Promise<PythonPluginDescriptor>;
|
|
31
|
-
export declare function runPythonPluginCommand(entry: string, command: string, input: Record<string, any> | import('
|
|
31
|
+
export declare function runPythonPluginCommand(entry: string, command: string, input: Record<string, any> | import('../../generated/plugin-recovery.js').PluginCheckpointMigrationInput, app: PythonPluginApp, context: PluginCommandContext, recovery?: boolean | 'migration', expectedDescriptor?: PythonPluginDescriptor, runtimeOnly?: boolean): Promise<unknown>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { pluginRecoverySignature } from '
|
|
1
|
+
import { pluginRecoverySignature } from '../sdk/pluginRecoveryDefinition.js';
|
|
2
2
|
import { spawn } from 'node:child_process';
|
|
3
3
|
import { createInterface } from 'node:readline';
|
|
4
|
-
import { PluginError } from '
|
|
4
|
+
import { PluginError } from '../pluginRegistry.js';
|
|
5
5
|
import { pluginExecutionError, serializePluginExecutionError } from './pluginExecutorProtocol.js';
|
|
6
6
|
const STDERR_LIMIT = 64 * 1024;
|
|
7
7
|
// Bootstrap 随 Node client 分发,Python 插件无需额外安装宿主 SDK。
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type { PluginTaskRecoveryDeclaration, PluginTaskCheckpoint, PluginCheckpointMigrationInput } from '../../generated/plugin-recovery.js';
|
|
2
|
+
import type { PluginStateDeclaration } from '../../generated/plugin-state.js';
|
|
3
|
+
import type { PluginModelRequest, PluginModelResult } from '../../generated/plugin-models.js';
|
|
4
|
+
import type { PluginPageRuntime } from '../../generated/plugin-pages.js';
|
|
5
|
+
import type { AppProfileContribution } from '../../generated/app-profile-definition.js';
|
|
6
|
+
export type { AppProfileContribution, AppProfileDefinition, } from '../../generated/app-profile-definition.js';
|
|
7
|
+
export { invokePageEvalWithArgs } from '../../pageEvalArguments.js';
|
|
8
|
+
import { type OfficialPluginInstaller } from '../officialPluginInstaller.js';
|
|
9
|
+
import { type PluginToolboxContribution, type PluginRegistration } from '../pluginRegistry.js';
|
|
10
|
+
import { type PluginCommandContext, type PluginInvocationIdentity, type PluginInvocationSource } from '../runtime/pluginExecution.js';
|
|
11
|
+
import type { UnifiedInvokeOptions } from '../../unified.js';
|
|
12
|
+
export type { PluginCommandContext, PluginExecutionHost, PluginInvocationIdentity, PluginInvocationSource, } from '../runtime/pluginExecution.js';
|
|
13
|
+
export { executeRegisteredPlugin, type PluginExecutorOptions, type PluginExecutorDependencies, } from '../runtime/pluginExecutor.js';
|
|
14
|
+
export { PluginTaskClient } from '../clients/pluginTasks.js';
|
|
15
|
+
export { cleanupPluginRuntime } from '../runtime/pluginRuntimeCleanup.js';
|
|
16
|
+
export { PluginPageClient } from '../clients/pluginPages.js';
|
|
17
|
+
export { assertPluginName, findPluginDirectoryEntry, findPluginEntry, findPluginRegistration, listPluginNames, pluginDirectory, registerPlugin, resolvePluginEntry, unregisterPlugin, PluginError, readPluginPageBundleChunk, type PluginRegistration, type PluginRegistrationOptions, type PluginToolboxAgentConfig, type PluginPageBundleRegistration, type PluginToolboxContribution, type PluginToolboxLocale, type PluginToolboxSandboxPage, } from '../pluginRegistry.js';
|
|
18
|
+
export { findOfficialPlugin, listOfficialPluginNames, OFFICIAL_PLUGIN_MANAGER, OFFICIAL_PLUGINS, type OfficialPluginDefinition, type OfficialPluginName, } from '../officialPluginCatalog.js';
|
|
19
|
+
export type PluginOptions = UnifiedInvokeOptions;
|
|
20
|
+
export interface StructuredPluginProgress {
|
|
21
|
+
message: string;
|
|
22
|
+
data?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
export type PluginProgress = string | StructuredPluginProgress;
|
|
25
|
+
export interface PluginInvocation {
|
|
26
|
+
command: string;
|
|
27
|
+
input: Record<string, any>;
|
|
28
|
+
}
|
|
29
|
+
export interface PluginInvokeOptions extends UnifiedInvokeOptions {
|
|
30
|
+
onProgress?: (progress: PluginProgress) => void;
|
|
31
|
+
signal?: AbortSignal;
|
|
32
|
+
/** Audit label supplied by the entry point, never an authorization decision. */
|
|
33
|
+
source?: PluginInvocationSource;
|
|
34
|
+
}
|
|
35
|
+
export interface PluginExecutionContext {
|
|
36
|
+
runModel?(plugin: string, request: PluginModelRequest, options: Pick<PluginInvokeOptions, 'signal' | 'onProgress'>): Promise<PluginModelResult>;
|
|
37
|
+
ensurePlugin?: OfficialPluginInstaller;
|
|
38
|
+
source?: PluginInvocationSource;
|
|
39
|
+
parentInvocation?: PluginInvocationIdentity;
|
|
40
|
+
invocation?: PluginInvocationIdentity;
|
|
41
|
+
resolveRegistration?: (name: string) => PluginRegistration | undefined;
|
|
42
|
+
invoke(action: string, payload?: Record<string, any>, options?: UnifiedInvokeOptions, onProgress?: PluginInvokeOptions['onProgress']): Promise<any>;
|
|
43
|
+
}
|
|
44
|
+
export interface PluginApp {
|
|
45
|
+
readonly options: Readonly<PluginOptions>;
|
|
46
|
+
/** Examples omit the `mearl <plugin>` prefix, which help adds when displayed. */
|
|
47
|
+
command(signature: string, handler: PluginHandler, description?: string, examples?: string[]): void;
|
|
48
|
+
/** Registers a page-only command, also declared in toolbox.page.commands. */
|
|
49
|
+
state(collection: string, operation: string, input?: Record<string, unknown>): Promise<any>;
|
|
50
|
+
model(request: PluginModelRequest, options?: Pick<PluginInvokeOptions, 'onProgress'>): Promise<PluginModelResult>;
|
|
51
|
+
runtimeCommand(signature: string, handler: PluginHandler, description?: string, examples?: string[]): void;
|
|
52
|
+
recoveryCommand(command: string, handler: PluginHandler): void;
|
|
53
|
+
checkpointMigration(command: string, handler: (input: PluginCheckpointMigrationInput, context: PluginCommandContext) => unknown | Promise<unknown>): void;
|
|
54
|
+
checkpoint(data: unknown, expectedSequence: number): Promise<PluginTaskCheckpoint>;
|
|
55
|
+
page(operation: string, input?: Record<string, unknown>): Promise<any>;
|
|
56
|
+
toolboxCommand(signature: string, handler: PluginHandler, description?: string, examples?: string[]): void;
|
|
57
|
+
invoke(action: string, payload?: Record<string, any>, options?: UnifiedInvokeOptions): Promise<any>;
|
|
58
|
+
progress(progress: PluginProgress): void;
|
|
59
|
+
}
|
|
60
|
+
export type PluginHandler = (input: Record<string, any>, context: PluginCommandContext) => unknown | Promise<unknown>;
|
|
61
|
+
/** 工具列表仅检查入口;页面资源只在打开对应工具时检查。 */
|
|
62
|
+
export declare function refreshRegisteredPlugin(name: string, includePage?: boolean): Promise<PluginRegistration | undefined>;
|
|
63
|
+
/** 注册和执行复用同一宿主能力边界;仅 handler 执行期间开放浏览器调用。 */
|
|
64
|
+
export declare function loadPlugin(entry: string, context: Pick<PluginApp, 'options' | 'progress'> & {
|
|
65
|
+
invoke: PluginExecutionContext['invoke'];
|
|
66
|
+
source?: PluginInvocationSource;
|
|
67
|
+
parentInvocation?: PluginInvocationIdentity;
|
|
68
|
+
invocation?: PluginInvocationIdentity;
|
|
69
|
+
signal?: AbortSignal;
|
|
70
|
+
runModel?: PluginExecutionContext['runModel'];
|
|
71
|
+
onInvocation?: (identity: PluginInvocationIdentity | undefined) => void;
|
|
72
|
+
}, pluginName?: string): Promise<{
|
|
73
|
+
name: string | undefined;
|
|
74
|
+
description: string | undefined;
|
|
75
|
+
toolbox: PluginToolboxContribution | undefined;
|
|
76
|
+
pageRuntime: PluginPageRuntime | undefined;
|
|
77
|
+
stateStorage: PluginStateDeclaration | undefined;
|
|
78
|
+
taskRecovery: PluginTaskRecoveryDeclaration | undefined;
|
|
79
|
+
appProfiles: AppProfileContribution | undefined;
|
|
80
|
+
profileSources: Record<string, string> | undefined;
|
|
81
|
+
version: string | undefined;
|
|
82
|
+
commandHelp(namespace: string): string;
|
|
83
|
+
help(namespace: string, name?: string): string;
|
|
84
|
+
run(positionals: string[], payload?: unknown, namedInput?: Record<string, unknown>): Promise<unknown>;
|
|
85
|
+
runRuntime(invocation: PluginInvocation): Promise<unknown>;
|
|
86
|
+
runRecovery(invocation: PluginInvocation): Promise<unknown>;
|
|
87
|
+
runMigration(invocation: PluginInvocation): Promise<unknown>;
|
|
88
|
+
runToolbox(invocation: PluginInvocation): Promise<unknown>;
|
|
89
|
+
}>;
|
|
90
|
+
export declare function loadRegisteredPlugin(name: string, context: PluginExecutionContext, options?: PluginInvokeOptions): Promise<{
|
|
91
|
+
name: string | undefined;
|
|
92
|
+
description: string | undefined;
|
|
93
|
+
toolbox: PluginToolboxContribution | undefined;
|
|
94
|
+
pageRuntime: PluginPageRuntime | undefined;
|
|
95
|
+
stateStorage: PluginStateDeclaration | undefined;
|
|
96
|
+
taskRecovery: PluginTaskRecoveryDeclaration | undefined;
|
|
97
|
+
appProfiles: AppProfileContribution | undefined;
|
|
98
|
+
profileSources: Record<string, string> | undefined;
|
|
99
|
+
version: string | undefined;
|
|
100
|
+
commandHelp(namespace: string): string;
|
|
101
|
+
help(namespace: string, name?: string): string;
|
|
102
|
+
run(positionals: string[], payload?: unknown, namedInput?: Record<string, unknown>): Promise<unknown>;
|
|
103
|
+
runRuntime(invocation: PluginInvocation): Promise<unknown>;
|
|
104
|
+
runRecovery(invocation: PluginInvocation): Promise<unknown>;
|
|
105
|
+
runMigration(invocation: PluginInvocation): Promise<unknown>;
|
|
106
|
+
runToolbox(invocation: PluginInvocation): Promise<unknown>;
|
|
107
|
+
}>;
|
|
108
|
+
export declare function invokeRegisteredPlugin(name: string, invocation: PluginInvocation, context: PluginExecutionContext, options?: PluginInvokeOptions): Promise<unknown>;
|
|
109
|
+
/** Entry point for the native toolbox service; nested plugin calls retain public-command access. */
|
|
110
|
+
export declare function invokeRegisteredToolboxPlugin(name: string, invocation: PluginInvocation, context: PluginExecutionContext, options?: PluginInvokeOptions): Promise<unknown>;
|
|
111
|
+
export declare function invokeRegisteredRuntimePlugin(name: string, invocation: PluginInvocation, context: PluginExecutionContext, options?: PluginInvokeOptions): Promise<unknown>;
|
|
112
|
+
export declare function invokeRegisteredRecoveryPlugin(name: string, invocation: PluginInvocation, context: PluginExecutionContext, options?: PluginInvokeOptions): Promise<unknown>;
|
|
113
|
+
export { PluginStateClient } from '../clients/pluginState.js';
|
|
114
|
+
export { PluginModelClient } from '../clients/pluginModels.js';
|
|
115
|
+
export type * from '../../generated/plugin-state.js';
|
|
116
|
+
export type * from '../../generated/plugin-models.js';
|
|
117
|
+
export type * from '../../generated/plugin-recovery.js';
|
|
118
|
+
export type * from '../../generated/plugin-diagnostics.js';
|