@mcoda/agent-setup 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
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.78
4
+
5
+ - Add the trusted backend `createMcodaGpuJobClient()` helper for owner-local
6
+ mswarm generic GPU/package jobs.
7
+ - Add the React `GpuJobOpsPanel` export and `McodaAgentSetupPage` GPU job ops
8
+ callbacks for queue, usage, quota, logs/events/artifacts, cancellation, and
9
+ retry drilldowns.
10
+
3
11
  ## 0.1.74
4
12
 
5
13
  - Expose non-secret local-runner metadata in catalog entries.
package/README.md CHANGED
@@ -9,11 +9,32 @@ The package provides:
9
9
  - framework-agnostic server service helpers
10
10
  - a default programmatic mcoda runtime adapter
11
11
  - an optional React setup page
12
+ - a trusted backend GPU/generic job client for owner-local mswarm nodes
12
13
 
13
14
  The default server runtime uses mcoda package APIs directly and does not require
14
15
  a preinstalled or configured `mcoda` CLI/client tool. When an admin submits a
15
16
  real mswarm API key through `configureMswarmApiKey()`, subsequent cloud and
16
17
  self-hosted catalog reads use the real mswarm API via `MswarmApi`.
18
+ Self-hosted catalog reads include mswarm load-balanced aliases by default in
19
+ the setup SDK, and those aliases are exposed as `Auto load-balanced` server
20
+ options with `managedKind: "self_hosted_load_balanced"`. The synced local agent
21
+ config keeps only gateway/group metadata and never needs self-hosted node tokens
22
+ or invocation signing secrets in browser-visible state.
23
+
24
+ ## Self-Hosted Routing Modes
25
+
26
+ The setup SDK presents two self-hosted routing modes side by side:
27
+
28
+ - Direct self-hosted entries keep a fixed server/node target and use
29
+ `managedKind: "self_hosted"` with `routingMode: "direct"`.
30
+ - Auto load-balanced entries are synthetic mswarm aliases and use
31
+ `managedKind: "self_hosted_load_balanced"` with `routingMode: "auto"`.
32
+
33
+ Existing saved assignments are not rewritten when auto aliases appear. For a
34
+ safe migration, let an admin choose the `Auto load-balanced` option only after
35
+ the control plane preview shows an eligible upgraded node group. For rollback,
36
+ save a direct self-hosted slug again or hide auto aliases in the backend catalog
37
+ sync; direct server entries remain usable.
17
38
 
18
39
  For user-scoped mswarm integrations, `configureMswarmApiKey()` can receive
19
40
  non-secret connection metadata such as tenant ID, product slug, owner user ID,
@@ -27,3 +48,23 @@ React consumers can use the packaged default stylesheet:
27
48
  import { McodaAgentSetupPage } from "@mcoda/agent-setup/react";
28
49
  import "@mcoda/agent-setup/react/styles.css";
