@mcoda/shared 0.1.75 → 0.1.78

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.
@@ -0,0 +1,122 @@
1
+ import type { MswarmArtifactRef, MswarmGenericJobValidationIssue, MswarmJobEvent, MswarmJobRequest, MswarmJobResult, MswarmJobType } from "./GenericJobContract.js";
2
+ export declare const MSWARM_JOB_LIFECYCLE_SCHEMA_VERSION: "2026-06-14";
3
+ export declare const MSWARM_GENERIC_JOB_LIFECYCLE_STATES: readonly ["queued", "scheduled", "running", "retrying", "succeeded", "failed", "cancelled", "expired", "blocked"];
4
+ export type MswarmGenericJobLifecycleState = (typeof MSWARM_GENERIC_JOB_LIFECYCLE_STATES)[number];
5
+ export declare const MSWARM_GENERIC_JOB_TERMINAL_LIFECYCLE_STATES: readonly ["succeeded", "failed", "cancelled", "expired", "blocked"];
6
+ export type MswarmGenericJobTerminalLifecycleState = (typeof MSWARM_GENERIC_JOB_TERMINAL_LIFECYCLE_STATES)[number];
7
+ export type MswarmGenericJobBackpressureReason = "no_capable_node" | "node_at_capacity" | "tenant_reserved" | "policy_recheck_failed" | "capability_recheck_failed";
8
+ export type MswarmGenericJobAuditAction = "job_created" | "job_idempotent_reused" | "job_queued" | "job_scheduled" | "job_started" | "job_event_recorded" | "job_completed" | "job_cancel_requested" | "job_cancelled" | "job_retry_scheduled" | "job_blocked" | "reservation_created" | "reservation_released" | "envelope_issued";
9
+ export interface MswarmGenericJobRetryPolicy {
10
+ max_retries: number;
11
+ retry_count: number;
12
+ retryable_error_codes?: string[];
13
+ next_retry_at?: string;
14
+ }
15
+ export interface MswarmGenericJobBackpressure {
16
+ reason: MswarmGenericJobBackpressureReason;
17
+ message: string;
18
+ retry_after_ms?: number;
19
+ }
20
+ export interface MswarmGenericJobReservation {
21
+ node_id: string;
22
+ tenant_id: string;
23
+ job_id: string;
24
+ request_id: string;
25
+ reserved_at: string;
26
+ released_at?: string;
27
+ resources?: {
28
+ gpu_count?: number;
29
+ cpu_cores?: number;
30
+ memory_gb?: number;
31
+ disk_gb?: number;
32
+ };
33
+ }
34
+ export interface MswarmGenericJobEnvelopeDescriptor {
35
+ schema_version: typeof MSWARM_JOB_LIFECYCLE_SCHEMA_VERSION;
36
+ job_id: string;
37
+ request_id: string;
38
+ node_id: string;
39
+ job_type: MswarmJobType;
40
+ job_schema_version: MswarmJobRequest["schema_version"];
41
+ scope: "self_hosted.generic_job.invoke";
42
+ issued_at: string;
43
+ expires_at: string;
44
+ token_sha256?: string;
45
+ }
46
+ export interface MswarmGenericJobRecord {
47
+ schema_version: typeof MSWARM_JOB_LIFECYCLE_SCHEMA_VERSION;
48
+ job_id: string;
49
+ request_id: string;
50
+ tenant_id: string;
51
+ node_id?: string;
52
+ state: MswarmGenericJobLifecycleState;
53
+ job: MswarmJobRequest;
54
+ idempotency_key?: string;
55
+ created_at: string;
56
+ updated_at: string;
57
+ queued_at?: string;
58
+ scheduled_at?: string;
59
+ started_at?: string;
60
+ finished_at?: string;
61
+ retry: MswarmGenericJobRetryPolicy;
62
+ reservation?: MswarmGenericJobReservation;
63
+ backpressure?: MswarmGenericJobBackpressure;
64
+ envelope?: MswarmGenericJobEnvelopeDescriptor;
65
+ validation_issues?: MswarmGenericJobValidationIssue[];
66
+ result?: MswarmJobResult;
67
+ artifacts?: MswarmArtifactRef[];
68
+ }
69
+ export interface MswarmGenericJobLogRecord {
70
+ job_id: string;
71
+ sequence: number;
72
+ timestamp: string;
73
+ stream: "stdout" | "stderr";
74
+ message: string;
75
+ truncated?: boolean;
76
+ }
77
+ export interface MswarmGenericJobAuditEvent {
78
+ schema_version: typeof MSWARM_JOB_LIFECYCLE_SCHEMA_VERSION;
79
+ audit_id: string;
80
+ job_id: string;
81
+ request_id?: string;
82
+ tenant_id?: string;
83
+ node_id?: string;
84
+ action: MswarmGenericJobAuditAction;
85
+ timestamp: string;
86
+ details?: Record<string, unknown>;
87
+ }
88
+ export interface MswarmGenericJobLifecycleSnapshot {
89
+ job: MswarmGenericJobRecord;
90
+ events: MswarmJobEvent[];
91
+ logs: MswarmGenericJobLogRecord[];
92
+ artifacts: MswarmArtifactRef[];
93
+ audit: MswarmGenericJobAuditEvent[];
94
+ }
95
+ export declare function isMswarmTerminalLifecycleState(state: MswarmGenericJobLifecycleState): state is MswarmGenericJobTerminalLifecycleState;
96
+ export declare function isMswarmLifecycleStateTransitionAllowed(from: MswarmGenericJobLifecycleState, to: MswarmGenericJobLifecycleState): boolean;
97
+ export declare function buildMswarmGenericJobEnvelopeDescriptor(input: {
98
+ jobId: string;
99
+ requestId: string;
100
+ nodeId: string;
101
+ job: MswarmJobRequest;
102
+ issuedAt: string;
103
+ expiresAt: string;
104
+ tokenSha256?: string;
105
+ }): MswarmGenericJobEnvelopeDescriptor;
106
+ export declare function buildMswarmGenericJobAuditEvent(input: {
107
+ auditId: string;
108
+ jobId: string;
109
+ requestId?: string;
110
+ tenantId?: string;
111
+ nodeId?: string;
112
+ action: MswarmGenericJobAuditAction;
113
+ timestamp: string;
114
+ details?: Record<string, unknown>;
115
+ }): MswarmGenericJobAuditEvent;
116
+ export declare function normalizeMswarmGenericJobIdempotencyKey(input: {
117
+ tenantId: string;
118
+ idempotencyKey?: string;
119
+ jobId?: string;
120
+ requestId?: string;
121
+ }): string;
122
+ //# sourceMappingURL=LifecycleContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LifecycleContract.d.ts","sourceRoot":"","sources":["../../src/mswarm/LifecycleContract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ export const MSWARM_JOB_LIFECYCLE_SCHEMA_VERSION = "2026-06-14";
2
+ export const MSWARM_GENERIC_JOB_LIFECYCLE_STATES = [
3
+ "queued",
4
+ "scheduled",
5
+ "running",
6
+ "retrying",
7
+ "succeeded",
8
+ "failed",
9
+ "cancelled",
10
+ "expired",
11
+ "blocked",
12
+ ];
13
+ export const MSWARM_GENERIC_JOB_TERMINAL_LIFECYCLE_STATES = [
14
+ "succeeded",
15
+ "failed",
16
+ "cancelled",
17
+ "expired",
18
+ "blocked",
19
+ ];
20
+ const TERMINAL_LIFECYCLE_STATE_SET = new Set(MSWARM_GENERIC_JOB_TERMINAL_LIFECYCLE_STATES);
21
+ const ALLOWED_LIFECYCLE_TRANSITIONS = {
22
+ queued: ["scheduled", "cancelled", "expired", "blocked"],
23
+ scheduled: ["running", "queued", "cancelled", "expired", "blocked"],
24
+ running: ["succeeded", "failed", "cancelled", "retrying", "expired"],
25
+ retrying: ["queued", "cancelled", "expired", "blocked"],
26
+ succeeded: [],
27
+ failed: [],
28
+ cancelled: [],
29
+ expired: [],
30
+ blocked: [],
31
+ };
32
+ export function isMswarmTerminalLifecycleState(state) {
33
+ return TERMINAL_LIFECYCLE_STATE_SET.has(state);
34
+ }
35
+ export function isMswarmLifecycleStateTransitionAllowed(from, to) {
36
+ return from === to || ALLOWED_LIFECYCLE_TRANSITIONS[from].includes(to);
37
+ }
38
+ export function buildMswarmGenericJobEnvelopeDescriptor(input) {
39
+ return {
40
+ schema_version: MSWARM_JOB_LIFECYCLE_SCHEMA_VERSION,
41
+ job_id: input.jobId,
42
+ request_id: input.requestId,
43
+ node_id: input.nodeId,
44
+ job_type: input.job.job_type,
45
+ job_schema_version: input.job.schema_version,
46
+ scope: "self_hosted.generic_job.invoke",
47
+ issued_at: input.issuedAt,
48
+ expires_at: input.expiresAt,
49
+ ...(input.tokenSha256 ? { token_sha256: input.tokenSha256 } : {}),
50
+ };
51
+ }
52
+ export function buildMswarmGenericJobAuditEvent(input) {
53
+ return {
54
+ schema_version: MSWARM_JOB_LIFECYCLE_SCHEMA_VERSION,
55
+ audit_id: input.auditId,
56
+ job_id: input.jobId,
57
+ ...(input.requestId ? { request_id: input.requestId } : {}),
58
+ ...(input.tenantId ? { tenant_id: input.tenantId } : {}),
59
+ ...(input.nodeId ? { node_id: input.nodeId } : {}),
60
+ action: input.action,
61
+ timestamp: input.timestamp,
62
+ ...(input.details ? { details: input.details } : {}),
63
+ };
64
+ }
65
+ export function normalizeMswarmGenericJobIdempotencyKey(input) {
66
+ const key = input.idempotencyKey || input.jobId || input.requestId || "";
67
+ return `${input.tenantId}:${key}`.trim();
68
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcoda/shared",
3
- "version": "0.1.75",
3
+ "version": "0.1.78",
4
4
  "description": "Shared utilities and schemas for mcoda.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",