@vibesdotdev/integrations-meta 0.0.0-stage → 1.0.0-rc.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/LICENSE +126 -0
- package/README.md +38 -2
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +5 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/metadata/provider-models/meta/meta-muse-spark-1-1.json +18 -0
- package/dist/ai/metadata/provider-models/meta/meta-muse-spark-1-2-contributor.json +18 -0
- package/dist/ai/metadata/provider-models/meta/meta-muse-spark-1-2.json +18 -0
- package/dist/ai/metadata/provider-models/meta/meta-muse-spark-1-3-contributor.json +18 -0
- package/dist/ai/metadata/provider-models/meta/meta-muse-spark-1-3.json +18 -0
- package/dist/ai/metadata/providers/meta.json +8 -0
- package/dist/ai/muse-client.consumer.d.ts +10 -0
- package/dist/ai/muse-client.consumer.d.ts.map +1 -0
- package/dist/ai/muse-client.consumer.js +31 -0
- package/dist/ai/muse-client.consumer.js.map +1 -0
- package/dist/ai/provider.cloud.plugin.d.ts +6 -0
- package/dist/ai/provider.cloud.plugin.d.ts.map +1 -0
- package/dist/ai/provider.cloud.plugin.js +110 -0
- package/dist/ai/provider.cloud.plugin.js.map +1 -0
- package/dist/ai/provider.consumer.plugin.d.ts +3 -0
- package/dist/ai/provider.consumer.plugin.d.ts.map +1 -0
- package/dist/ai/provider.consumer.plugin.js +23 -0
- package/dist/ai/provider.consumer.plugin.js.map +1 -0
- package/dist/ai/provider.plugin.d.ts +6 -0
- package/dist/ai/provider.plugin.d.ts.map +1 -0
- package/dist/ai/provider.plugin.js +17 -0
- package/dist/ai/provider.plugin.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/meta/config/config.meta.descriptor.d.ts +4194 -0
- package/dist/ai/providers/cloud/frontier/meta/config/config.meta.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/meta/config/config.meta.descriptor.js +13 -0
- package/dist/ai/providers/cloud/frontier/meta/config/config.meta.descriptor.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/meta/config/schemas/index.d.ts +39 -0
- package/dist/ai/providers/cloud/frontier/meta/config/schemas/index.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/meta/config/schemas/index.js +34 -0
- package/dist/ai/providers/cloud/frontier/meta/config/schemas/index.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/meta/index.d.ts +5 -0
- package/dist/ai/providers/cloud/frontier/meta/index.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/meta/index.js +4 -0
- package/dist/ai/providers/cloud/frontier/meta/index.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/meta/provider.meta.descriptor.d.ts +183 -0
- package/dist/ai/providers/cloud/frontier/meta/provider.meta.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/meta/provider.meta.descriptor.js +97 -0
- package/dist/ai/providers/cloud/frontier/meta/provider.meta.descriptor.js.map +1 -0
- package/dist/ai/providers/meta/detection/system.d.ts +8 -0
- package/dist/ai/providers/meta/detection/system.d.ts.map +1 -0
- package/dist/ai/providers/meta/detection/system.js +16 -0
- package/dist/ai/providers/meta/detection/system.js.map +1 -0
- package/dist/ai/providers/meta/docs/ai.providers.meta.docs.descriptor.d.ts +4 -0
- package/dist/ai/providers/meta/docs/ai.providers.meta.docs.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/meta/docs/ai.providers.meta.docs.descriptor.js +20 -0
- package/dist/ai/providers/meta/docs/ai.providers.meta.docs.descriptor.js.map +1 -0
- package/dist/ai/providers/meta/index.d.ts +7 -0
- package/dist/ai/providers/meta/index.d.ts.map +1 -0
- package/dist/ai/providers/meta/index.js +6 -0
- package/dist/ai/providers/meta/index.js.map +1 -0
- package/dist/ai/providers/meta/meta-known-models.d.ts +3 -0
- package/dist/ai/providers/meta/meta-known-models.d.ts.map +1 -0
- package/dist/ai/providers/meta/meta-known-models.js +2 -0
- package/dist/ai/providers/meta/meta-known-models.js.map +1 -0
- package/dist/ai/providers/meta/meta.provider.impl.d.ts +42 -0
- package/dist/ai/providers/meta/meta.provider.impl.d.ts.map +1 -0
- package/dist/ai/providers/meta/meta.provider.impl.js +269 -0
- package/dist/ai/providers/meta/meta.provider.impl.js.map +1 -0
- package/dist/ai/providers/meta/muse-server/client.d.ts +66 -0
- package/dist/ai/providers/meta/muse-server/client.d.ts.map +1 -0
- package/dist/ai/providers/meta/muse-server/client.js +209 -0
- package/dist/ai/providers/meta/muse-server/client.js.map +1 -0
- package/dist/ai/providers/meta/muse-server/connection.d.ts +77 -0
- package/dist/ai/providers/meta/muse-server/connection.d.ts.map +1 -0
- package/dist/ai/providers/meta/muse-server/connection.js +174 -0
- package/dist/ai/providers/meta/muse-server/connection.js.map +1 -0
- package/dist/ai/providers/meta/muse-server/failure-chunk.d.ts +10 -0
- package/dist/ai/providers/meta/muse-server/failure-chunk.d.ts.map +1 -0
- package/dist/ai/providers/meta/muse-server/failure-chunk.js +33 -0
- package/dist/ai/providers/meta/muse-server/failure-chunk.js.map +1 -0
- package/dist/ai/providers/meta/muse-server/index.d.ts +9 -0
- package/dist/ai/providers/meta/muse-server/index.d.ts.map +1 -0
- package/dist/ai/providers/meta/muse-server/index.js +9 -0
- package/dist/ai/providers/meta/muse-server/index.js.map +1 -0
- package/dist/ai/providers/meta/muse-server/muse-failure.d.ts +189 -0
- package/dist/ai/providers/meta/muse-server/muse-failure.d.ts.map +1 -0
- package/dist/ai/providers/meta/muse-server/muse-failure.js +226 -0
- package/dist/ai/providers/meta/muse-server/muse-failure.js.map +1 -0
- package/dist/ai/providers/meta/muse-server/muse-messages.d.ts +19 -0
- package/dist/ai/providers/meta/muse-server/muse-messages.d.ts.map +1 -0
- package/dist/ai/providers/meta/muse-server/muse-messages.js +83 -0
- package/dist/ai/providers/meta/muse-server/muse-messages.js.map +1 -0
- package/dist/ai/providers/meta/muse-server/muse-server.spec.descriptor.d.ts +25 -0
- package/dist/ai/providers/meta/muse-server/muse-server.spec.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/meta/muse-server/muse-server.spec.descriptor.js +21 -0
- package/dist/ai/providers/meta/muse-server/muse-server.spec.descriptor.js.map +1 -0
- package/dist/ai/providers/meta/muse-server/muse-server.spec.impl.d.ts +33 -0
- package/dist/ai/providers/meta/muse-server/muse-server.spec.impl.d.ts.map +1 -0
- package/dist/ai/providers/meta/muse-server/muse-server.spec.impl.js +192 -0
- package/dist/ai/providers/meta/muse-server/muse-server.spec.impl.js.map +1 -0
- package/dist/ai/providers/meta/muse-server/muse-server.transport.descriptor.d.ts +13 -0
- package/dist/ai/providers/meta/muse-server/muse-server.transport.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/meta/muse-server/muse-server.transport.descriptor.js +11 -0
- package/dist/ai/providers/meta/muse-server/muse-server.transport.descriptor.js.map +1 -0
- package/dist/ai/providers/meta/muse-server/muse-server.transport.impl.consumer.d.ts +41 -0
- package/dist/ai/providers/meta/muse-server/muse-server.transport.impl.consumer.d.ts.map +1 -0
- package/dist/ai/providers/meta/muse-server/muse-server.transport.impl.consumer.js +103 -0
- package/dist/ai/providers/meta/muse-server/muse-server.transport.impl.consumer.js.map +1 -0
- package/dist/ai/providers/meta/muse-server/protocol.d.ts +138 -0
- package/dist/ai/providers/meta/muse-server/protocol.d.ts.map +1 -0
- package/dist/ai/providers/meta/muse-server/protocol.js +106 -0
- package/dist/ai/providers/meta/muse-server/protocol.js.map +1 -0
- package/dist/ai/providers/meta/muse-server/runtime-execution.d.ts +14 -0
- package/dist/ai/providers/meta/muse-server/runtime-execution.d.ts.map +1 -0
- package/dist/ai/providers/meta/muse-server/runtime-execution.js +39 -0
- package/dist/ai/providers/meta/muse-server/runtime-execution.js.map +1 -0
- package/dist/ai/providers/meta/muse-server/session.d.ts +19 -0
- package/dist/ai/providers/meta/muse-server/session.d.ts.map +1 -0
- package/dist/ai/providers/meta/muse-server/session.js +341 -0
- package/dist/ai/providers/meta/muse-server/session.js.map +1 -0
- package/dist/ai/providers/meta/muse-subscription.d.ts +38 -0
- package/dist/ai/providers/meta/muse-subscription.d.ts.map +1 -0
- package/dist/ai/providers/meta/muse-subscription.js +77 -0
- package/dist/ai/providers/meta/muse-subscription.js.map +1 -0
- package/dist/ai/providers/meta/recommendations.d.ts +26 -0
- package/dist/ai/providers/meta/recommendations.d.ts.map +1 -0
- package/dist/ai/providers/meta/recommendations.js +24 -0
- package/dist/ai/providers/meta/recommendations.js.map +1 -0
- package/dist/ai/providers/meta/schemas/index.d.ts +12 -0
- package/dist/ai/providers/meta/schemas/index.d.ts.map +1 -0
- package/dist/ai/providers/meta/schemas/index.js +8 -0
- package/dist/ai/providers/meta/schemas/index.js.map +1 -0
- package/dist/external/external.plugin.d.ts +3 -0
- package/dist/external/external.plugin.d.ts.map +1 -0
- package/dist/external/external.plugin.js +18 -0
- package/dist/external/external.plugin.js.map +1 -0
- package/dist/external/index.d.ts +2 -0
- package/dist/external/index.d.ts.map +1 -0
- package/dist/external/index.js +2 -0
- package/dist/external/index.js.map +1 -0
- package/dist/external/muse/index.d.ts +162 -0
- package/dist/external/muse/index.d.ts.map +1 -0
- package/dist/external/muse/index.js +7 -0
- package/dist/external/muse/index.js.map +1 -0
- package/dist/external/muse/manifest.d.ts +7 -0
- package/dist/external/muse/manifest.d.ts.map +1 -0
- package/dist/external/muse/manifest.js +25 -0
- package/dist/external/muse/manifest.js.map +1 -0
- package/dist/external/muse-subscription.operation.descriptors.d.ts +29 -0
- package/dist/external/muse-subscription.operation.descriptors.d.ts.map +1 -0
- package/dist/external/muse-subscription.operation.descriptors.js +12 -0
- package/dist/external/muse-subscription.operation.descriptors.js.map +1 -0
- package/dist/external/muse-subscription.operations.d.ts +3 -0
- package/dist/external/muse-subscription.operations.d.ts.map +1 -0
- package/dist/external/muse-subscription.operations.js +23 -0
- package/dist/external/muse-subscription.operations.js.map +1 -0
- package/dist/failure-outcome.d.ts +21 -0
- package/dist/failure-outcome.d.ts.map +1 -0
- package/dist/failure-outcome.js +22 -0
- package/dist/failure-outcome.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/package.json +103 -4
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { getRuntimeExecution } from '@vibesdotdev/kernel/execution';
|
|
3
|
+
import { assertNoPlaintextCredentials, resolveSecretReference, isCredentialReference } from '@vibesdotdev/ai/providers-runtime';
|
|
4
|
+
import { probeProviderHealth } from '@vibesdotdev/ai/providers-runtime/client';
|
|
5
|
+
import { executeGeneration } from '@vibesdotdev/ai/providers-runtime/utils/provider-type-helpers';
|
|
6
|
+
import { attempt } from "../../../failure-outcome.js";
|
|
7
|
+
import { metaAuthMethodSchema } from "../cloud/frontier/meta/config/schemas/index.js";
|
|
8
|
+
import { detectMetaSystem } from "./detection/system.js";
|
|
9
|
+
import { META_KNOWN_MODELS } from "./meta-known-models.js";
|
|
10
|
+
import { museFailure } from "./muse-server/muse-failure.js";
|
|
11
|
+
import { MUSE_SUBSCRIPTION_LOGIN_COMMAND, runMuseSubscriptionLogin } from "./muse-subscription.js";
|
|
12
|
+
export const META_DEFAULT_BASE_URL = 'https://api.meta.ai/v1';
|
|
13
|
+
/** The deadline of an API health probe that the caller does not declare. */
|
|
14
|
+
const DEFAULT_HEALTH_TIMEOUT_MS = 5_000;
|
|
15
|
+
/** The probe's own bounds; a declared timeout outside them is not the caller's to choose. */
|
|
16
|
+
const ProbeTimeoutSchema = z.int().min(1).max(600_000);
|
|
17
|
+
/**
|
|
18
|
+
* What health and authentication read of a connection, read once. `authMethod`
|
|
19
|
+
* is the connection schema's own field, so a connection that names none is the
|
|
20
|
+
* Muse subscription here exactly as it is in the connection form and in
|
|
21
|
+
* `validateConnection`.
|
|
22
|
+
*/
|
|
23
|
+
const HealthConfigSchema = z.object({
|
|
24
|
+
authMethod: metaAuthMethodSchema,
|
|
25
|
+
apiKey: z.unknown().optional(),
|
|
26
|
+
baseUrl: z.unknown().optional()
|
|
27
|
+
});
|
|
28
|
+
/** What validation reads of a connection, read once; the values are checked one by one afterwards. */
|
|
29
|
+
const ValidationConfigSchema = z.object({
|
|
30
|
+
authMethod: z.unknown().optional(),
|
|
31
|
+
tokenSource: z.unknown().optional(),
|
|
32
|
+
apiKey: z.unknown().optional(),
|
|
33
|
+
accessToken: z.unknown().optional(),
|
|
34
|
+
refreshToken: z.unknown().optional(),
|
|
35
|
+
baseUrl: z.unknown().optional()
|
|
36
|
+
});
|
|
37
|
+
/** A base URL the connection names: text that parses as a URL. */
|
|
38
|
+
const BaseUrlSchema = z.string().refine((value) => URL.canParse(value));
|
|
39
|
+
export default class MetaProviderType {
|
|
40
|
+
descriptor;
|
|
41
|
+
context;
|
|
42
|
+
constructor(descriptor, context) {
|
|
43
|
+
this.descriptor = descriptor;
|
|
44
|
+
this.context = context;
|
|
45
|
+
}
|
|
46
|
+
generate(provider, model, request, options) {
|
|
47
|
+
return executeGeneration(this.context, provider, model, request, options);
|
|
48
|
+
}
|
|
49
|
+
async detectInstalled() {
|
|
50
|
+
const detected = await detectMetaSystem(this.context.runtime);
|
|
51
|
+
return detected ? [{ name: detected.name, source: 'system', config: detected.configuration ?? {} }] : [];
|
|
52
|
+
}
|
|
53
|
+
async recommendModels(useCase) {
|
|
54
|
+
return META_KNOWN_MODELS.filter((model) => useCase === 'vision' || useCase === 'images' ? model.isVision : true).map((model, index) => ({
|
|
55
|
+
modelId: `meta:${model.id}`,
|
|
56
|
+
modelName: model.displayName,
|
|
57
|
+
score: 96 - index * 4,
|
|
58
|
+
reason: model.description,
|
|
59
|
+
capabilities: model.capabilities,
|
|
60
|
+
contextWindow: model.tokenLimit,
|
|
61
|
+
maxOutputTokens: model.maxOutputTokens,
|
|
62
|
+
useCaseFit: 96 - index * 4
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
async resolveCredential(connection, options) {
|
|
66
|
+
assertNoPlaintextCredentials({ apiKey: connection.apiKey });
|
|
67
|
+
const reference = connection.apiKey;
|
|
68
|
+
if (!isCredentialReference(reference) || reference.source === 'inline')
|
|
69
|
+
return undefined;
|
|
70
|
+
if (options?.resolveCredential)
|
|
71
|
+
return options.resolveCredential(reference);
|
|
72
|
+
return resolveSecretReference(reference, this.context.runtime);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A host that composes no execution kind (a cloud host, or a consumer host
|
|
76
|
+
* without one) runs no Muse. A composed execution provider that is
|
|
77
|
+
* unavailable or fails is an owner failure and propagates typed.
|
|
78
|
+
*/
|
|
79
|
+
async resolveExecution() {
|
|
80
|
+
if (this.isCloudRuntime() || !this.context.runtime.hasKind('runtime/execution'))
|
|
81
|
+
return null;
|
|
82
|
+
return getRuntimeExecution(this.context.runtime);
|
|
83
|
+
}
|
|
84
|
+
isCloudRuntime() {
|
|
85
|
+
return this.context.runtime.scope?.hardware === 'cloud';
|
|
86
|
+
}
|
|
87
|
+
/** The connection as health reads it, or the typed refusal for one that cannot be read. */
|
|
88
|
+
readHealthConfig(config) {
|
|
89
|
+
const read = attempt(() => HealthConfigSchema.safeParse(config));
|
|
90
|
+
if (read.failed)
|
|
91
|
+
throw museFailure('invalid-connection', { details: { stage: 'read' }, cause: read.cause });
|
|
92
|
+
if (!read.value.success) {
|
|
93
|
+
const method = read.value.error.issues.some((issue) => issue.path[0] === 'authMethod');
|
|
94
|
+
throw museFailure(method ? 'invalid-auth-method' : 'invalid-connection', { details: { stage: 'schema' } });
|
|
95
|
+
}
|
|
96
|
+
return read.value.data;
|
|
97
|
+
}
|
|
98
|
+
async checkHealth(config, options) {
|
|
99
|
+
const connection = this.readHealthConfig(config);
|
|
100
|
+
if (connection.authMethod === 'muse-oauth') {
|
|
101
|
+
if (this.isCloudRuntime()) {
|
|
102
|
+
return {
|
|
103
|
+
healthy: false,
|
|
104
|
+
message: 'Meta Muse subscription execution requires a connected consumer host',
|
|
105
|
+
error: {
|
|
106
|
+
code: 'CONSUMER_RUNTIME_REQUIRED',
|
|
107
|
+
message: 'Meta Muse subscription execution requires a connected consumer host'
|
|
108
|
+
},
|
|
109
|
+
checkedAt: new Date()
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const execution = await this.resolveExecution();
|
|
113
|
+
if (!execution || !(await execution.resolveCommand('muse'))) {
|
|
114
|
+
return {
|
|
115
|
+
healthy: false,
|
|
116
|
+
message: 'Muse CLI is unavailable',
|
|
117
|
+
error: {
|
|
118
|
+
code: 'CLI_UNAVAILABLE',
|
|
119
|
+
message: 'Install the Muse CLI or make sure muse is on your PATH'
|
|
120
|
+
},
|
|
121
|
+
checkedAt: new Date()
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
healthy: false,
|
|
126
|
+
message: `Muse publishes no login-status command. Sign in with ${MUSE_SUBSCRIPTION_LOGIN_COMMAND} (\`muse login\`).`,
|
|
127
|
+
error: {
|
|
128
|
+
code: 'SUBSCRIPTION_REQUIRED',
|
|
129
|
+
message: 'Muse account sign-in has not been confirmed'
|
|
130
|
+
},
|
|
131
|
+
checkedAt: new Date()
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
const apiKey = await this.resolveCredential(connection, options);
|
|
135
|
+
if (!apiKey)
|
|
136
|
+
return {
|
|
137
|
+
healthy: false,
|
|
138
|
+
message: 'Meta credential is unavailable',
|
|
139
|
+
error: {
|
|
140
|
+
code: 'MISSING_API_KEY',
|
|
141
|
+
message: 'Resolve apiKey through the runtime credential boundary'
|
|
142
|
+
},
|
|
143
|
+
checkedAt: new Date()
|
|
144
|
+
};
|
|
145
|
+
return this.probeApi(connection, apiKey, options);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* The one shared probe: no redirect following, the body cancelled, the caller's
|
|
149
|
+
* signal and timeout honoured, and only a status and a fixed sentence in the
|
|
150
|
+
* result (never the reason phrase, a body or a fetch error's text, which quotes
|
|
151
|
+
* the URL). The connections host's own typed refusal is the owner speaking and
|
|
152
|
+
* reaches the caller from the probe.
|
|
153
|
+
*/
|
|
154
|
+
async probeApi(connection, apiKey, options) {
|
|
155
|
+
const start = Date.now();
|
|
156
|
+
// A connection that names no base URL probes the default; one that names text that is not a URL
|
|
157
|
+
// (or not text at all) probes nothing: the probe refuses it before any request is built.
|
|
158
|
+
const configured = z.string().safeParse(connection.baseUrl);
|
|
159
|
+
const baseUrl = connection.baseUrl === undefined ? META_DEFAULT_BASE_URL : configured.success ? configured.data : '';
|
|
160
|
+
const timeoutMs = ProbeTimeoutSchema.safeParse(options?.timeout);
|
|
161
|
+
const result = await probeProviderHealth({
|
|
162
|
+
runtime: this.context.runtime,
|
|
163
|
+
url: `${baseUrl.replace(/\/$/, '')}/models`,
|
|
164
|
+
headers: { authorization: `Bearer ${apiKey}` },
|
|
165
|
+
signal: options?.signal,
|
|
166
|
+
timeoutMs: timeoutMs.success ? timeoutMs.data : DEFAULT_HEALTH_TIMEOUT_MS
|
|
167
|
+
});
|
|
168
|
+
if (result.ok) {
|
|
169
|
+
return {
|
|
170
|
+
healthy: true,
|
|
171
|
+
latencyMs: Date.now() - start,
|
|
172
|
+
message: 'Meta Model API connection successful',
|
|
173
|
+
checkedAt: new Date(),
|
|
174
|
+
availableModalities: ['text', 'image']
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
healthy: false,
|
|
179
|
+
latencyMs: Date.now() - start,
|
|
180
|
+
message: result.status !== undefined ? `Meta Model API returned ${result.status}` : result.message,
|
|
181
|
+
error: { code: result.code, message: result.message },
|
|
182
|
+
checkedAt: new Date()
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
async authenticate(config, options) {
|
|
186
|
+
if (this.readHealthConfig(config).authMethod !== 'muse-oauth')
|
|
187
|
+
return this.checkHealth(config, options);
|
|
188
|
+
if (options?.signal?.aborted) {
|
|
189
|
+
return {
|
|
190
|
+
healthy: false,
|
|
191
|
+
message: 'Authentication cancelled',
|
|
192
|
+
error: { code: 'AUTH_CANCELLED', message: 'Authentication cancelled' },
|
|
193
|
+
checkedAt: new Date()
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
if (!options?.onMessage) {
|
|
197
|
+
return {
|
|
198
|
+
healthy: false,
|
|
199
|
+
message: `Run: ${MUSE_SUBSCRIPTION_LOGIN_COMMAND}`,
|
|
200
|
+
error: {
|
|
201
|
+
code: 'SUBSCRIPTION_REQUIRED',
|
|
202
|
+
message: 'Muse login prints a browser code and needs a terminal to show it'
|
|
203
|
+
},
|
|
204
|
+
checkedAt: new Date()
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
const execution = await this.resolveExecution();
|
|
208
|
+
if (!execution || !(await execution.resolveCommand('muse'))) {
|
|
209
|
+
return this.checkHealth(config, options);
|
|
210
|
+
}
|
|
211
|
+
const login = await runMuseSubscriptionLogin(this.context.runtime, execution, {
|
|
212
|
+
timeout: options.timeout,
|
|
213
|
+
signal: options.signal,
|
|
214
|
+
onMessage: options.onMessage
|
|
215
|
+
});
|
|
216
|
+
if (login.timedOut) {
|
|
217
|
+
return {
|
|
218
|
+
healthy: false,
|
|
219
|
+
message: 'Muse login timed out',
|
|
220
|
+
error: { code: 'AUTH_TIMEOUT', message: 'Muse login timed out' },
|
|
221
|
+
checkedAt: new Date()
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
if (login.exitCode !== 0) {
|
|
225
|
+
return {
|
|
226
|
+
healthy: false,
|
|
227
|
+
message: 'Muse login failed',
|
|
228
|
+
error: { code: 'AUTH_FAILED', message: 'Muse login failed' },
|
|
229
|
+
checkedAt: new Date()
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
healthy: true,
|
|
234
|
+
message: 'Muse account login completed',
|
|
235
|
+
checkedAt: new Date(),
|
|
236
|
+
availableModalities: ['text']
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
async validateConnection(config) {
|
|
240
|
+
const read = attempt(() => ValidationConfigSchema.safeParse(config));
|
|
241
|
+
// A connection that cannot be read (a throwing getter, a trapping Proxy) is invalid, never an exception.
|
|
242
|
+
if (read.failed || !read.value.success) {
|
|
243
|
+
return { valid: false, errors: ['The connection configuration is not readable'] };
|
|
244
|
+
}
|
|
245
|
+
const connection = read.value.data;
|
|
246
|
+
const errors = [];
|
|
247
|
+
const method = metaAuthMethodSchema.safeParse(connection.authMethod);
|
|
248
|
+
if (!method.success) {
|
|
249
|
+
return { valid: false, errors: ['authMethod must be muse-oauth or api-key'] };
|
|
250
|
+
}
|
|
251
|
+
if (method.data === 'muse-oauth') {
|
|
252
|
+
if (connection.tokenSource === 'credential' ||
|
|
253
|
+
connection.apiKey !== undefined ||
|
|
254
|
+
connection.accessToken !== undefined ||
|
|
255
|
+
connection.refreshToken !== undefined) {
|
|
256
|
+
errors.push('Meta Muse subscription authentication must remain in the Muse account store');
|
|
257
|
+
}
|
|
258
|
+
return { valid: errors.length === 0, errors: errors.length ? errors : undefined };
|
|
259
|
+
}
|
|
260
|
+
const reference = attempt(() => isCredentialReference(connection.apiKey) && connection.apiKey.source !== 'inline');
|
|
261
|
+
if (reference.failed || !reference.value)
|
|
262
|
+
errors.push('apiKey must be a CredentialReference');
|
|
263
|
+
if (connection.baseUrl !== undefined && !BaseUrlSchema.safeParse(connection.baseUrl).success)
|
|
264
|
+
errors.push('baseUrl must be a valid URL');
|
|
265
|
+
return { valid: errors.length === 0, errors: errors.length ? errors : undefined };
|
|
266
|
+
}
|
|
267
|
+
async dispose() { }
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=meta.provider.impl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.provider.impl.js","sourceRoot":"","sources":["../../../../src/ai/providers/meta/meta.provider.impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { RuntimeRef } from '@vibesdotdev/runtime';
|
|
2
|
+
import { type JsonRpcNotification } from './protocol.ts';
|
|
3
|
+
export type MuseServerRuntime = Pick<RuntimeRef, 'lifecycle'>;
|
|
4
|
+
export interface MuseByteWritableStreamDefaultWriter {
|
|
5
|
+
write(chunk: Uint8Array): Promise<void>;
|
|
6
|
+
close(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export interface MuseByteReadableStreamDefaultReader {
|
|
9
|
+
read(): Promise<{
|
|
10
|
+
value?: Uint8Array;
|
|
11
|
+
done: boolean;
|
|
12
|
+
}>;
|
|
13
|
+
cancel(reason?: unknown): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export interface MuseByteWritableStream {
|
|
16
|
+
getWriter(): MuseByteWritableStreamDefaultWriter;
|
|
17
|
+
}
|
|
18
|
+
export interface MuseByteReadableStream {
|
|
19
|
+
getReader(): MuseByteReadableStreamDefaultReader;
|
|
20
|
+
}
|
|
21
|
+
export interface MuseServerProcess {
|
|
22
|
+
stdin?: MuseByteWritableStream | null;
|
|
23
|
+
stdout?: MuseByteReadableStream | null;
|
|
24
|
+
stderr?: MuseByteReadableStream | null;
|
|
25
|
+
exited: Promise<{
|
|
26
|
+
code: number | null;
|
|
27
|
+
signal?: string | null;
|
|
28
|
+
}>;
|
|
29
|
+
kill?(signal?: string): void;
|
|
30
|
+
}
|
|
31
|
+
export type MuseServerSpawner = () => Promise<MuseServerProcess>;
|
|
32
|
+
export interface MuseServerClientOptions {
|
|
33
|
+
clientName?: string;
|
|
34
|
+
clientTitle?: string;
|
|
35
|
+
clientVersion?: string;
|
|
36
|
+
requestTimeoutMs?: number;
|
|
37
|
+
}
|
|
38
|
+
export declare class MuseServerAuthError extends Error {
|
|
39
|
+
constructor(message: string);
|
|
40
|
+
}
|
|
41
|
+
export declare class MuseServerClient {
|
|
42
|
+
readonly runtime: MuseServerRuntime;
|
|
43
|
+
private readonly process;
|
|
44
|
+
private readonly requestTimeoutMs;
|
|
45
|
+
private readonly writer;
|
|
46
|
+
private readonly reader;
|
|
47
|
+
private readonly encoder;
|
|
48
|
+
private readonly decoder;
|
|
49
|
+
private readonly pending;
|
|
50
|
+
private readonly notificationListeners;
|
|
51
|
+
private nextId;
|
|
52
|
+
private closed;
|
|
53
|
+
constructor(runtime: MuseServerRuntime, process: MuseServerProcess, requestTimeoutMs?: number);
|
|
54
|
+
static connect(runtime: MuseServerRuntime, spawn: MuseServerSpawner, options?: MuseServerClientOptions): Promise<MuseServerClient>;
|
|
55
|
+
request<T>(method: string, params?: unknown): Promise<T>;
|
|
56
|
+
notify(method: string, params?: unknown): Promise<void>;
|
|
57
|
+
onNotification(listener: (notification: JsonRpcNotification) => void): () => void;
|
|
58
|
+
close(): Promise<void>;
|
|
59
|
+
private write;
|
|
60
|
+
private readLoop;
|
|
61
|
+
private dispatch;
|
|
62
|
+
private resolveResponse;
|
|
63
|
+
private drainStderr;
|
|
64
|
+
private failAll;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../../src/ai/providers/meta/muse-server/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { getLogger } from '@vibesdotdev/logging';
|
|
2
|
+
import { generateUuidV7, isJsonRpcNotification, isJsonRpcRequest, isJsonRpcResponse, isRecord } from "./protocol.js";
|
|
3
|
+
const logger = getLogger('integrations-meta').child('muse-server');
|
|
4
|
+
export class MuseServerAuthError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'MuseServerAuthError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class MuseServerClient {
|
|
11
|
+
runtime;
|
|
12
|
+
process;
|
|
13
|
+
requestTimeoutMs;
|
|
14
|
+
writer;
|
|
15
|
+
reader;
|
|
16
|
+
encoder = new TextEncoder();
|
|
17
|
+
decoder = new TextDecoder();
|
|
18
|
+
pending = new Map();
|
|
19
|
+
notificationListeners = new Set();
|
|
20
|
+
nextId = 1;
|
|
21
|
+
closed = false;
|
|
22
|
+
constructor(runtime, process, requestTimeoutMs = 30_000) {
|
|
23
|
+
this.runtime = runtime;
|
|
24
|
+
this.process = process;
|
|
25
|
+
this.requestTimeoutMs = requestTimeoutMs;
|
|
26
|
+
if (!process.stdin || !process.stdout) {
|
|
27
|
+
throw new Error('muse-server: runtime execution must expose piped stdin and stdout');
|
|
28
|
+
}
|
|
29
|
+
this.writer = process.stdin.getWriter();
|
|
30
|
+
this.reader = process.stdout.getReader();
|
|
31
|
+
void this.drainStderr(process.stderr ?? null);
|
|
32
|
+
void this.readLoop();
|
|
33
|
+
void process.exited.then(({ code }) => {
|
|
34
|
+
if (!this.closed) {
|
|
35
|
+
this.failAll(new Error(`muse-server: process exited unexpectedly with code ${String(code)}`));
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
static async connect(runtime, spawn, options = {}) {
|
|
40
|
+
const requestTimeoutMs = options.requestTimeoutMs ?? 30_000;
|
|
41
|
+
if (!Number.isFinite(requestTimeoutMs) || requestTimeoutMs <= 0) {
|
|
42
|
+
throw new Error('muse-server: requestTimeoutMs must be a positive finite number');
|
|
43
|
+
}
|
|
44
|
+
const client = new MuseServerClient(runtime, await spawn(), requestTimeoutMs);
|
|
45
|
+
try {
|
|
46
|
+
await client.request('initialize', {
|
|
47
|
+
clientInfo: {
|
|
48
|
+
name: options.clientName ?? 'vibes',
|
|
49
|
+
title: options.clientTitle ?? 'Vibes AI Runtime',
|
|
50
|
+
version: options.clientVersion ?? '0.1.0'
|
|
51
|
+
},
|
|
52
|
+
capabilities: {}
|
|
53
|
+
});
|
|
54
|
+
await client.notify('initialized');
|
|
55
|
+
return client;
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
await client.close();
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
request(method, params) {
|
|
63
|
+
if (this.closed)
|
|
64
|
+
return Promise.reject(new Error('muse-server: client is closed'));
|
|
65
|
+
const id = this.nextId++;
|
|
66
|
+
const response = new Promise((resolve, reject) => {
|
|
67
|
+
const cancelTimeout = this.runtime.lifecycle.timeout(() => {
|
|
68
|
+
this.pending.delete(id);
|
|
69
|
+
reject(new Error(`muse-server: request '${method}' timed out after ${String(this.requestTimeoutMs)}ms`));
|
|
70
|
+
}, this.requestTimeoutMs);
|
|
71
|
+
this.pending.set(id, {
|
|
72
|
+
resolve: resolve,
|
|
73
|
+
reject,
|
|
74
|
+
cancelTimeout
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
return this.write({ jsonrpc: '2.0', id, method, params }).then(() => response, (error) => {
|
|
78
|
+
const pending = this.pending.get(id);
|
|
79
|
+
if (pending) {
|
|
80
|
+
pending.cancelTimeout();
|
|
81
|
+
this.pending.delete(id);
|
|
82
|
+
}
|
|
83
|
+
throw error;
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
notify(method, params) {
|
|
87
|
+
if (this.closed)
|
|
88
|
+
return Promise.reject(new Error('muse-server: client is closed'));
|
|
89
|
+
return this.write({ jsonrpc: '2.0', method, params });
|
|
90
|
+
}
|
|
91
|
+
onNotification(listener) {
|
|
92
|
+
this.notificationListeners.add(listener);
|
|
93
|
+
return () => this.notificationListeners.delete(listener);
|
|
94
|
+
}
|
|
95
|
+
async close() {
|
|
96
|
+
if (this.closed)
|
|
97
|
+
return;
|
|
98
|
+
this.closed = true;
|
|
99
|
+
this.failAll(new Error('muse-server: client closed'));
|
|
100
|
+
try {
|
|
101
|
+
await this.writer.close();
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
// best-effort cleanup: the writer may already be closed with the process
|
|
105
|
+
logger.debug('muse-server writer close failed', { error: asError(error).message });
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
await this.reader.cancel();
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
// best-effort cleanup: the reader may already be closed with the process
|
|
112
|
+
logger.debug('muse-server reader cancel failed', { error: asError(error).message });
|
|
113
|
+
}
|
|
114
|
+
this.process.kill?.();
|
|
115
|
+
}
|
|
116
|
+
async write(message) {
|
|
117
|
+
const payload = this.encoder.encode(`${JSON.stringify(message)}\n`);
|
|
118
|
+
await this.writer.write(payload);
|
|
119
|
+
}
|
|
120
|
+
async readLoop() {
|
|
121
|
+
let buffer = '';
|
|
122
|
+
try {
|
|
123
|
+
while (!this.closed) {
|
|
124
|
+
const { value, done } = await this.reader.read();
|
|
125
|
+
if (done)
|
|
126
|
+
break;
|
|
127
|
+
buffer += this.decoder.decode(value, { stream: true });
|
|
128
|
+
let newline = buffer.indexOf('\n');
|
|
129
|
+
while (newline >= 0) {
|
|
130
|
+
const line = buffer.slice(0, newline).trim();
|
|
131
|
+
buffer = buffer.slice(newline + 1);
|
|
132
|
+
if (line)
|
|
133
|
+
await this.dispatch(JSON.parse(line));
|
|
134
|
+
newline = buffer.indexOf('\n');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
buffer += this.decoder.decode();
|
|
138
|
+
if (buffer.trim())
|
|
139
|
+
await this.dispatch(JSON.parse(buffer));
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
this.failAll(new Error(`muse-server: invalid JSON-RPC stream: ${asError(error).message}`));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async dispatch(message) {
|
|
146
|
+
if (isJsonRpcResponse(message)) {
|
|
147
|
+
this.resolveResponse(message);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (isJsonRpcNotification(message)) {
|
|
151
|
+
for (const listener of this.notificationListeners)
|
|
152
|
+
listener(message);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
if (isJsonRpcRequest(message)) {
|
|
156
|
+
// Server-initiated request (e.g. dynamic tools)
|
|
157
|
+
await this.write({
|
|
158
|
+
jsonrpc: '2.0',
|
|
159
|
+
id: message.id,
|
|
160
|
+
error: { code: -32601, message: `Unsupported server request '${message.method}'` }
|
|
161
|
+
});
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
throw new Error('unrecognized JSON-RPC message');
|
|
165
|
+
}
|
|
166
|
+
resolveResponse(response) {
|
|
167
|
+
const pending = this.pending.get(response.id);
|
|
168
|
+
if (!pending)
|
|
169
|
+
return;
|
|
170
|
+
this.pending.delete(response.id);
|
|
171
|
+
pending.cancelTimeout();
|
|
172
|
+
if (response.error) {
|
|
173
|
+
pending.reject(new Error(`muse-server: ${response.error.message} (JSON-RPC ${response.error.code})`));
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
pending.resolve(response.result);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async drainStderr(stream) {
|
|
180
|
+
if (!stream)
|
|
181
|
+
return;
|
|
182
|
+
const reader = stream.getReader();
|
|
183
|
+
try {
|
|
184
|
+
while (true) {
|
|
185
|
+
const { done } = await reader.read();
|
|
186
|
+
if (done)
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
// stderr is discarded; only the reason the drain stopped is logged
|
|
192
|
+
logger.debug('muse-server stderr drain failed', { error: asError(error).message });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
failAll(error) {
|
|
196
|
+
for (const pending of this.pending.values()) {
|
|
197
|
+
pending.cancelTimeout();
|
|
198
|
+
pending.reject(error);
|
|
199
|
+
}
|
|
200
|
+
this.pending.clear();
|
|
201
|
+
for (const listener of this.notificationListeners) {
|
|
202
|
+
listener({ method: 'error', params: { message: error.message } });
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function asError(value) {
|
|
207
|
+
return value instanceof Error ? value : new Error(String(value));
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../../src/ai/providers/meta/muse-server/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { type RuntimeRef } from '@vibesdotdev/kernel';
|
|
3
|
+
import { type JsonRpcProcess } from '@vibesdotdev/external/jsonrpc';
|
|
4
|
+
import { museFailure } from './muse-failure.ts';
|
|
5
|
+
import { type JsonObject, type JsonRpcNotification } from './protocol.ts';
|
|
6
|
+
/** The runtime the connection's timers (`lifecycle`) and its logger are bound to. */
|
|
7
|
+
export type MuseServerRuntime = RuntimeRef;
|
|
8
|
+
/** The part of a spawned process the connection drives: piped stdin and stdout, the exit, and signals. */
|
|
9
|
+
export type MuseServerProcess = JsonRpcProcess;
|
|
10
|
+
export type MuseServerSpawner = () => Promise<MuseServerProcess>;
|
|
11
|
+
/**
|
|
12
|
+
* The declared bounds of one Muse server connection. None is implied by a
|
|
13
|
+
* default of the shared client: a line, the notification queue, a request and the
|
|
14
|
+
* close all have the value written here.
|
|
15
|
+
*/
|
|
16
|
+
export declare const MUSE_SERVER_LIMITS: {
|
|
17
|
+
/** One line the child writes (a completed item carries its whole text). */
|
|
18
|
+
readonly maxLineBytes: number;
|
|
19
|
+
/** Notifications waiting for the connection's own pump (which delivers them synchronously). */
|
|
20
|
+
readonly notificationCapacity: 4096;
|
|
21
|
+
/** The wait for an answer to one request (never the turn itself). */
|
|
22
|
+
readonly requestTimeoutMs: 30000;
|
|
23
|
+
/** SIGTERM to SIGKILL. */
|
|
24
|
+
readonly graceMs: 2000;
|
|
25
|
+
/** The wait for a SIGKILLed child to be confirmed gone. */
|
|
26
|
+
readonly killWaitMs: 5000;
|
|
27
|
+
};
|
|
28
|
+
export interface MuseServerClientOptions {
|
|
29
|
+
clientName?: string;
|
|
30
|
+
clientTitle?: string;
|
|
31
|
+
clientVersion?: string;
|
|
32
|
+
requestTimeoutMs?: number;
|
|
33
|
+
}
|
|
34
|
+
/** What the connection tells one subscriber: each notification, then once that the connection ended. */
|
|
35
|
+
export interface MuseConnectionListener {
|
|
36
|
+
notification(notification: JsonRpcNotification): void;
|
|
37
|
+
closed(failure: ReturnType<typeof museFailure>): void;
|
|
38
|
+
}
|
|
39
|
+
export interface MuseRequestOptions {
|
|
40
|
+
readonly signal?: AbortSignal;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* One persistent `muse serve` connection, spoken over the shared JSON-RPC child
|
|
44
|
+
* client (`@vibesdotdev/external/jsonrpc`). This module keeps only what is Muse's:
|
|
45
|
+
* the handshake and the fan-out of notifications to the sessions of this
|
|
46
|
+
* connection. Authentication stays inside Muse's account store; Vibes never
|
|
47
|
+
* receives or persists tokens. The connection marks itself closed on a child exit
|
|
48
|
+
* or a stream failure (`closed`), so the transport can drop it and start a new one.
|
|
49
|
+
* A request the child sends is answered `-32601` by the shared client: Vibes is
|
|
50
|
+
* the sole tool host.
|
|
51
|
+
*/
|
|
52
|
+
export declare class MuseServerConnection {
|
|
53
|
+
readonly runtime: MuseServerRuntime;
|
|
54
|
+
private readonly rpc;
|
|
55
|
+
private readonly requestTimeoutMs;
|
|
56
|
+
private readonly listeners;
|
|
57
|
+
private readonly pump;
|
|
58
|
+
private ended;
|
|
59
|
+
private constructor();
|
|
60
|
+
static connect(runtime: MuseServerRuntime, spawn: MuseServerSpawner, options?: MuseServerClientOptions): Promise<MuseServerConnection>;
|
|
61
|
+
/** True once the child ended, its stream or protocol failed, or `close()` was called: nothing more can be sent. */
|
|
62
|
+
get closed(): boolean;
|
|
63
|
+
/** Send one request and parse its result with the caller's schema at this boundary. */
|
|
64
|
+
request<S extends z.ZodType>(method: string, params: JsonObject | undefined, schema: S, options?: MuseRequestOptions): Promise<z.infer<S>>;
|
|
65
|
+
notify(method: string, params?: JsonObject): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Listen to this connection's notifications. The listener is told once when the
|
|
68
|
+
* connection ends (`closed`); subscribing to an ended connection is refused.
|
|
69
|
+
*/
|
|
70
|
+
subscribe(listener: MuseConnectionListener): () => void;
|
|
71
|
+
/** SIGTERM, the declared grace, SIGKILL, and a join on the exit. Idempotent. */
|
|
72
|
+
close(): Promise<void>;
|
|
73
|
+
/** Delivers the child's notifications to the subscribers; ends when the client does. */
|
|
74
|
+
private pumpNotifications;
|
|
75
|
+
private consume;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=connection.d.ts.map
|