@mcoda/core 0.1.76 → 0.1.79

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/CHANGELOG.md CHANGED
@@ -3,6 +3,11 @@
3
3
  ## Unreleased
4
4
  - Initial public packaging for @mcoda/core.
5
5
 
6
+ ## 0.1.78
7
+ - Add MswarmApi owner-local generic GPU job helpers for capability reads,
8
+ artifact upload, run/status/logs/events/artifacts, cancellation, retry, and
9
+ ops summaries.
10
+
6
11
  ## 0.1.9
7
12
  - Release v0.1.9.
8
13
 
package/README.md CHANGED
@@ -9,7 +9,8 @@ Core services that power the mcoda CLI (docs, planning, jobs, telemetry, openapi
9
9
  ## What it provides
10
10
  - WorkspaceResolver for discovering/initializing workspace data under `~/.mcoda/workspaces/<fingerprint>`.
11
11
  - Service layer for docs, planning, execution, review, telemetry, and system updates.
12
- - API wrappers (AgentsApi, TasksApi, QaTasksApi) used by the CLI.
12
+ - API wrappers (AgentsApi, TasksApi, QaTasksApi, MswarmApi) used by the CLI and SDK packages.
13
+ - Owner-local mswarm generic job helpers for capability reads, artifact upload, run/status/logs/events/artifacts, cancellation, retry, and ops summaries.
13
14
 
14
15
  ## Example
15
16
  ```ts
@@ -1,4 +1,6 @@
1
1
  import { GlobalRepository } from '@mcoda/db';
2
+ import { type MswarmArtifactRef, type MswarmGenericJobAuditEvent, type MswarmGenericJobLifecycleSnapshot, type MswarmGenericJobLogRecord, type MswarmJobEvent, type MswarmJobRequest, type MswarmJobType } from '@mcoda/shared';
3
+ export type { MswarmGenericJobLifecycleSnapshot } from '@mcoda/shared';
2
4
  export interface MswarmCloudAgent {
3
5
  slug: string;
4
6
  provider: string;
@@ -32,6 +34,16 @@ export interface MswarmSelfHostedAgent extends MswarmCloudAgent {
32
34
  adapter?: string;
33
35
  source_agent_id?: string;
34
36
  source_agent_slug?: string;
37
+ load_balanced?: boolean;
38
+ load_balanced_group_id?: string;
39
+ selector_fingerprint?: string;
40
+ member_count?: number;
41
+ candidate_node_ids?: string[];
42
+ canonical_agent_slug?: string;
43
+ canonical_model_id?: string;
44
+ execution_class?: string;
45
+ policy_class?: string;
46
+ context_tier?: string;
35
47
  }
36
48
  export interface MswarmWorkerAgent extends MswarmCloudAgent {
37
49
  id?: string;
@@ -73,6 +85,10 @@ export interface ListMswarmCloudAgentsOptions {
73
85
  }
74
86
  export interface ListMswarmSelfHostedAgentsOptions extends ListMswarmCloudAgentsOptions {
75
87
  includeUnreachable?: boolean;
88
+ includeLoadBalanced?: boolean;
89
+ }
90
+ export interface GetMswarmSelfHostedAgentOptions {
91
+ includeLoadBalanced?: boolean;
76
92
  }
77
93
  export interface ListMswarmWorkerAgentsOptions extends ListMswarmCloudAgentsOptions {
78
94
  includeDisabled?: boolean;
@@ -160,6 +176,11 @@ export interface ManagedMswarmSelfHostedConfig {
160
176
  remoteSlug: string;
161
177
  agentSlug: string;
162
178
  provider: string;
179
+ routingMode?: 'direct' | 'auto';
180
+ loadBalanced?: boolean;
181
+ loadBalancedGroupId?: string;
182
+ selectorFingerprint?: string;
183
+ memberCount?: number;
163
184
  adapter?: string;
164
185
  sourceAgentSlug?: string;
165
186
  nodeId?: string;
@@ -204,6 +225,8 @@ export interface MswarmSyncRecord {
204
225
  provider: string;
205
226
  defaultModel: string;
206
227
  pricingVersion?: string;
228
+ routingMode?: 'direct' | 'auto';
229
+ loadBalanced?: boolean;
207
230
  }
208
231
  export interface MswarmSyncSummary {
209
232
  created: number;
@@ -241,8 +264,162 @@ export interface MswarmRuntimeIdentity {
241
264
  asOf: string | null;
242
265
  usageLimits: MswarmRuntimeUsageLimits;
243
266
  }
267
+ export interface MswarmGenericNodeJobEnvelope {
268
+ job_id: string;
269
+ request_id: string;
270
+ node_id: string;
271
+ job: MswarmJobRequest;
272
+ }
273
+ export interface MswarmNodeAuthOptions {
274
+ nodeBaseUrl?: string;
275
+ token?: string;
276
+ signingSecret?: string;
277
+ tokenTtlSeconds?: number;
278
+ }
279
+ export interface MswarmCapabilityRequestOptions extends MswarmNodeAuthOptions {
280
+ nodeId?: string;
281
+ }
282
+ export interface MswarmGenericJobOpsRequestOptions extends MswarmNodeAuthOptions {
283
+ nodeId?: string;
284
+ auditLimit?: number;
285
+ auditOffset?: number;
286
+ }
287
+ export interface MswarmGenericJobReference extends MswarmNodeAuthOptions {
288
+ jobId: string;
289
+ nodeId?: string;
290
+ requestId?: string;
291
+ schemaVersion?: string;
292
+ jobType?: MswarmJobType | string;
293
+ }
294
+ export interface MswarmGenericJobArtifactUploadInput extends MswarmGenericJobReference {
295
+ name?: string;
296
+ path: string;
297
+ contentBase64: string;
298
+ contentType?: string;
299
+ sha256?: string;
300
+ sizeBytes?: number;
301
+ }
302
+ export interface MswarmGenericJobArtifactUploadResult {
303
+ job_id: string;
304
+ artifact: MswarmArtifactRef;
305
+ }
306
+ export interface MswarmGenericJobEventsResult {
307
+ job_id: string;
308
+ events: MswarmJobEvent[];
309
+ }
310
+ export interface MswarmGenericJobLogsResult {
311
+ job_id: string;
312
+ logs: MswarmGenericJobLogRecord[];
313
+ }
314
+ export interface MswarmGenericJobArtifactsResult {
315
+ job_id: string;
316
+ artifacts: MswarmArtifactRef[];
317
+ }
318
+ export interface MswarmGenericJobOpsJobSummary {
319
+ job_id: string;
320
+ request_id: string;
321
+ tenant_id: string;
322
+ node_id?: string;
323
+ state: string;
324
+ job_type: string;
325
+ schema_version: string;
326
+ created_at: string;
327
+ updated_at: string;
328
+ queued_at?: string;
329
+ scheduled_at?: string;
330
+ started_at?: string;
331
+ finished_at?: string;
332
+ retry_count: number;
333
+ max_retries: number;
334
+ progress_percent?: number;
335
+ last_event_type?: string;
336
+ last_event_message?: string;
337
+ artifact_count: number;
338
+ artifact_bytes: number;
339
+ log_bytes: number;
340
+ }
341
+ export interface MswarmGenericJobOpsSummary {
342
+ schema_version: string;
343
+ generated_at: string;
344
+ node: {
345
+ node_id: string;
346
+ listen_host?: string;
347
+ listen_port?: number;
348
+ owner_local: boolean;
349
+ generic_jobs_enabled: boolean;
350
+ artifact_store_configured: boolean;
351
+ max_concurrent_jobs: number;
352
+ };
353
+ capabilities: Record<string, unknown>;
354
+ queue: {
355
+ jobs: MswarmGenericJobOpsJobSummary[];
356
+ totals_by_state: Record<string, number>;
357
+ active_jobs: number;
358
+ queued_jobs: number;
359
+ terminal_jobs: number;
360
+ };
361
+ quota: {
362
+ max_concurrent_jobs: number;
363
+ active_jobs: number;
364
+ queued_jobs: number;
365
+ available_slots: number;
366
+ production_enforced: boolean;
367
+ limits: Record<string, unknown>;
368
+ };
369
+ usage: {
370
+ total_jobs: number;
371
+ active_jobs: number;
372
+ terminal_jobs: number;
373
+ succeeded_jobs: number;
374
+ failed_jobs: number;
375
+ cancelled_jobs: number;
376
+ blocked_jobs: number;
377
+ expired_jobs: number;
378
+ gpu_seconds: number;
379
+ artifact_count: number;
380
+ artifact_bytes: number;
381
+ event_count: number;
382
+ audit_event_count: number;
383
+ stdout_bytes: number;
384
+ stderr_bytes: number;
385
+ log_bytes: number;
386
+ };
387
+ audit: {
388
+ total: number;
389
+ offset: number;
390
+ limit: number;
391
+ events: MswarmGenericJobAuditEvent[];
392
+ };
393
+ }
394
+ export interface MswarmGenericJobTokenInput {
395
+ signingSecret: string;
396
+ nodeId: string;
397
+ jobId: string;
398
+ requestId: string;
399
+ schemaVersion: string;
400
+ jobType: MswarmJobType | string;
401
+ deadlineAt?: string;
402
+ ttlSeconds?: number;
403
+ allowedRunnerIds?: string[];
404
+ capabilityNames?: string[];
405
+ policyId?: string;
406
+ policyVersion?: string;
407
+ capabilityLeaseId?: string;
408
+ capabilitySnapshotId?: string;
409
+ }
410
+ export interface MswarmCapabilityTokenInput {
411
+ signingSecret: string;
412
+ nodeId: string;
413
+ deadlineAt?: string;
414
+ ttlSeconds?: number;
415
+ nonce?: string;
416
+ }
417
+ export type MswarmGenericJobOpsTokenInput = MswarmCapabilityTokenInput;
244
418
  export declare const MSWARM_CONSENT_POLICY_VERSION = "2026-03-18";
245
419
  export declare const MCODA_FREE_CLIENT_TYPE = "free_mcoda_client";
420
+ export declare function signMswarmGenericJobToken(input: MswarmGenericJobTokenInput): string;
421
+ export declare function signMswarmCapabilityToken(input: MswarmCapabilityTokenInput): string;
422
+ export declare function signMswarmGenericJobOpsToken(input: MswarmGenericJobOpsTokenInput): string;
246
423
  export declare class MswarmApi {
247
424
  private readonly repo;
248
425
  private readonly options;
@@ -257,12 +434,27 @@ export declare class MswarmApi {
257
434
  refreshManagedAgentAuth(): Promise<MswarmManagedAuthRefreshSummary>;
258
435
  getRuntimeUsageLimits(): Promise<MswarmRuntimeUsageLimits>;
259
436
  getRuntimeIdentity(): Promise<MswarmRuntimeIdentity>;
437
+ private nodeBaseUrl;
438
+ private genericJobToken;
439
+ private capabilityToken;
440
+ private genericJobOpsToken;
441
+ private referenceFromJob;
442
+ listGpuCapabilities(options?: MswarmCapabilityRequestOptions): Promise<Record<string, unknown>>;
443
+ getGenericJobOps(options?: MswarmGenericJobOpsRequestOptions): Promise<MswarmGenericJobOpsSummary>;
444
+ uploadGenericJobArtifact(input: MswarmGenericJobArtifactUploadInput): Promise<MswarmGenericJobArtifactUploadResult>;
445
+ runGenericJob(job: MswarmGenericNodeJobEnvelope, options?: MswarmNodeAuthOptions): Promise<MswarmGenericJobLifecycleSnapshot>;
446
+ getGenericJob(input: MswarmGenericJobReference): Promise<MswarmGenericJobLifecycleSnapshot>;
447
+ getGenericJobEvents(input: MswarmGenericJobReference): Promise<MswarmGenericJobEventsResult>;
448
+ getGenericJobLogs(input: MswarmGenericJobReference): Promise<MswarmGenericJobLogsResult>;
449
+ getGenericJobArtifacts(input: MswarmGenericJobReference): Promise<MswarmGenericJobArtifactsResult>;
450
+ cancelGenericJob(input: MswarmGenericJobReference): Promise<MswarmGenericJobLifecycleSnapshot>;
451
+ retryGenericJob(input: MswarmGenericJobReference): Promise<MswarmGenericJobLifecycleSnapshot>;
260
452
  private requireApiKey;
261
453
  private requestJson;
262
454
  listCloudAgents(options?: ListMswarmCloudAgentsOptions): Promise<MswarmCloudAgent[]>;
263
455
  getCloudAgent(slug: string): Promise<MswarmCloudAgentDetail>;
264
456
  listSelfHostedAgents(options?: ListMswarmSelfHostedAgentsOptions): Promise<MswarmSelfHostedAgent[]>;
265
- getSelfHostedAgent(slug: string): Promise<MswarmSelfHostedAgentDetail>;
457
+ getSelfHostedAgent(slug: string, options?: GetMswarmSelfHostedAgentOptions): Promise<MswarmSelfHostedAgentDetail>;
266
458
  private listWorkerAgentPage;
267
459
  listAllWorkers(options?: ListMswarmWorkerAgentsOptions): Promise<MswarmWorkerAgent[]>;
268
460
  listWorkers(options?: ListMswarmWorkerAgentsOptions): Promise<MswarmWorkerCatalogPage>;
@@ -281,5 +473,4 @@ export declare class MswarmApi {
281
473
  }>;
282
474
  requestDataDeletion(input: RequestMswarmDataDeletionInput): Promise<MswarmDataDeletionResponse>;
283
475
  }
284
- export {};
285
476
  //# sourceMappingURL=MswarmApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MswarmApi.d.ts","sourceRoot":"","sources":["../../src/api/MswarmApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MswarmApi.d.ts","sourceRoot":"","sources":["../../src/api/MswarmApi.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { createHmac, randomUUID } from 'node:crypto';
1
2
  import { GlobalRepository } from '@mcoda/db';
2
3
  import { CryptoHelper, } from '@mcoda/shared';
3
4
  import { MswarmConfigStore } from './MswarmConfigStore.js';
@@ -6,6 +7,8 @@ const DEFAULT_TIMEOUT_MS = 15000;
6
7
  const DEFAULT_AGENT_SLUG_PREFIX = 'mswarm-cloud';
7
8
  const DEFAULT_SELF_HOSTED_AGENT_SLUG_PREFIX = 'mswarm-self-hosted';
8
9
  const DEFAULT_WORKER_AGENT_SLUG_PREFIX = 'mswarm-worker';
10
+ const DEFAULT_LOCAL_NODE_BASE_URL = 'http://127.0.0.1:18488/';
11
+ const DEFAULT_NODE_TOKEN_TTL_SECONDS = 3600;
9
12
  export const MSWARM_CONSENT_POLICY_VERSION = '2026-03-18';
10
13
  export const MCODA_FREE_CLIENT_TYPE = 'free_mcoda_client';
11
14
  const MCODA_PRODUCT_SLUG = 'mcoda';
@@ -64,6 +67,92 @@ const normalizeOptionalNonNegativeNumber = (value, label) => {
64
67
  }
65
68
  return value;
66
69
  };
70
+ const base64UrlEncode = (value) => value
71
+ .toString('base64')
72
+ .replace(/=/g, '')
73
+ .replace(/\+/g, '-')
74
+ .replace(/\//g, '_');
75
+ const signHmacSha256 = (input, secret) => base64UrlEncode(createHmac('sha256', secret).update(input).digest());
76
+ const signJwtLikePayload = (payload, signingSecret) => {
77
+ const header = { alg: 'HS256', typ: 'JWT' };
78
+ const encodedHeader = base64UrlEncode(Buffer.from(JSON.stringify(header), 'utf8'));
79
+ const encodedPayload = base64UrlEncode(Buffer.from(JSON.stringify(payload), 'utf8'));
80
+ const signingInput = `${encodedHeader}.${encodedPayload}`;
81
+ return `${signingInput}.${signHmacSha256(signingInput, signingSecret)}`;
82
+ };
83
+ const normalizeTokenTtlSeconds = (value) => {
84
+ if (value === undefined)
85
+ return DEFAULT_NODE_TOKEN_TTL_SECONDS;
86
+ if (!Number.isFinite(value) || value <= 0) {
87
+ throw new Error('tokenTtlSeconds must be a positive integer');
88
+ }
89
+ return Math.trunc(value);
90
+ };
91
+ const tokenTimeFields = (deadlineAt, ttlSeconds) => {
92
+ const nowSeconds = Math.floor(Date.now() / 1000);
93
+ const ttl = normalizeTokenTtlSeconds(ttlSeconds);
94
+ const exp = nowSeconds + ttl;
95
+ return {
96
+ deadline_at: deadlineAt ?? new Date(exp * 1000).toISOString(),
97
+ iat: nowSeconds,
98
+ exp,
99
+ };
100
+ };
101
+ export function signMswarmGenericJobToken(input) {
102
+ const secret = resolveString(input.signingSecret);
103
+ if (!secret)
104
+ throw new Error('signingSecret is required');
105
+ const payload = {
106
+ node_id: requireText(input.nodeId, 'nodeId'),
107
+ job_id: requireText(input.jobId, 'jobId'),
108
+ request_id: requireText(input.requestId, 'requestId'),
109
+ schema_version: requireText(input.schemaVersion, 'schemaVersion'),
110
+ job_type: requireText(input.jobType, 'jobType'),
111
+ scope: 'self_hosted.generic_job.invoke',
112
+ allowed_runner_ids: input.allowedRunnerIds?.length
113
+ ? input.allowedRunnerIds
114
+ : undefined,
115
+ capability_names: input.capabilityNames?.length
116
+ ? input.capabilityNames
117
+ : undefined,
118
+ policy_id: input.policyId,
119
+ policy_version: input.policyVersion,
120
+ capability_lease_id: input.capabilityLeaseId,
121
+ capability_snapshot_id: input.capabilitySnapshotId,
122
+ ...tokenTimeFields(input.deadlineAt, input.ttlSeconds),
123
+ };
124
+ return signJwtLikePayload(payload, secret);
125
+ }
126
+ export function signMswarmCapabilityToken(input) {
127
+ const secret = resolveString(input.signingSecret);
128
+ if (!secret)
129
+ throw new Error('signingSecret is required');
130
+ const payload = {
131
+ node_id: requireText(input.nodeId, 'nodeId'),
132
+ scope: 'self_hosted.capabilities.read',
133
+ nonce: input.nonce ?? randomUUID(),
134
+ ...tokenTimeFields(input.deadlineAt, input.ttlSeconds),
135
+ };
136
+ return signJwtLikePayload(payload, secret);
137
+ }
138
+ export function signMswarmGenericJobOpsToken(input) {
139
+ const secret = resolveString(input.signingSecret);
140
+ if (!secret)
141
+ throw new Error('signingSecret is required');
142
+ const payload = {
143
+ node_id: requireText(input.nodeId, 'nodeId'),
144
+ scope: 'self_hosted.generic_job.ops.read',
145
+ nonce: input.nonce ?? randomUUID(),
146
+ ...tokenTimeFields(input.deadlineAt, input.ttlSeconds),
147
+ };
148
+ return signJwtLikePayload(payload, secret);
149
+ }
150
+ function requireText(value, label) {
151
+ if (typeof value !== 'string' || value.trim().length === 0) {
152
+ throw new Error(`${label} is required`);
153
+ }
154
+ return value.trim();
155
+ }
67
156
  const resolveOptions = async (options = {}) => {
68
157
  const envTimeoutRaw = process.env.MCODA_MSWARM_TIMEOUT_MS;
69
158
  const envTimeout = envTimeoutRaw
@@ -226,6 +315,47 @@ const toManagedWorkerLocalSlug = (prefix, agent) => {
226
315
  const base = agent.slug.startsWith('worker_') ? agent.slug.slice('worker_'.length) : agent.slug;
227
316
  return toManagedLocalSlug(prefix, base);
228
317
  };
318
+ const isLoadBalancedSelfHostedAgent = (agent) => {
319
+ const sync = isRecord(agent.sync) ? agent.sync : {};
320
+ return (agent.load_balanced === true ||
321
+ resolveBoolean(sync.load_balanced) === true ||
322
+ resolveString(sync.group_id) !== undefined ||
323
+ resolveString(agent.load_balanced_group_id) !== undefined);
324
+ };
325
+ const selfHostedRoutingMode = (agent) => isLoadBalancedSelfHostedAgent(agent) ? 'auto' : 'direct';
326
+ const toManagedSelfHostedLocalSlug = (prefix, agent) => {
327
+ const routePrefix = selfHostedRoutingMode(agent) === 'auto' ? `${prefix}-auto` : prefix;
328
+ return toManagedLocalSlug(routePrefix, agent.remote_slug ?? agent.slug);
329
+ };
330
+ const selfHostedLoadBalancedGroupId = (agent) => {
331
+ const sync = isRecord(agent.sync) ? agent.sync : {};
332
+ return (agent.load_balanced_group_id ??
333
+ resolveString(sync.group_id) ??
334
+ (isLoadBalancedSelfHostedAgent(agent) ? resolveString(sync.node_id) : undefined));
335
+ };
336
+ const sanitizeLoadBalancedSelfHostedSync = (agent) => {
337
+ const sync = isRecord(agent.sync) ? agent.sync : {};
338
+ const sanitized = {
339
+ source: resolveString(sync.source) ?? 'self_hosted',
340
+ remote_slug: agent.remote_slug ?? agent.slug,
341
+ relay_mode: resolveString(sync.relay_mode) ?? 'outbound',
342
+ load_balanced: true,
343
+ };
344
+ const groupId = selfHostedLoadBalancedGroupId(agent);
345
+ const memberCount = agent.member_count ?? resolveNumber(sync.member_count);
346
+ const selectorFingerprint = agent.selector_fingerprint ?? resolveString(sync.selector_fingerprint);
347
+ if (groupId)
348
+ sanitized.group_id = groupId;
349
+ if (memberCount !== undefined)
350
+ sanitized.member_count = memberCount;
351
+ if (selectorFingerprint)
352
+ sanitized.selector_fingerprint = selectorFingerprint;
353
+ return Object.keys(sanitized).length > 0 ? sanitized : undefined;
354
+ };
355
+ const selfHostedConfigRoutingMode = (config) => config.mswarmSelfHosted.routingMode === 'auto' ||
356
+ config.mswarmSelfHosted.loadBalanced === true
357
+ ? 'auto'
358
+ : 'direct';
229
359
  const toHealthStatus = (value) => {
230
360
  const normalized = value?.trim().toLowerCase();
231
361
  if (!normalized)
@@ -308,6 +438,13 @@ const toManagedConfig = (existingConfig, catalogBaseUrl, openAiBaseUrl, agent, s
308
438
  };
309
439
  const toManagedSelfHostedConfig = (existingConfig, catalogBaseUrl, openAiBaseUrl, agent, syncedAt) => {
310
440
  const sync = isRecord(agent.sync) ? agent.sync : {};
441
+ const routingMode = selfHostedRoutingMode(agent);
442
+ const loadBalanced = routingMode === 'auto';
443
+ const sanitizedSync = loadBalanced
444
+ ? sanitizeLoadBalancedSelfHostedSync(agent)
445
+ : Object.keys(sync).length > 0
446
+ ? sync
447
+ : undefined;
311
448
  const nextConfig = {
312
449
  ...(existingConfig ?? {}),
313
450
  baseUrl: openAiBaseUrl,
@@ -317,17 +454,22 @@ const toManagedSelfHostedConfig = (existingConfig, catalogBaseUrl, openAiBaseUrl
317
454
  remoteSlug: agent.remote_slug ?? agent.slug,
318
455
  agentSlug: agent.agent_slug ?? agent.slug,
319
456
  provider: agent.provider,
457
+ routingMode,
458
+ loadBalanced,
459
+ loadBalancedGroupId: selfHostedLoadBalancedGroupId(agent),
460
+ selectorFingerprint: agent.selector_fingerprint,
461
+ memberCount: agent.member_count,
320
462
  adapter: agent.adapter,
321
463
  sourceAgentSlug: agent.source_agent_slug,
322
- nodeId: resolveString(sync.node_id),
323
- serverName: resolveString(sync.server_name),
464
+ nodeId: loadBalanced ? undefined : resolveString(sync.node_id),
465
+ serverName: loadBalanced ? undefined : resolveString(sync.server_name),
324
466
  modelId: agent.model_id,
325
467
  displayName: agent.display_name,
326
468
  description: agent.description,
327
469
  supportsReasoning: agent.supports_reasoning,
328
470
  catalogBaseUrl,
329
471
  openAiBaseUrl,
330
- sync: Object.keys(sync).length > 0 ? sync : undefined,
472
+ sync: sanitizedSync,
331
473
  syncedAt,
332
474
  },
333
475
  };
@@ -373,6 +515,8 @@ const toManagedSelfHostedSyncRecord = (config, localSlug, defaultModel, action)
373
515
  action,
374
516
  provider: config.mswarmSelfHosted.provider,
375
517
  defaultModel,
518
+ routingMode: selfHostedConfigRoutingMode(config),
519
+ loadBalanced: selfHostedConfigRoutingMode(config) === 'auto',
376
520
  });
377
521
  const toManagedWorkerSyncRecord = (config, localSlug, defaultModel, action) => ({
378
522
  remoteSlug: config.mswarmWorker.remoteSlug,
@@ -442,6 +586,19 @@ const toSelfHostedAgent = (value) => {
442
586
  adapter: resolveString(record.adapter),
443
587
  source_agent_id: resolveString(record.source_agent_id),
444
588
  source_agent_slug: resolveString(record.source_agent_slug),
589
+ load_balanced: resolveFromRecordOrShape(record, ['load_balanced', 'loadBalanced'], resolveBoolean),
590
+ load_balanced_group_id: resolveFromRecordOrShape(record, ['load_balanced_group_id', 'loadBalancedGroupId'], resolveString),
591
+ selector_fingerprint: resolveFromRecordOrShape(record, ['selector_fingerprint', 'selectorFingerprint'], resolveString),
592
+ member_count: resolveFromRecordOrShape(record, ['member_count', 'memberCount'], resolveNumber),
593
+ candidate_node_ids: resolveStringArrayFromRecordOrShape(record, [
594
+ 'candidate_node_ids',
595
+ 'candidateNodeIds',
596
+ ]),
597
+ canonical_agent_slug: resolveFromRecordOrShape(record, ['canonical_agent_slug', 'canonicalAgentSlug'], resolveString),
598
+ canonical_model_id: resolveFromRecordOrShape(record, ['canonical_model_id', 'canonicalModelId'], resolveString),
599
+ execution_class: resolveFromRecordOrShape(record, ['execution_class', 'executionClass'], resolveString),
600
+ policy_class: resolveFromRecordOrShape(record, ['policy_class', 'policyClass'], resolveString),
601
+ context_tier: resolveFromRecordOrShape(record, ['context_tier', 'contextTier'], resolveString),
445
602
  };
446
603
  };
447
604
  const toSelfHostedAgentDetail = (value) => {
@@ -587,6 +744,177 @@ export class MswarmApi {
587
744
  usageLimits,
588
745
  };
589
746
  }
747
+ nodeBaseUrl(input) {
748
+ return normalizeBaseUrl(input?.nodeBaseUrl ??
749
+ process.env.MCODA_MSWARM_NODE_BASE_URL ??
750
+ DEFAULT_LOCAL_NODE_BASE_URL, 'MCODA_MSWARM_NODE_BASE_URL');
751
+ }
752
+ genericJobToken(input) {
753
+ const token = resolveString(input.token ?? process.env.MCODA_MSWARM_NODE_TOKEN);
754
+ if (token)
755
+ return token;
756
+ const signingSecret = resolveString(input.signingSecret ??
757
+ process.env.MCODA_MSWARM_NODE_SIGNING_SECRET ??
758
+ process.env.MSWARM_SELF_HOSTED_INVOCATION_SIGNING_SECRET);
759
+ if (!signingSecret) {
760
+ throw new Error('A generic job token or owner-local signing secret is required');
761
+ }
762
+ return signMswarmGenericJobToken({
763
+ signingSecret,
764
+ nodeId: requireText(input.nodeId, 'nodeId'),
765
+ jobId: input.jobId,
766
+ requestId: requireText(input.requestId, 'requestId'),
767
+ schemaVersion: requireText(input.schemaVersion, 'schemaVersion'),
768
+ jobType: requireText(input.jobType, 'jobType'),
769
+ ttlSeconds: input.tokenTtlSeconds,
770
+ });
771
+ }
772
+ capabilityToken(input = {}) {
773
+ const token = resolveString(input.token ?? process.env.MCODA_MSWARM_NODE_TOKEN);
774
+ if (token)
775
+ return token;
776
+ const signingSecret = resolveString(input.signingSecret ??
777
+ process.env.MCODA_MSWARM_NODE_SIGNING_SECRET ??
778
+ process.env.MSWARM_SELF_HOSTED_INVOCATION_SIGNING_SECRET);
779
+ if (!signingSecret) {
780
+ throw new Error('A capability token or owner-local signing secret is required');
781
+ }
782
+ const nodeId = requireText(input.nodeId ??
783
+ process.env.MCODA_MSWARM_NODE_ID ??
784
+ process.env.MSWARM_SELF_HOSTED_NODE_ID, 'nodeId');
785
+ return signMswarmCapabilityToken({
786
+ signingSecret,
787
+ nodeId,
788
+ ttlSeconds: input.tokenTtlSeconds,
789
+ });
790
+ }
791
+ genericJobOpsToken(input = {}) {
792
+ const token = resolveString(input.token ?? process.env.MCODA_MSWARM_NODE_OPS_TOKEN);
793
+ if (token)
794
+ return token;
795
+ const signingSecret = resolveString(input.signingSecret ??
796
+ process.env.MCODA_MSWARM_NODE_SIGNING_SECRET ??
797
+ process.env.MSWARM_SELF_HOSTED_INVOCATION_SIGNING_SECRET);
798
+ if (!signingSecret) {
799
+ throw new Error('A generic job ops token or owner-local signing secret is required');
800
+ }
801
+ const nodeId = requireText(input.nodeId ??
802
+ process.env.MCODA_MSWARM_NODE_ID ??
803
+ process.env.MSWARM_SELF_HOSTED_NODE_ID, 'nodeId');
804
+ return signMswarmGenericJobOpsToken({
805
+ signingSecret,
806
+ nodeId,
807
+ ttlSeconds: input.tokenTtlSeconds,
808
+ });
809
+ }
810
+ referenceFromJob(job, options = {}) {
811
+ return {
812
+ ...options,
813
+ jobId: job.job_id,
814
+ nodeId: job.node_id,
815
+ requestId: job.request_id,
816
+ schemaVersion: job.job.schema_version,
817
+ jobType: job.job.job_type,
818
+ };
819
+ }
820
+ async listGpuCapabilities(options = {}) {
821
+ return this.requestJson('/v1/swarm/self-hosted/node/capabilities', undefined, {
822
+ baseUrl: this.nodeBaseUrl(options),
823
+ headers: {
824
+ authorization: `Bearer ${this.capabilityToken(options)}`,
825
+ },
826
+ });
827
+ }
828
+ async getGenericJobOps(options = {}) {
829
+ return this.requestJson('/v1/swarm/self-hosted/node/generic-job-control/ops', {
830
+ audit_limit: options.auditLimit,
831
+ audit_offset: options.auditOffset,
832
+ }, {
833
+ baseUrl: this.nodeBaseUrl(options),
834
+ headers: {
835
+ authorization: `Bearer ${this.genericJobOpsToken(options)}`,
836
+ },
837
+ });
838
+ }
839
+ async uploadGenericJobArtifact(input) {
840
+ const token = this.genericJobToken(input);
841
+ return this.requestJson(`/v1/swarm/self-hosted/node/generic-job-control/jobs/${encodeURIComponent(input.jobId)}/artifacts`, undefined, {
842
+ method: 'POST',
843
+ baseUrl: this.nodeBaseUrl(input),
844
+ headers: {
845
+ authorization: `Bearer ${token}`,
846
+ },
847
+ body: {
848
+ name: input.name,
849
+ path: input.path,
850
+ content_base64: input.contentBase64,
851
+ content_type: input.contentType,
852
+ sha256: input.sha256,
853
+ size_bytes: input.sizeBytes,
854
+ },
855
+ });
856
+ }
857
+ async runGenericJob(job, options = {}) {
858
+ const reference = this.referenceFromJob(job, options);
859
+ return this.requestJson('/v1/swarm/self-hosted/node/generic-job-control/jobs', undefined, {
860
+ method: 'POST',
861
+ baseUrl: this.nodeBaseUrl(options),
862
+ headers: {
863
+ authorization: `Bearer ${this.genericJobToken(reference)}`,
864
+ },
865
+ body: job,
866
+ });
867
+ }
868
+ async getGenericJob(input) {
869
+ return this.requestJson(`/v1/swarm/self-hosted/node/generic-job-control/jobs/${encodeURIComponent(input.jobId)}`, undefined, {
870
+ baseUrl: this.nodeBaseUrl(input),
871
+ headers: {
872
+ authorization: `Bearer ${this.genericJobToken(input)}`,
873
+ },
874
+ });
875
+ }
876
+ async getGenericJobEvents(input) {
877
+ return this.requestJson(`/v1/swarm/self-hosted/node/generic-job-control/jobs/${encodeURIComponent(input.jobId)}/events`, undefined, {
878
+ baseUrl: this.nodeBaseUrl(input),
879
+ headers: {
880
+ authorization: `Bearer ${this.genericJobToken(input)}`,
881
+ },
882
+ });
883
+ }
884
+ async getGenericJobLogs(input) {
885
+ return this.requestJson(`/v1/swarm/self-hosted/node/generic-job-control/jobs/${encodeURIComponent(input.jobId)}/logs`, undefined, {
886
+ baseUrl: this.nodeBaseUrl(input),
887
+ headers: {
888
+ authorization: `Bearer ${this.genericJobToken(input)}`,
889
+ },
890
+ });
891
+ }
892
+ async getGenericJobArtifacts(input) {
893
+ return this.requestJson(`/v1/swarm/self-hosted/node/generic-job-control/jobs/${encodeURIComponent(input.jobId)}/artifacts`, undefined, {
894
+ baseUrl: this.nodeBaseUrl(input),
895
+ headers: {
896
+ authorization: `Bearer ${this.genericJobToken(input)}`,
897
+ },
898
+ });
899
+ }
900
+ async cancelGenericJob(input) {
901
+ return this.requestJson(`/v1/swarm/self-hosted/node/generic-job-control/jobs/${encodeURIComponent(input.jobId)}/cancel`, undefined, {
902
+ method: 'POST',
903
+ baseUrl: this.nodeBaseUrl(input),
904
+ headers: {
905
+ authorization: `Bearer ${this.genericJobToken(input)}`,
906
+ },
907
+ });
908
+ }
909
+ async retryGenericJob(input) {
910
+ return this.requestJson(`/v1/swarm/self-hosted/node/generic-job-control/jobs/${encodeURIComponent(input.jobId)}/retry`, undefined, {
911
+ method: 'POST',
912
+ baseUrl: this.nodeBaseUrl(input),
913
+ headers: {
914
+ authorization: `Bearer ${this.genericJobToken(input)}`,
915
+ },
916
+ });
917
+ }
590
918
  requireApiKey() {
591
919
  if (!this.options.apiKey) {
592
920
  throw new Error('MCODA_MSWARM_API_KEY is required');
@@ -594,7 +922,7 @@ export class MswarmApi {
594
922
  return this.options.apiKey;
595
923
  }
596
924
  async requestJson(pathname, query, init) {
597
- const url = new URL(pathname, this.options.baseUrl);
925
+ const url = new URL(pathname, init?.baseUrl ?? this.options.baseUrl);
598
926
  if (query) {
599
927
  for (const [key, value] of Object.entries(query)) {
600
928
  if (value === undefined)
@@ -672,6 +1000,7 @@ export class MswarmApi {
672
1000
  provider: options.provider,
673
1001
  limit: remoteLimit,
674
1002
  include_unreachable: options.includeUnreachable ? 'true' : undefined,
1003
+ include_load_balanced: options.includeLoadBalanced ? 'true' : undefined,
675
1004
  });
676
1005
  let agents = (Array.isArray(payload.agents) ? payload.agents : []).map(toSelfHostedAgent);
677
1006
  if (options.provider) {
@@ -679,11 +1008,13 @@ export class MswarmApi {
679
1008
  }
680
1009
  return applyCloudAgentListOptions(agents, options);
681
1010
  }
682
- async getSelfHostedAgent(slug) {
1011
+ async getSelfHostedAgent(slug, options = {}) {
683
1012
  if (!slug.trim()) {
684
1013
  throw new Error('Self-hosted agent slug is required');
685
1014
  }
686
- const payload = await this.requestJson(`/v1/swarm/self-hosted/agents/${encodeURIComponent(slug)}`);
1015
+ const payload = await this.requestJson(`/v1/swarm/self-hosted/agents/${encodeURIComponent(slug)}`, {
1016
+ include_load_balanced: options.includeLoadBalanced ? 'true' : undefined,
1017
+ });
687
1018
  return toSelfHostedAgentDetail(payload);
688
1019
  }
689
1020
  async listWorkerAgentPage(options = {}) {
@@ -848,7 +1179,7 @@ export class MswarmApi {
848
1179
  const encryptedApiKey = await CryptoHelper.encryptSecret(this.requireApiKey());
849
1180
  const records = [];
850
1181
  for (const agent of agents) {
851
- const localSlug = toManagedLocalSlug(this.options.selfHostedAgentSlugPrefix, agent.slug);
1182
+ const localSlug = toManagedSelfHostedLocalSlug(this.options.selfHostedAgentSlugPrefix, agent);
852
1183
  const existing = await this.repo.getAgentBySlug(localSlug);
853
1184
  const remoteSlug = agent.remote_slug ?? agent.slug;
854
1185
  if (existing &&
@@ -893,6 +1224,7 @@ export class MswarmApi {
893
1224
  }
894
1225
  if (options.pruneMissing) {
895
1226
  const remoteSlugs = new Set(agents.map((agent) => agent.remote_slug ?? agent.slug));
1227
+ const includeLoadBalanced = options.includeLoadBalanced === true;
896
1228
  const localAgents = await this.repo.listAgents();
897
1229
  for (const localAgent of localAgents) {
898
1230
  const managedConfig = isManagedMswarmSelfHostedConfig(localAgent.config)
@@ -900,6 +1232,10 @@ export class MswarmApi {
900
1232
  : undefined;
901
1233
  if (!managedConfig)
902
1234
  continue;
1235
+ if (selfHostedConfigRoutingMode(managedConfig) === 'auto' &&
1236
+ !includeLoadBalanced) {
1237
+ continue;
1238
+ }
903
1239
  if (options.provider &&
904
1240
  managedConfig.mswarmSelfHosted.provider !== options.provider) {
905
1241
  continue;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcoda/core",
3
- "version": "0.1.76",
3
+ "version": "0.1.79",
4
4
  "description": "Core services and APIs for the mcoda CLI.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -32,11 +32,11 @@
32
32
  "dependencies": {
33
33
  "@apidevtools/swagger-parser": "^10.1.0",
34
34
  "yaml": "^2.4.2",
35
- "@mcoda/agents": "0.1.76",
36
- "@mcoda/generators": "0.1.76",
37
- "@mcoda/db": "0.1.76",
38
- "@mcoda/shared": "0.1.76",
39
- "@mcoda/integrations": "0.1.76"
35
+ "@mcoda/shared": "0.1.79",
36
+ "@mcoda/generators": "0.1.79",
37
+ "@mcoda/agents": "0.1.79",
38
+ "@mcoda/integrations": "0.1.79",
39
+ "@mcoda/db": "0.1.79"
40
40
  },
41
41
  "scripts": {
42
42
  "build": "tsc -p tsconfig.json",