29
50
  ```
51
+
52
+ Host applications can pass `gpuJobOps` and GPU job callbacks into
53
+ `McodaAgentSetupPage` to show an owner-local queue/usage/audit panel beside the
54
+ agent setup flow. Keep those callbacks backed by trusted backend routes; do not
55
+ send self-hosted node signing secrets to browser code.
56
+
57
+ Trusted backend code can use the GPU job client directly:
58
+
59
+ ```ts
60
+ import { createMcodaGpuJobClient } from "@mcoda/agent-setup";
61
+
62
+ const gpuJobs = await createMcodaGpuJobClient({
63
+ nodeBaseUrl: process.env.MCODA_MSWARM_NODE_BASE_URL,
64
+ nodeId: process.env.MCODA_MSWARM_NODE_ID,
65
+ signingSecret: process.env.MCODA_MSWARM_NODE_SIGNING_SECRET,
66
+ });
67
+
68
+ const capabilities = await gpuJobs.listGpus();
69
+ const ops = await gpuJobs.ops({ auditLimit: 25 });
70
+ ```
@@ -1,6 +1,7 @@
1
1
  import type { McodaAgentCatalogEntry, McodaSelfHostedServer } from "../types.js";
2
2
  export declare function isCloudAgent(agent: McodaAgentCatalogEntry): boolean;
3
3
  export declare function isSelfHostedAgent(agent: McodaAgentCatalogEntry): boolean;
4
+ export declare function isLoadBalancedSelfHostedAgent(agent: McodaAgentCatalogEntry): boolean;
4
5
  export declare function isWorkerAgent(agent: McodaAgentCatalogEntry): boolean;
5
6
  export declare function syncedCloudSlug(agent: McodaAgentCatalogEntry): string;
6
7
  export declare function syncedSelfHostedSlug(agent: McodaAgentCatalogEntry): string;
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/headless/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAmBrB,wBAAgB,YAAY,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAMnE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAOxE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAMpE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAIrE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAI1E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAItE;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,sBAAsB,EAC7B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,sBAAsB,CA6BxB;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,sBAAsB,EAAE,EACrC,kBAAkB,EAAE,sBAAsB,EAAE,GAC3C,sBAAsB,EAAE,CAY1B;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,sBAAsB,EAAE,EACrC,YAAY,EAAE,sBAAsB,EAAE,GACrC,qBAAqB,EAAE,CAoCzB;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,sBAAsB,EAAE,EACrC,mBAAmB,EAAE,sBAAsB,EAAE,GAC5C,sBAAsB,EAAE,CAY1B;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,sBAAsB,EAAE,EAChC,KAAK,EAAE,MAAM,GACZ,sBAAsB,EAAE,CAiC1B;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,sBAAsB,EAAE,GACpC,MAAM,CAqBR;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAiBA"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/headless/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAoBrB,wBAAgB,YAAY,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAMnE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAQxE;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAOT;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAMpE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAIrE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAO1E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAItE;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,sBAAsB,EAC7B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,sBAAsB,CA6BxB;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,sBAAsB,EAAE,EACrC,kBAAkB,EAAE,sBAAsB,EAAE,GAC3C,sBAAsB,EAAE,CAY1B;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,sBAAsB,EAAE,EACrC,YAAY,EAAE,sBAAsB,EAAE,GACrC,qBAAqB,EAAE,CAoCzB;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,sBAAsB,EAAE,EACrC,mBAAmB,EAAE,sBAAsB,EAAE,GAC5C,sBAAsB,EAAE,CAY1B;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,sBAAsB,EAAE,EAChC,KAAK,EAAE,MAAM,GACZ,sBAAsB,EAAE,CAmC1B;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,sBAAsB,EAAE,GACpC,MAAM,CAqBR;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAiBA"}
@@ -1,5 +1,6 @@
1
1
  const CLOUD_PREFIX = "mswarm-cloud-";
2
2
  const SELF_HOSTED_PREFIX = "mswarm-self-hosted-";
3
+ const SELF_HOSTED_AUTO_PREFIX = "mswarm-self-hosted-auto-";
3
4
  const WORKER_PREFIX = "mswarm-worker-";
4
5
  const normalizeSlugPart = (value) => value
5
6
  .trim()
@@ -16,9 +17,16 @@ export function isCloudAgent(agent) {
16
17
  export function isSelfHostedAgent(agent) {
17
18
  return (agent.source === "self_hosted_catalog" ||
18
19
  agent.managedKind === "self_hosted" ||
20
+ agent.managedKind === "self_hosted_load_balanced" ||
19
21
  agent.slug.startsWith(SELF_HOSTED_PREFIX) ||
20
22
  Boolean(agent.nodeId || agent.serverName || agent.serverId));
21
23
  }
24
+ export function isLoadBalancedSelfHostedAgent(agent) {
25
+ return (agent.managedKind === "self_hosted_load_balanced" ||
26
+ agent.routingMode === "auto" ||
27
+ Boolean(agent.loadBalancedGroupId) ||
28
+ agent.slug.startsWith(SELF_HOSTED_AUTO_PREFIX));
29
+ }
22
30
  export function isWorkerAgent(agent) {
23
31
  return (agent.source === "worker_catalog" ||
24
32
  agent.managedKind === "worker" ||
@@ -34,7 +42,10 @@ export function syncedSelfHostedSlug(agent) {
34
42
  if (agent.slug.startsWith(SELF_HOSTED_PREFIX))
35
43
  return agent.slug;
36
44
  const remote = agent.remoteSlug ?? agent.slug;
37
- return `${SELF_HOSTED_PREFIX}${normalizeSlugPart(remote) || "agent"}`;
45
+ const prefix = isLoadBalancedSelfHostedAgent(agent)
46
+ ? SELF_HOSTED_AUTO_PREFIX
47
+ : SELF_HOSTED_PREFIX;
48
+ return `${prefix}${normalizeSlugPart(remote) || "agent"}`;
38
49
  }
39
50
  export function syncedWorkerSlug(agent) {
40
51
  if (agent.slug.startsWith(WORKER_PREFIX))
@@ -153,6 +164,8 @@ export function filterAgentOptions(agents, query) {
153
164
  agent.bestUsage,
154
165
  agent.serverName,
155
166
  agent.serverLabel,
167
+ agent.routingMode,
168
+ agent.loadBalancedGroupId,
156
169
  agent.nodeId,
157
170
  ...(agent.capabilities ?? []),
158
171
  ]
@@ -203,6 +216,16 @@ export function getVirtualAgentWindow(items, input) {
203
216
  };
204
217
  }
205
218
  function resolveSelfHostedServer(agent) {
219
+ if (isLoadBalancedSelfHostedAgent(agent)) {
220
+ return {
221
+ id: "auto-load-balanced",
222
+ label: "Auto load-balanced",
223
+ routingMode: "auto",
224
+ loadBalancedGroupId: null,
225
+ status: agent.healthStatus,
226
+ remoteSlugPrefix: null,
227
+ };
228
+ }
206
229
  const nodeId = agent.nodeId?.trim() || undefined;
207
230
  const serverName = agent.serverName?.trim() || undefined;
208
231
  const serverId = agent.serverId?.trim() || undefined;
@@ -213,6 +236,8 @@ function resolveSelfHostedServer(agent) {
213
236
  label: agent.serverLabel ?? serverName ?? nodeId ?? serverId ?? id,
214
237
  nodeId,
215
238
  serverName,
239
+ routingMode: "direct",
240
+ loadBalancedGroupId: null,
216
241
  status: agent.healthStatus,
217
242
  remoteSlugPrefix: undefined,
218
243
  };
@@ -225,6 +250,8 @@ function resolveSelfHostedServer(agent) {
225
250
  return {
226
251
  id,
227
252
  label: remoteSlugPrefix || id,
253
+ routingMode: "direct",
254
+ loadBalancedGroupId: null,
228
255
  status: agent.healthStatus,
229
256
  remoteSlugPrefix: remoteSlugPrefix || null,
230
257
  };
@@ -1 +1 @@
1
- {"version":3,"file":"normalization.d.ts","sourceRoot":"","sources":["../../src/headless/normalization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAEjB,MAAM,aAAa,CAAC;AAsErB,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE;IACR,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC,GACA,sBAAsB,CAoIxB;AAwDD,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE;IACR,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC,GACA,sBAAsB,EAAE,CAO1B"}
1
+ {"version":3,"file":"normalization.d.ts","sourceRoot":"","sources":["../../src/headless/normalization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAEjB,MAAM,aAAa,CAAC;AAsErB,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE;IACR,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC,GACA,sBAAsB,CA6JxB;AAwDD,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE;IACR,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC,GACA,sBAAsB,EAAE,CAO1B"}
@@ -58,14 +58,27 @@ export function normalizeAgentCatalogEntry(raw, fallback) {
58
58
  const sync = recordValue(record.sync) ??
59
59
  recordValue(mswarmSelfHosted?.sync) ??
60
60
  recordValue(mswarmWorker?.sync);
61
- const managedKind = fallback.managedKind ??
62
- (mswarmCloud
63
- ? "cloud"
64
- : mswarmSelfHosted
65
- ? "self_hosted"
66
- : mswarmWorker
67
- ? "worker"
68
- : null);
61
+ const loadBalanced = booleanValue(record.load_balanced) ??
62
+ booleanValue(record.loadBalanced) ??
63
+ booleanValue(mswarmSelfHosted?.loadBalanced) ??
64
+ booleanValue(sync?.load_balanced) ??
65
+ false;
66
+ const routingMode = stringValue(record.routingMode) ??
67
+ stringValue(record.routing_mode) ??
68
+ stringValue(mswarmSelfHosted?.routingMode) ??
69
+ (loadBalanced ? "auto" : null);
70
+ const managedKind = fallback.managedKind === "self_hosted" && routingMode === "auto"
71
+ ? "self_hosted_load_balanced"
72
+ : fallback.managedKind ??
73
+ (mswarmCloud
74
+ ? "cloud"
75
+ : mswarmSelfHosted
76
+ ? routingMode === "auto"
77
+ ? "self_hosted_load_balanced"
78
+ : "self_hosted"
79
+ : mswarmWorker
80
+ ? "worker"
81
+ : null);
69
82
  const remoteSlug = stringValue(record.remoteSlug) ??
70
83
  stringValue(record.remote_slug) ??
71
84
  stringValue(mswarmCloud?.remoteSlug) ??
@@ -97,20 +110,29 @@ export function normalizeAgentCatalogEntry(raw, fallback) {
97
110
  stringValue(record.health_status) ??
98
111
  stringValue(health?.status) ??
99
112
  stringValue(record.status);
100
- const nodeId = stringValue(record.nodeId) ??
101
- stringValue(record.node_id) ??
102
- stringValue(mswarmSelfHosted?.nodeId) ??
103
- stringValue(sync?.node_id);
104
- const serverName = stringValue(record.serverName) ??
105
- stringValue(record.server_name) ??
106
- stringValue(mswarmSelfHosted?.serverName) ??
107
- stringValue(sync?.server_name);
113
+ const nodeId = routingMode === "auto"
114
+ ? null
115
+ : stringValue(record.nodeId) ??
116
+ stringValue(record.node_id) ??
117
+ stringValue(mswarmSelfHosted?.nodeId) ??
118
+ stringValue(sync?.node_id);
119
+ const serverName = routingMode === "auto"
120
+ ? null
121
+ : stringValue(record.serverName) ??
122
+ stringValue(record.server_name) ??
123
+ stringValue(mswarmSelfHosted?.serverName) ??
124
+ stringValue(sync?.server_name);
108
125
  return {
109
126
  slug,
110
127
  source: fallback.source,
111
128
  synced: fallback.synced ?? fallback.source === "local_registry",
112
129
  remoteSlug,
113
130
  managedKind,
131
+ routingMode: routingMode === "auto" ? "auto" : routingMode === "direct" ? "direct" : null,
132
+ loadBalancedGroupId: stringValue(record.loadBalancedGroupId) ??
133
+ stringValue(record.load_balanced_group_id) ??
134
+ stringValue(mswarmSelfHosted?.loadBalancedGroupId) ??
135
+ stringValue(sync?.group_id),
114
136
  nodeId,
115
137
  serverName,
116
138
  serverId: stringValue(record.serverId) ??
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./types.js";
2
2
  export * from "./defaultStages.js";
3
3
  export * from "./client.js";
4
+ export * from "./jobClient.js";
4
5
  export * from "./headless/index.js";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./types.js";
2
2
  export * from "./defaultStages.js";
3
3
  export * from "./client.js";
4
+ export * from "./jobClient.js";
4
5
  export * from "./headless/index.js";
@@ -0,0 +1,76 @@
1
+ import { type MswarmCapabilityRequestOptions, type MswarmGenericJobArtifactUploadInput, type MswarmGenericJobArtifactUploadResult, type MswarmGenericJobArtifactsResult, type MswarmGenericJobEventsResult, type MswarmGenericJobLifecycleSnapshot, type MswarmGenericJobLogsResult, type MswarmGenericJobOpsRequestOptions, type MswarmGenericJobOpsSummary, type MswarmGenericJobReference, type MswarmGenericNodeJobEnvelope } from "@mcoda/core";
2
+ type MswarmGenericJobRequestInput = MswarmGenericNodeJobEnvelope["job"];
3
+ type McodaGpuJobCreateInput = MswarmGenericNodeJobEnvelope | MswarmGenericJobRequestInput;
4
+ type McodaGpuJobEvent = MswarmGenericJobEventsResult["events"][number];
5
+ export interface McodaGpuJobEventStreamOptions extends Partial<MswarmGenericJobReference> {
6
+ intervalMs?: number;
7
+ stopOnTerminal?: boolean;
8
+ }
9
+ export interface McodaGpuJobsNamespace {
10
+ create(job: McodaGpuJobCreateInput, input?: Partial<MswarmGenericJobReference>): Promise<MswarmGenericJobLifecycleSnapshot>;
11
+ run(job: McodaGpuJobCreateInput, input?: Partial<MswarmGenericJobReference>): Promise<MswarmGenericJobLifecycleSnapshot>;
12
+ status(input: Partial<MswarmGenericJobReference> & {
13
+ jobId: string;
14
+ }): Promise<MswarmGenericJobLifecycleSnapshot>;
15
+ logs(input: Partial<MswarmGenericJobReference> & {
16
+ jobId: string;
17
+ }): Promise<MswarmGenericJobLogsResult>;
18
+ events(jobIdOrInput: string | (Partial<MswarmGenericJobReference> & {
19
+ jobId: string;
20
+ }), input?: McodaGpuJobEventStreamOptions): AsyncIterable<McodaGpuJobEvent>;
21
+ eventsSnapshot(input: Partial<MswarmGenericJobReference> & {
22
+ jobId: string;
23
+ }): Promise<MswarmGenericJobEventsResult>;
24
+ artifacts(input: Partial<MswarmGenericJobReference> & {
25
+ jobId: string;
26
+ }): Promise<MswarmGenericJobArtifactsResult>;
27
+ cancel(input: Partial<MswarmGenericJobReference> & {
28
+ jobId: string;
29
+ }): Promise<MswarmGenericJobLifecycleSnapshot>;
30
+ retry(input: Partial<MswarmGenericJobReference> & {
31
+ jobId: string;
32
+ }): Promise<MswarmGenericJobLifecycleSnapshot>;
33
+ ops(input?: Partial<MswarmGenericJobOpsRequestOptions>): Promise<MswarmGenericJobOpsSummary>;
34
+ }
35
+ export interface CreateMcodaGpuJobClientInput {
36
+ baseUrl?: string;
37
+ apiKey?: string;
38
+ timeoutMs?: number;
39
+ nodeBaseUrl?: string;
40
+ nodeId?: string;
41
+ signingSecret?: string;
42
+ token?: string;
43
+ tokenTtlSeconds?: number;
44
+ }
45
+ export interface McodaGpuJobClient {
46
+ close(): Promise<void>;
47
+ jobs: McodaGpuJobsNamespace;
48
+ listGpus(input?: Partial<MswarmCapabilityRequestOptions>): Promise<Record<string, unknown>>;
49
+ uploadArtifact(input: Omit<MswarmGenericJobArtifactUploadInput, keyof MswarmGenericJobReference> & Partial<MswarmGenericJobReference> & {
50
+ jobId: string;
51
+ }): Promise<MswarmGenericJobArtifactUploadResult>;
52
+ runJob(job: McodaGpuJobCreateInput, input?: Partial<MswarmGenericJobReference>): Promise<MswarmGenericJobLifecycleSnapshot>;
53
+ create(job: McodaGpuJobCreateInput, input?: Partial<MswarmGenericJobReference>): Promise<MswarmGenericJobLifecycleSnapshot>;
54
+ status(input: Partial<MswarmGenericJobReference> & {
55
+ jobId: string;
56
+ }): Promise<MswarmGenericJobLifecycleSnapshot>;
57
+ logs(input: Partial<MswarmGenericJobReference> & {
58
+ jobId: string;
59
+ }): Promise<MswarmGenericJobLogsResult>;
60
+ events(input: Partial<MswarmGenericJobReference> & {
61
+ jobId: string;
62
+ }): Promise<MswarmGenericJobEventsResult>;
63
+ artifacts(input: Partial<MswarmGenericJobReference> & {
64
+ jobId: string;
65
+ }): Promise<MswarmGenericJobArtifactsResult>;
66
+ cancel(input: Partial<MswarmGenericJobReference> & {
67
+ jobId: string;
68
+ }): Promise<MswarmGenericJobLifecycleSnapshot>;
69
+ retry(input: Partial<MswarmGenericJobReference> & {
70
+ jobId: string;
71
+ }): Promise<MswarmGenericJobLifecycleSnapshot>;
72
+ ops(input?: Partial<MswarmGenericJobOpsRequestOptions>): Promise<MswarmGenericJobOpsSummary>;
73
+ }
74
+ export declare function createMcodaGpuJobClient(input?: CreateMcodaGpuJobClientInput): Promise<McodaGpuJobClient>;
75
+ export {};
76
+ //# sourceMappingURL=jobClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobClient.d.ts","sourceRoot":"","sources":["../src/jobClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { MswarmApi } from "@mcoda/core";
3
+ export async function createMcodaGpuJobClient(input = {}) {
4
+ const api = await MswarmApi.create({
5
+ baseUrl: input.baseUrl,
6
+ apiKey: input.apiKey,
7
+ timeoutMs: input.timeoutMs
8
+ });
9
+ const defaults = {
10
+ nodeBaseUrl: input.nodeBaseUrl,
11
+ nodeId: input.nodeId,
12
+ signingSecret: input.signingSecret,
13
+ token: input.token,
14
+ tokenTtlSeconds: input.tokenTtlSeconds
15
+ };
16
+ const withDefaults = (request) => ({
17
+ ...defaults,
18
+ ...request
19
+ });
20
+ const requireText = (value, label) => {
21
+ if (!value || value.trim() === "") {
22
+ throw new Error(`${label} is required`);
23
+ }
24
+ return value.trim();
25
+ };
26
+ const normalizeJobEnvelope = (job, request = {}) => {
27
+ if ("job" in job && typeof job.job_id === "string" && typeof job.request_id === "string" && typeof job.node_id === "string") {
28
+ return job;
29
+ }
30
+ const merged = withDefaults(request);
31
+ return {
32
+ job_id: request.jobId || `job-${randomUUID()}`,
33
+ request_id: request.requestId || `req-${randomUUID()}`,
34
+ node_id: requireText(merged.nodeId, "nodeId"),
35
+ job: job
36
+ };
37
+ };
38
+ const create = (job, request = {}) => api.runGenericJob(normalizeJobEnvelope(job, request), withDefaults(request));
39
+ const terminalStates = new Set(["succeeded", "failed", "cancelled", "expired", "blocked"]);
40
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
41
+ async function* streamEvents(jobIdOrInput, request = {}) {
42
+ const { intervalMs = 1000, stopOnTerminal = true, ...requestRest } = request;
43
+ const reference = typeof jobIdOrInput === "string"
44
+ ? withDefaults({ ...requestRest, jobId: jobIdOrInput })
45
+ : withDefaults({ ...jobIdOrInput, ...requestRest });
46
+ const seen = new Set();
47
+ while (true) {
48
+ const events = await api.getGenericJobEvents(reference);
49
+ for (const event of events.events) {
50
+ const key = `${event.sequence}:${event.timestamp}:${event.type}`;
51
+ if (!seen.has(key)) {
52
+ seen.add(key);
53
+ yield event;
54
+ }
55
+ }
56
+ if (stopOnTerminal) {
57
+ const snapshot = await api.getGenericJob(reference);
58
+ if (terminalStates.has(snapshot.job.state)) {
59
+ return;
60
+ }
61
+ }
62
+ await sleep(intervalMs);
63
+ }
64
+ }
65
+ const jobs = {
66
+ create,
67
+ run: create,
68
+ status: (request) => api.getGenericJob(withDefaults(request)),
69
+ logs: (request) => api.getGenericJobLogs(withDefaults(request)),
70
+ events: streamEvents,
71
+ eventsSnapshot: (request) => api.getGenericJobEvents(withDefaults(request)),
72
+ artifacts: (request) => api.getGenericJobArtifacts(withDefaults(request)),
73
+ cancel: (request) => api.cancelGenericJob(withDefaults(request)),
74
+ retry: (request) => api.retryGenericJob(withDefaults(request)),
75
+ ops: (request = {}) => api.getGenericJobOps(withDefaults(request))
76
+ };
77
+ return {
78
+ close: () => api.close(),
79
+ jobs,
80
+ listGpus: (request = {}) => api.listGpuCapabilities(withDefaults(request)),
81
+ uploadArtifact: (request) => api.uploadGenericJobArtifact(withDefaults(request)),
82
+ runJob: create,
83
+ create,
84
+ status: jobs.status,
85
+ logs: jobs.logs,
86
+ events: jobs.eventsSnapshot,
87
+ artifacts: jobs.artifacts,
88
+ cancel: jobs.cancel,
89
+ retry: jobs.retry,
90
+ ops: jobs.ops
91
+ };
92
+ }
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import type { McodaAgentCatalogEntry, McodaAgentSetupClient, McodaAgentSetupSnapshot, McodaSelfHostedServer, McodaStageDefinition } from "../types.js";
2
+ import type { McodaAgentCatalogEntry, McodaAgentSetupClient, McodaAgentSetupSnapshot, McodaGpuJobOpsPanelData, McodaGpuJobOpsPanelJob, McodaSelfHostedServer, McodaStageDefinition } from "../types.js";
3
3
  export interface McodaAgentSetupPageProps {
4
4
  client: McodaAgentSetupClient;
5
5
  stages?: McodaStageDefinition[];
@@ -7,6 +7,13 @@ export interface McodaAgentSetupPageProps {
7
7
  className?: string;
8
8
  labels?: Partial<McodaAgentSetupLabels>;
9
9
  components?: Partial<McodaAgentSetupComponentOverrides>;
10
+ gpuJobOps?: McodaGpuJobOpsPanelData | null;
11
+ onGpuJobOpsRefresh?: () => void | Promise<void>;
12
+ onGpuJobViewDetails?: (job: McodaGpuJobOpsPanelJob) => void | Promise<void>;
13
+ onGpuJobViewLogs?: (job: McodaGpuJobOpsPanelJob) => void | Promise<void>;
14
+ onGpuJobViewArtifacts?: (job: McodaGpuJobOpsPanelJob) => void | Promise<void>;
15
+ onGpuJobRetry?: (job: McodaGpuJobOpsPanelJob) => void | Promise<void>;
16
+ onGpuJobCancel?: (job: McodaGpuJobOpsPanelJob) => void | Promise<void>;
10
17
  }
11
18
  export interface McodaAgentSetupLabels {
12
19
  saveKey: string;
@@ -20,6 +27,7 @@ export interface McodaAgentSetupLabels {
20
27
  export interface McodaAgentSetupComponentOverrides {
21
28
  AgentCatalogSummary: typeof AgentCatalogSummary;
22
29
  MswarmAccessCard: typeof MswarmAccessCard;
30
+ GpuJobOpsPanel: typeof GpuJobOpsPanel;
23
31
  StageAgentAssignments: typeof StageAgentAssignments;
24
32
  AgentSourceSelect: typeof AgentSourceSelect;
25
33
  SelfHostedServerSelect: typeof SelfHostedServerSelect;
@@ -27,6 +35,17 @@ export interface McodaAgentSetupComponentOverrides {
27
35
  }
28
36
  type AgentAssignmentSource = "local" | "cloud" | "self_hosted" | "worker";
29
37
  export declare function McodaAgentSetupPage(props: McodaAgentSetupPageProps): React.ReactElement;
38
+ export interface GpuJobOpsPanelProps {
39
+ ops: McodaGpuJobOpsPanelData;
40
+ busy?: boolean;
41
+ onRefresh?: () => void | Promise<void>;
42
+ onViewDetails?: (job: McodaGpuJobOpsPanelJob) => void | Promise<void>;
43
+ onViewLogs?: (job: McodaGpuJobOpsPanelJob) => void | Promise<void>;
44
+ onViewArtifacts?: (job: McodaGpuJobOpsPanelJob) => void | Promise<void>;
45
+ onRetry?: (job: McodaGpuJobOpsPanelJob) => void | Promise<void>;
46
+ onCancel?: (job: McodaGpuJobOpsPanelJob) => void | Promise<void>;
47
+ }
48
+ export declare function GpuJobOpsPanel(props: GpuJobOpsPanelProps): React.ReactElement;
30
49
  export declare function AgentCatalogSummary(props: {
31
50
  snapshot: McodaAgentSetupSnapshot;
32
51
  }): React.ReactElement;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}