@xtrape/capsule-contracts-node 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,7 +1,104 @@
1
1
  // src/index.ts
2
+ import { z as z2 } from "zod";
3
+
4
+ // src/ce.ts
2
5
  import { z } from "zod";
6
+ var CE_CONTRACT_VERSION = 1;
7
+ var ServiceId = z.string().regex(/^[a-z0-9][a-z0-9-]*$/, "kebab-case service id");
8
+ var Json = z.record(z.any());
9
+ var ServiceInstanceHealth = ["HEALTHY", "DEGRADED", "UNREACHABLE"];
10
+ var ServiceInstanceHealthSchema = z.enum(ServiceInstanceHealth);
11
+ var ConversationTargetType = ["SERVICE", "TASK", "USER", "SYSTEM"];
12
+ var ConversationTargetTypeSchema = z.enum(ConversationTargetType);
13
+ var MessageSenderType = ["USER", "SERVICE", "SYSTEM"];
14
+ var MessageSenderTypeSchema = z.enum(MessageSenderType);
15
+ var MessageType = [
16
+ "TEXT",
17
+ "QUERY",
18
+ "COMMAND",
19
+ "SUMMARY",
20
+ "APPROVAL_REQUEST",
21
+ "APPROVAL_RESPONSE"
22
+ ];
23
+ var MessageTypeSchema = z.enum(MessageType);
24
+ var ServiceManifestSchema = z.object({
25
+ contractVersion: z.literal(CE_CONTRACT_VERSION),
26
+ tenant: z.string().default("default"),
27
+ service: z.object({
28
+ id: ServiceId,
29
+ name: z.string().min(1),
30
+ version: z.string().min(1),
31
+ description: z.string().optional()
32
+ }),
33
+ owner: z.object({ organization: z.string().optional(), maintainer: z.string().optional() }).optional(),
34
+ runtime: z.object({
35
+ language: z.string().min(1),
36
+ agent: z.string().min(1),
37
+ // declared template; the real address is reported by the instance on register
38
+ endpoint: z.string().url().optional()
39
+ }),
40
+ // business-semantic capabilities (Capability), e.g. "status.query"
41
+ capabilities: z.array(z.string().min(1)).min(1),
42
+ // platform feature toggles (not business semantics)
43
+ features: z.record(z.boolean()).optional(),
44
+ message: z.object({ supportedTypes: z.array(MessageTypeSchema).min(1) }),
45
+ // structured triggers; kept loose for Phase 0
46
+ triggers: z.array(z.object({ type: z.string() }).passthrough()).optional()
47
+ }).passthrough();
48
+ var ServiceInstanceSchema = z.object({
49
+ contractVersion: z.literal(CE_CONTRACT_VERSION),
50
+ serviceId: ServiceId,
51
+ instanceId: z.string().min(1),
52
+ tenant: z.string().default("default"),
53
+ address: z.string().url(),
54
+ version: z.string().min(1),
55
+ health: ServiceInstanceHealthSchema,
56
+ startedAt: z.string().optional(),
57
+ lastHeartbeatAt: z.string().optional()
58
+ });
59
+ var ConversationMessageSchema = z.object({
60
+ contractVersion: z.literal(CE_CONTRACT_VERSION),
61
+ messageId: z.string().min(1),
62
+ conversationId: z.string().min(1),
63
+ tenant: z.string().default("default"),
64
+ targetType: ConversationTargetTypeSchema,
65
+ targetId: z.string().min(1),
66
+ senderType: MessageSenderTypeSchema,
67
+ senderId: z.string().min(1),
68
+ messageType: MessageTypeSchema,
69
+ content: z.string(),
70
+ payload: Json.optional(),
71
+ replyToMessageId: z.string().optional(),
72
+ idempotencyKey: z.string().optional(),
73
+ metadata: Json.optional()
74
+ });
75
+ var AgentHeartbeatSchema = z.object({
76
+ contractVersion: z.literal(CE_CONTRACT_VERSION),
77
+ serviceId: ServiceId,
78
+ instanceId: z.string().min(1),
79
+ tenant: z.string().default("default"),
80
+ ts: z.string(),
81
+ health: ServiceInstanceHealthSchema,
82
+ metricsSummary: Json.optional()
83
+ });
84
+ var CeErrorCode = {
85
+ CONTRACT_VERSION_MISMATCH: "CONTRACT_VERSION_MISMATCH",
86
+ UNKNOWN_INSTANCE: "UNKNOWN_INSTANCE",
87
+ NO_HEALTHY_INSTANCE: "NO_HEALTHY_INSTANCE",
88
+ TARGET_OFFLINE: "TARGET_OFFLINE",
89
+ VALIDATION_FAILED: "VALIDATION_FAILED",
90
+ INTERNAL_ERROR: "INTERNAL_ERROR"
91
+ };
92
+ var ErrorModelSchema = z.object({
93
+ code: z.string().min(1),
94
+ message: z.string(),
95
+ retryable: z.boolean()
96
+ });
97
+
98
+ // src/index.ts
3
99
  var AgentStatus = ["PENDING", "ONLINE", "OFFLINE", "DISABLED", "REVOKED"];
4
100
  var CapsuleServiceStatus = ["UNKNOWN", "HEALTHY", "UNHEALTHY", "STALE", "OFFLINE"];
101
+ var WorkerStatus = CapsuleServiceStatus;
5
102
  var HealthStatus = ["UP", "DEGRADED", "DOWN", "UNKNOWN"];
6
103
  var CommandStatus = ["PENDING", "RUNNING", "SUCCEEDED", "FAILED", "EXPIRED", "CANCELLED"];
7
104
  var DangerLevel = ["LOW", "MEDIUM", "HIGH"];
@@ -10,144 +107,163 @@ var AuditResult = ["SUCCESS", "FAILURE"];
10
107
  var TokenStatus = ["ACTIVE", "REVOKED", "EXPIRED", "USED"];
11
108
  var AgentMode = ["embedded", "ophub"];
12
109
  var ServiceKind = ["business", "infrastructure", "system"];
13
- var ServiceKindSchema = z.enum(ServiceKind);
14
- var AnyJson = z.record(z.any());
15
- var AgentStatusSchema = z.enum(AgentStatus);
16
- var CapsuleServiceStatusSchema = z.enum(CapsuleServiceStatus);
17
- var HealthStatusSchema = z.enum(HealthStatus);
18
- var CommandStatusSchema = z.enum(CommandStatus);
19
- var DangerLevelSchema = z.enum(DangerLevel).default("LOW");
20
- var AgentModeSchema = z.enum(AgentMode);
21
- var UserSchema = z.object({ id: z.string().startsWith("usr_"), username: z.string(), displayName: z.string().nullable().optional(), createdAt: z.string(), updatedAt: z.string() });
22
- var UserRole = z.enum(["owner", "operator", "viewer"]);
23
- var createUserRequestSchema = z.object({ username: z.string().min(1), password: z.string().min(12), displayName: z.string().optional(), role: UserRole.default("viewer") });
24
- var updateUserRequestSchema = z.object({ displayName: z.string().optional(), role: UserRole.optional(), status: z.enum(["ACTIVE", "DISABLED"]).optional() });
25
- var resetUserPasswordRequestSchema = z.object({ password: z.string().min(12) });
26
- var AdminLoginRequestSchema = z.object({ username: z.string().min(1), password: z.string().min(1) });
110
+ var ServiceKindSchema = z2.enum(ServiceKind);
111
+ var AnyJson = z2.record(z2.any());
112
+ var AgentStatusSchema = z2.enum(AgentStatus);
113
+ var CapsuleServiceStatusSchema = z2.enum(CapsuleServiceStatus);
114
+ var WorkerStatusSchema = CapsuleServiceStatusSchema;
115
+ var HealthStatusSchema = z2.enum(HealthStatus);
116
+ var CommandStatusSchema = z2.enum(CommandStatus);
117
+ var DangerLevelSchema = z2.enum(DangerLevel).default("LOW");
118
+ var AgentModeSchema = z2.enum(AgentMode);
119
+ var UserSchema = z2.object({ id: z2.string().startsWith("usr_"), username: z2.string(), displayName: z2.string().nullable().optional(), createdAt: z2.string(), updatedAt: z2.string() });
120
+ var UserRole = z2.enum(["owner", "operator", "viewer"]);
121
+ var createUserRequestSchema = z2.object({ username: z2.string().min(1), password: z2.string().min(12), displayName: z2.string().optional(), role: UserRole.default("viewer") });
122
+ var updateUserRequestSchema = z2.object({ displayName: z2.string().optional(), role: UserRole.optional(), status: z2.enum(["ACTIVE", "DISABLED"]).optional() });
123
+ var resetUserPasswordRequestSchema = z2.object({ password: z2.string().min(12) });
124
+ var AdminLoginRequestSchema = z2.object({ username: z2.string().min(1), password: z2.string().min(1) });
27
125
  var adminLoginRequestSchema = AdminLoginRequestSchema;
28
- var AdminSessionSchema = z.object({ user: UserSchema, csrfToken: z.string(), expiresAt: z.string() });
29
- var AgentSchema = z.object({ id: z.string().startsWith("agt_"), code: z.string(), name: z.string().nullable().optional(), mode: AgentModeSchema, runtime: z.string().nullable().optional(), status: AgentStatusSchema, lastHeartbeatAt: z.string().nullable().optional(), createdAt: z.string(), updatedAt: z.string() });
30
- var RegistrationTokenSchema = z.object({ id: z.string().startsWith("tok_"), name: z.string(), status: z.enum(TokenStatus), expiresAt: z.string().nullable().optional(), usedAt: z.string().nullable().optional(), createdAt: z.string() });
31
- var CreateRegistrationTokenRequestSchema = z.object({ name: z.string().default("Default registration token").optional(), expiresInSeconds: z.number().int().min(60).optional() });
126
+ var AdminSessionSchema = z2.object({ user: UserSchema, csrfToken: z2.string(), expiresAt: z2.string() });
127
+ var AgentSchema = z2.object({ id: z2.string().startsWith("agt_"), code: z2.string(), name: z2.string().nullable().optional(), mode: AgentModeSchema, runtime: z2.string().nullable().optional(), status: AgentStatusSchema, lastHeartbeatAt: z2.string().nullable().optional(), createdAt: z2.string(), updatedAt: z2.string() });
128
+ var RegistrationTokenSchema = z2.object({ id: z2.string().startsWith("tok_"), name: z2.string(), status: z2.enum(TokenStatus), expiresAt: z2.string().nullable().optional(), usedAt: z2.string().nullable().optional(), createdAt: z2.string() });
129
+ var CreateRegistrationTokenRequestSchema = z2.object({ name: z2.string().default("Default registration token").optional(), expiresInSeconds: z2.number().int().min(60).optional() });
32
130
  var createRegistrationTokenRequestSchema = CreateRegistrationTokenRequestSchema;
33
- var CreateRegistrationTokenResponseSchema = RegistrationTokenSchema.extend({ rawToken: z.string().startsWith("opstage_reg_") });
34
- var ServiceCapabilitySchema = z.object({ name: z.string().min(1).max(120), label: z.string().max(200).optional(), description: z.string().max(2e3).optional(), metadata: AnyJson.optional() });
131
+ var CreateRegistrationTokenResponseSchema = RegistrationTokenSchema.extend({ rawToken: z2.string().startsWith("opstage_reg_") });
132
+ var ServiceCapabilitySchema = z2.object({ name: z2.string().min(1).max(120), label: z2.string().max(200).optional(), description: z2.string().max(2e3).optional(), metadata: AnyJson.optional() });
35
133
  var serviceCapabilitySchema = ServiceCapabilitySchema;
36
- var EventMetadataSchema = z.object({ name: z.string().min(1).max(160), direction: z.enum(["publish", "subscribe"]).optional(), schema: AnyJson.optional(), designOnly: z.boolean().default(true), metadata: AnyJson.optional() });
134
+ var EventMetadataSchema = z2.object({ name: z2.string().min(1).max(160), direction: z2.enum(["publish", "subscribe"]).optional(), schema: AnyJson.optional(), designOnly: z2.boolean().default(true), metadata: AnyJson.optional() });
37
135
  var eventMetadataSchema = EventMetadataSchema;
38
- var CapsuleManifestSchema = z.object({ kind: z.literal("CapsuleService"), schemaVersion: z.string().default("1.0").optional(), code: z.string().min(1), name: z.string().min(1), description: z.string().optional(), version: z.string().min(1), runtime: z.enum(["nodejs", "java", "python", "go", "other"]), agentMode: AgentModeSchema, capabilities: z.array(z.union([z.string(), ServiceCapabilitySchema])).optional(), events: z.array(EventMetadataSchema).optional(), labels: z.record(z.string()).optional() }).passthrough();
39
- var HealthReportInputSchema = z.object({ status: HealthStatusSchema, message: z.string().optional(), details: AnyJson.optional() });
136
+ var CapsuleManifestSchema = z2.object({ kind: z2.literal("CapsuleService"), schemaVersion: z2.string().default("1.0").optional(), code: z2.string().min(1), name: z2.string().min(1), description: z2.string().optional(), version: z2.string().min(1), runtime: z2.enum(["nodejs", "java", "python", "go", "other"]), agentMode: AgentModeSchema, capabilities: z2.array(z2.union([z2.string(), ServiceCapabilitySchema])).optional(), events: z2.array(EventMetadataSchema).optional(), labels: z2.record(z2.string()).optional() }).passthrough();
137
+ var WorkerManifestSchema = CapsuleManifestSchema.extend({
138
+ kind: z2.enum(["Worker", "CapsuleService"]).default("Worker")
139
+ });
140
+ var workerManifestSchema = WorkerManifestSchema;
141
+ var HealthReportInputSchema = z2.object({ status: HealthStatusSchema, message: z2.string().optional(), details: AnyJson.optional() });
40
142
  var healthReportInputSchema = HealthReportInputSchema;
41
- var ConfigItemInputSchema = z.object({ key: z.string(), label: z.string().optional(), type: z.string(), source: z.string().optional(), editable: z.boolean().optional(), sensitive: z.boolean().optional(), valuePreview: z.string().optional(), defaultValue: z.string().optional(), secretRef: z.string().optional() });
143
+ var ConfigItemInputSchema = z2.object({ key: z2.string(), label: z2.string().optional(), type: z2.string(), source: z2.string().optional(), editable: z2.boolean().optional(), sensitive: z2.boolean().optional(), valuePreview: z2.string().optional(), defaultValue: z2.string().optional(), secretRef: z2.string().optional() });
42
144
  var configItemInputSchema = ConfigItemInputSchema;
43
- var ActionDefinitionInputSchema = z.object({ name: z.string(), label: z.string(), description: z.string().optional(), dangerLevel: z.enum(DangerLevel).default("LOW").optional(), requiresConfirmation: z.boolean().optional(), category: z.string().optional(), order: z.number().int().optional(), inputSchema: AnyJson.optional(), outputSchema: AnyJson.optional(), timeoutSeconds: z.number().int().positive().optional() });
145
+ var ActionDefinitionInputSchema = z2.object({ name: z2.string(), label: z2.string(), description: z2.string().optional(), dangerLevel: z2.enum(DangerLevel).default("LOW").optional(), requiresConfirmation: z2.boolean().optional(), category: z2.string().optional(), order: z2.number().int().optional(), inputSchema: AnyJson.optional(), outputSchema: AnyJson.optional(), timeoutSeconds: z2.number().int().positive().optional() });
44
146
  var actionDefinitionInputSchema = ActionDefinitionInputSchema;
45
- var ReportedServiceSchema = z.object({
46
- code: z.string().min(1).max(80),
47
- name: z.string().min(1).max(200),
48
- description: z.string().max(2e3).optional(),
49
- version: z.string().max(80).optional(),
50
- runtime: z.string().optional(),
147
+ var ReportedServiceSchema = z2.object({
148
+ code: z2.string().min(1).max(80),
149
+ name: z2.string().min(1).max(200),
150
+ description: z2.string().max(2e3).optional(),
151
+ version: z2.string().max(80).optional(),
152
+ runtime: z2.string().optional(),
51
153
  manifest: AnyJson,
52
- capabilities: z.array(ServiceCapabilitySchema).optional(),
53
- events: z.array(EventMetadataSchema).optional(),
154
+ capabilities: z2.array(ServiceCapabilitySchema).optional(),
155
+ events: z2.array(EventMetadataSchema).optional(),
54
156
  health: HealthReportInputSchema.optional(),
55
- configs: z.array(ConfigItemInputSchema).optional(),
56
- actions: z.array(ActionDefinitionInputSchema).optional(),
157
+ configs: z2.array(ConfigItemInputSchema).optional(),
158
+ actions: z2.array(ActionDefinitionInputSchema).optional(),
57
159
  serviceKind: ServiceKindSchema.optional()
58
160
  });
59
161
  var reportedServiceSchema = ReportedServiceSchema;
60
- var ServiceReportRequestSchema = z.object({ services: z.array(ReportedServiceSchema).min(1) });
162
+ var ReportedWorkerSchema = ReportedServiceSchema;
163
+ var reportedWorkerSchema = ReportedWorkerSchema;
164
+ var WorkerRuntimeReportSchema = ReportedWorkerSchema;
165
+ var workerRuntimeReportSchema = WorkerRuntimeReportSchema;
166
+ var ServiceReportRequestSchema = z2.object({ services: z2.array(ReportedServiceSchema).min(1) });
61
167
  var serviceReportRequestSchema = ServiceReportRequestSchema;
62
- var RuntimeKindSchema = z.enum(["nodejs", "java", "python", "go", "other"]);
63
- var RegisterAgentRequestSchema = z.object({ registrationToken: z.string().startsWith("opstage_reg_"), agent: z.object({ code: z.string(), name: z.string().optional(), mode: AgentModeSchema.default("embedded"), runtime: RuntimeKindSchema.or(z.string()).optional() }), service: ReportedServiceSchema.optional() });
168
+ var WorkerReportRequestSchema = z2.object({ workers: z2.array(ReportedWorkerSchema).min(1) });
169
+ var workerReportRequestSchema = WorkerReportRequestSchema;
170
+ var RuntimeKindSchema = z2.enum(["nodejs", "java", "python", "go", "other"]);
171
+ var RegisterAgentRequestSchema = z2.object({ registrationToken: z2.string().startsWith("opstage_reg_"), agent: z2.object({ code: z2.string(), name: z2.string().optional(), mode: AgentModeSchema.default("embedded"), runtime: RuntimeKindSchema.or(z2.string()).optional() }), service: ReportedServiceSchema.optional() });
64
172
  var registerAgentRequestSchema = RegisterAgentRequestSchema;
65
- var RegisterAgentResponseSchema = z.object({ agentId: z.string().startsWith("agt_"), agentToken: z.string().startsWith("opstage_agent_"), heartbeatIntervalSeconds: z.number().int(), commandPollIntervalSeconds: z.number().int() });
66
- var AgentHeartbeatResponseSchema = z.object({ heartbeatIntervalSeconds: z.number().int(), commandPollIntervalSeconds: z.number().int() });
67
- var AgentHeartbeatRequestSchema = z.object({ serviceId: z.string().startsWith("svc_").optional(), health: HealthReportInputSchema.optional() });
173
+ var RegisterAgentResponseSchema = z2.object({ agentId: z2.string().startsWith("agt_"), agentToken: z2.string().startsWith("opstage_agent_"), heartbeatIntervalSeconds: z2.number().int(), commandPollIntervalSeconds: z2.number().int() });
174
+ var AgentHeartbeatResponseSchema = z2.object({ heartbeatIntervalSeconds: z2.number().int(), commandPollIntervalSeconds: z2.number().int() });
175
+ var AgentHeartbeatRequestSchema = z2.object({ serviceId: z2.string().startsWith("svc_").optional(), health: HealthReportInputSchema.optional() });
68
176
  var agentHeartbeatRequestSchema = AgentHeartbeatRequestSchema;
69
- var CapsuleServiceSchema = z.object({ id: z.string().startsWith("svc_"), agentId: z.string().startsWith("agt_").optional(), code: z.string(), name: z.string(), description: z.string().nullable().optional(), version: z.string().nullable().optional(), runtime: z.string().nullable().optional(), status: CapsuleServiceStatusSchema, healthStatus: HealthStatusSchema.optional(), lastReportedAt: z.string().nullable().optional(), lastHealthAt: z.string().nullable().optional(), createdAt: z.string(), updatedAt: z.string() });
70
- var HealthReportSchema = z.object({ id: z.string().startsWith("hlr_"), serviceId: z.string().startsWith("svc_"), agentId: z.string().startsWith("agt_").optional(), status: HealthStatusSchema, message: z.string().nullable().optional(), details: AnyJson.optional(), reportedAt: z.string() });
71
- var ConfigItemSchema = z.object({ id: z.string().startsWith("cfg_"), serviceId: z.string().startsWith("svc_"), key: z.string(), label: z.string().nullable().optional(), type: z.string(), source: z.string().nullable().optional(), editable: z.boolean().default(false), sensitive: z.boolean(), valuePreview: z.string().nullable().optional(), defaultValue: z.string().nullable().optional(), secretRef: z.string().nullable().optional() });
72
- var ActionDefinitionSchema = z.object({ id: z.string().startsWith("act_"), serviceId: z.string().startsWith("svc_"), name: z.string(), label: z.string(), description: z.string().nullable().optional(), dangerLevel: z.enum(DangerLevel), requiresConfirmation: z.boolean(), category: z.string().optional(), order: z.number().int().optional(), inputSchema: AnyJson.optional(), outputSchema: AnyJson.optional(), timeoutSeconds: z.number().int().optional() });
73
- var CapsuleServiceDetailSchema = CapsuleServiceSchema.extend({ manifest: AnyJson.optional(), health: HealthReportSchema.nullable().optional(), configs: z.array(ConfigItemSchema).optional(), actions: z.array(ActionDefinitionSchema).optional() });
74
- var ActionPrepareResultSchema = z.object({
177
+ var CapsuleServiceSchema = z2.object({ id: z2.string().startsWith("svc_"), agentId: z2.string().startsWith("agt_").optional(), code: z2.string(), name: z2.string(), description: z2.string().nullable().optional(), version: z2.string().nullable().optional(), runtime: z2.string().nullable().optional(), status: CapsuleServiceStatusSchema, healthStatus: HealthStatusSchema.optional(), lastReportedAt: z2.string().nullable().optional(), lastHealthAt: z2.string().nullable().optional(), createdAt: z2.string(), updatedAt: z2.string() });
178
+ var WorkerSchema = CapsuleServiceSchema;
179
+ var workerSchema = WorkerSchema;
180
+ var WorkerInstanceSchema = CapsuleServiceSchema;
181
+ var workerInstanceSchema = WorkerInstanceSchema;
182
+ var HealthReportSchema = z2.object({ id: z2.string().startsWith("hlr_"), serviceId: z2.string().startsWith("svc_"), agentId: z2.string().startsWith("agt_").optional(), status: HealthStatusSchema, message: z2.string().nullable().optional(), details: AnyJson.optional(), reportedAt: z2.string() });
183
+ var ConfigItemSchema = z2.object({ id: z2.string().startsWith("cfg_"), serviceId: z2.string().startsWith("svc_"), key: z2.string(), label: z2.string().nullable().optional(), type: z2.string(), source: z2.string().nullable().optional(), editable: z2.boolean().default(false), sensitive: z2.boolean(), valuePreview: z2.string().nullable().optional(), defaultValue: z2.string().nullable().optional(), secretRef: z2.string().nullable().optional() });
184
+ var ActionDefinitionSchema = z2.object({ id: z2.string().startsWith("act_"), serviceId: z2.string().startsWith("svc_"), name: z2.string(), label: z2.string(), description: z2.string().nullable().optional(), dangerLevel: z2.enum(DangerLevel), requiresConfirmation: z2.boolean(), category: z2.string().optional(), order: z2.number().int().optional(), inputSchema: AnyJson.optional(), outputSchema: AnyJson.optional(), timeoutSeconds: z2.number().int().optional() });
185
+ var CapsuleServiceDetailSchema = CapsuleServiceSchema.extend({ manifest: AnyJson.optional(), health: HealthReportSchema.nullable().optional(), configs: z2.array(ConfigItemSchema).optional(), actions: z2.array(ActionDefinitionSchema).optional() });
186
+ var WorkerDetailSchema = CapsuleServiceDetailSchema;
187
+ var workerDetailSchema = WorkerDetailSchema;
188
+ var WorkerInstanceDetailSchema = CapsuleServiceDetailSchema;
189
+ var workerInstanceDetailSchema = WorkerInstanceDetailSchema;
190
+ var ActionPrepareResultSchema = z2.object({
75
191
  action: AnyJson.optional(),
76
192
  inputSchema: AnyJson.optional(),
77
193
  initialPayload: AnyJson.optional(),
78
194
  currentState: AnyJson.optional()
79
195
  });
80
196
  var actionPrepareResultSchema = ActionPrepareResultSchema;
81
- var CapsuleBusExperimentalSchema = z.literal("v0.4-experimental");
197
+ var CapsuleBusExperimentalSchema = z2.literal("v0.4-experimental");
82
198
  var BusRouteStatus = ["ENABLED", "DISABLED", "DRY_RUN"];
83
- var BusRouteStatusSchema = z.enum(BusRouteStatus);
84
- var BusEventEnvelopeSchema = z.object({
85
- id: z.string().startsWith("bev_").optional(),
199
+ var BusRouteStatusSchema = z2.enum(BusRouteStatus);
200
+ var BusEventEnvelopeSchema = z2.object({
201
+ id: z2.string().startsWith("bev_").optional(),
86
202
  experimental: CapsuleBusExperimentalSchema.default("v0.4-experimental"),
87
- eventType: z.string().min(1).max(160),
88
- sourceServiceCode: z.string().min(1).max(80),
89
- sourceServiceId: z.string().startsWith("svc_").optional(),
90
- occurredAt: z.string().datetime().optional(),
91
- correlationId: z.string().min(1).max(160).optional(),
92
- causationId: z.string().min(1).max(160).optional(),
203
+ eventType: z2.string().min(1).max(160),
204
+ sourceServiceCode: z2.string().min(1).max(80),
205
+ sourceServiceId: z2.string().startsWith("svc_").optional(),
206
+ occurredAt: z2.string().datetime().optional(),
207
+ correlationId: z2.string().min(1).max(160).optional(),
208
+ causationId: z2.string().min(1).max(160).optional(),
93
209
  payload: AnyJson.default({}).optional(),
94
210
  metadata: AnyJson.default({}).optional()
95
211
  });
96
212
  var PublishBusEventRequestSchema = BusEventEnvelopeSchema.omit({ id: true }).extend({
97
- routePolicy: z.object({ dryRun: z.boolean().optional() }).optional()
213
+ routePolicy: z2.object({ dryRun: z2.boolean().optional() }).optional()
98
214
  });
99
- var BusRouteRuleSchema = z.object({
100
- id: z.string().startsWith("brt_").optional(),
101
- name: z.string().min(1).max(160),
102
- description: z.string().max(1e3).optional(),
215
+ var BusRouteRuleSchema = z2.object({
216
+ id: z2.string().startsWith("brt_").optional(),
217
+ name: z2.string().min(1).max(160),
218
+ description: z2.string().max(1e3).optional(),
103
219
  status: BusRouteStatusSchema.optional().default("DISABLED"),
104
- match: z.object({
105
- eventType: z.string().min(1).max(160),
106
- sourceServiceCode: z.string().min(1).max(80).optional()
220
+ match: z2.object({
221
+ eventType: z2.string().min(1).max(160),
222
+ sourceServiceCode: z2.string().min(1).max(80).optional()
107
223
  }),
108
- target: z.object({
109
- serviceCode: z.string().min(1).max(80),
110
- actionName: z.string().min(1).max(128)
224
+ target: z2.object({
225
+ serviceCode: z2.string().min(1).max(80),
226
+ actionName: z2.string().min(1).max(128)
111
227
  }),
112
228
  inputMapping: AnyJson.default({}).optional(),
113
229
  metadata: AnyJson.default({}).optional()
114
230
  });
115
231
  var CreateBusRouteRuleRequestSchema = BusRouteRuleSchema.omit({ id: true });
116
- var BusCommandRequestSchema = z.object({
117
- commandId: z.string().startsWith("cmd_").optional(),
118
- commandType: z.literal("ACTION_EXECUTE").default("ACTION_EXECUTE"),
119
- targetService: z.string().min(1).max(80),
120
- actionName: z.string().min(1).max(128),
121
- sourceEventId: z.string().startsWith("bev_").optional(),
232
+ var BusCommandRequestSchema = z2.object({
233
+ commandId: z2.string().startsWith("cmd_").optional(),
234
+ commandType: z2.literal("ACTION_EXECUTE").default("ACTION_EXECUTE"),
235
+ targetService: z2.string().min(1).max(80),
236
+ actionName: z2.string().min(1).max(128),
237
+ sourceEventId: z2.string().startsWith("bev_").optional(),
122
238
  payload: AnyJson.default({}).optional(),
123
- metadata: z.object({
124
- routingRuleId: z.string().startsWith("brt_").optional(),
125
- correlationId: z.string().min(1).max(160).optional()
126
- }).catchall(z.any()).optional()
239
+ metadata: z2.object({
240
+ routingRuleId: z2.string().startsWith("brt_").optional(),
241
+ correlationId: z2.string().min(1).max(160).optional()
242
+ }).catchall(z2.any()).optional()
127
243
  });
128
244
  var busCommandRequestSchema = BusCommandRequestSchema;
129
245
  var BusRoutingRuleSchema = BusRouteRuleSchema;
130
246
  var busRoutingRuleSchema = BusRoutingRuleSchema;
131
- var BusRoutedCommandSchema = z.object({
132
- routeId: z.string().startsWith("brt_"),
133
- commandId: z.string().startsWith("cmd_").optional(),
134
- dryRun: z.boolean(),
135
- targetServiceCode: z.string(),
136
- actionName: z.string(),
137
- status: z.enum(["CREATED", "DRY_RUN", "SKIPPED", "FAILED"]),
138
- errorCode: z.string().optional(),
139
- errorMessage: z.string().optional()
247
+ var BusRoutedCommandSchema = z2.object({
248
+ routeId: z2.string().startsWith("brt_"),
249
+ commandId: z2.string().startsWith("cmd_").optional(),
250
+ dryRun: z2.boolean(),
251
+ targetServiceCode: z2.string(),
252
+ actionName: z2.string(),
253
+ status: z2.enum(["CREATED", "DRY_RUN", "SKIPPED", "FAILED"]),
254
+ errorCode: z2.string().optional(),
255
+ errorMessage: z2.string().optional()
140
256
  });
141
- var PublishBusEventResponseSchema = z.object({
142
- eventId: z.string().startsWith("bev_"),
257
+ var PublishBusEventResponseSchema = z2.object({
258
+ eventId: z2.string().startsWith("bev_"),
143
259
  experimental: CapsuleBusExperimentalSchema,
144
- routedCommands: z.array(BusRoutedCommandSchema)
260
+ routedCommands: z2.array(BusRoutedCommandSchema)
145
261
  });
146
262
  var BusEventRecordSchema = BusEventEnvelopeSchema.extend({
147
- id: z.string().startsWith("bev_"),
148
- agentId: z.string().startsWith("agt_"),
149
- acceptedAt: z.string(),
150
- routeCount: z.number().int()
263
+ id: z2.string().startsWith("bev_"),
264
+ agentId: z2.string().startsWith("agt_"),
265
+ acceptedAt: z2.string(),
266
+ routeCount: z2.number().int()
151
267
  });
152
268
  var BusErrorCode = {
153
269
  CAPSULE_BUS_DISABLED: "CAPSULE_BUS_DISABLED",
@@ -159,19 +275,19 @@ var publishBusEventResponseSchema = PublishBusEventResponseSchema;
159
275
  var busEventEnvelopeSchema = BusEventEnvelopeSchema;
160
276
  var busRouteRuleSchema = BusRouteRuleSchema;
161
277
  var createBusRouteRuleRequestSchema = CreateBusRouteRuleRequestSchema;
162
- var CreateActionCommandRequestSchema = z.object({ payload: AnyJson.optional(), confirmation: z.boolean().optional() });
278
+ var CreateActionCommandRequestSchema = z2.object({ payload: AnyJson.optional(), confirmation: z2.boolean().optional() });
163
279
  var createActionCommandRequestSchema = CreateActionCommandRequestSchema;
164
- var CommandTypeSchema = z.enum(["ACTION_PREPARE", "ACTION_EXECUTE"]);
165
- var CommandSchema = z.object({ id: z.string().startsWith("cmd_"), agentId: z.string().startsWith("agt_"), serviceId: z.string().startsWith("svc_"), type: CommandTypeSchema, actionName: z.string(), status: CommandStatusSchema, payload: AnyJson.optional(), createdByUserId: z.string().startsWith("usr_").nullable().optional(), createdAt: z.string(), startedAt: z.string().nullable().optional(), completedAt: z.string().nullable().optional(), expiresAt: z.string().nullable().optional() });
166
- var ReportCommandResultRequestSchema = z.object({ success: z.boolean(), message: z.string().optional(), data: AnyJson.optional(), error: AnyJson.optional(), startedAt: z.string().optional(), finishedAt: z.string().optional() });
280
+ var CommandTypeSchema = z2.enum(["ACTION_PREPARE", "ACTION_EXECUTE"]);
281
+ var CommandSchema = z2.object({ id: z2.string().startsWith("cmd_"), agentId: z2.string().startsWith("agt_"), serviceId: z2.string().startsWith("svc_"), type: CommandTypeSchema, actionName: z2.string(), status: CommandStatusSchema, payload: AnyJson.optional(), createdByUserId: z2.string().startsWith("usr_").nullable().optional(), createdAt: z2.string(), startedAt: z2.string().nullable().optional(), completedAt: z2.string().nullable().optional(), expiresAt: z2.string().nullable().optional() });
282
+ var ReportCommandResultRequestSchema = z2.object({ success: z2.boolean(), message: z2.string().optional(), data: AnyJson.optional(), error: AnyJson.optional(), startedAt: z2.string().optional(), finishedAt: z2.string().optional() });
167
283
  var reportCommandResultRequestSchema = ReportCommandResultRequestSchema;
168
- var CommandResultSchema = z.object({ id: z.string().startsWith("crs_"), commandId: z.string().startsWith("cmd_"), success: z.boolean(), message: z.string().nullable().optional(), data: AnyJson.optional(), error: AnyJson.optional(), reportedAt: z.string() });
284
+ var CommandResultSchema = z2.object({ id: z2.string().startsWith("crs_"), commandId: z2.string().startsWith("cmd_"), success: z2.boolean(), message: z2.string().nullable().optional(), data: AnyJson.optional(), error: AnyJson.optional(), reportedAt: z2.string() });
169
285
  var CommandDetailSchema = CommandSchema.extend({ result: CommandResultSchema.nullable().optional() });
170
- var AuditEventSchema = z.object({ id: z.string().startsWith("aud_"), actorType: z.enum(AuditActorType), actorId: z.string().nullable().optional(), action: z.string(), targetType: z.string().nullable().optional(), targetId: z.string().nullable().optional(), result: z.enum(AuditResult), message: z.string().nullable().optional(), metadata: AnyJson.optional(), createdAt: z.string() });
171
- var DashboardSummarySchema = z.object({ agentCounts: z.record(z.number().int()), serviceCounts: z.record(z.number().int()), commandCounts: z.record(z.number().int()), recentCommands: z.array(CommandSchema).optional(), recentAuditEvents: z.array(AuditEventSchema).optional() });
172
- var SystemHealthSchema = z.object({ status: z.enum(["UP", "DEGRADED", "DOWN"]), timestamp: z.string(), version: z.string(), edition: z.literal("ce"), database: z.object({ status: z.enum(["UP", "DEGRADED", "DOWN"]), kind: z.enum(["sqlite", "postgres", "mysql"]).optional(), latencyMs: z.number().int().optional() }), uptimeSeconds: z.number().int().optional() });
173
- var SystemVersionSchema = z.object({ version: z.string(), edition: z.literal("ce"), commit: z.string().optional(), buildTime: z.string().optional() });
174
- var ListQueryBase = z.object({ page: z.coerce.number().int().min(1).default(1), pageSize: z.coerce.number().int().min(1).max(100).default(20), sort: z.string().optional() });
286
+ var AuditEventSchema = z2.object({ id: z2.string().startsWith("aud_"), actorType: z2.enum(AuditActorType), actorId: z2.string().nullable().optional(), action: z2.string(), targetType: z2.string().nullable().optional(), targetId: z2.string().nullable().optional(), result: z2.enum(AuditResult), message: z2.string().nullable().optional(), metadata: AnyJson.optional(), createdAt: z2.string() });
287
+ var DashboardSummarySchema = z2.object({ agentCounts: z2.record(z2.number().int()), serviceCounts: z2.record(z2.number().int()), commandCounts: z2.record(z2.number().int()), recentCommands: z2.array(CommandSchema).optional(), recentAuditEvents: z2.array(AuditEventSchema).optional() });
288
+ var SystemHealthSchema = z2.object({ status: z2.enum(["UP", "DEGRADED", "DOWN"]), timestamp: z2.string(), version: z2.string(), edition: z2.literal("ce"), database: z2.object({ status: z2.enum(["UP", "DEGRADED", "DOWN"]), kind: z2.enum(["sqlite", "postgres", "mysql"]).optional(), latencyMs: z2.number().int().optional() }), uptimeSeconds: z2.number().int().optional() });
289
+ var SystemVersionSchema = z2.object({ version: z2.string(), edition: z2.literal("ce"), commit: z2.string().optional(), buildTime: z2.string().optional() });
290
+ var ListQueryBase = z2.object({ page: z2.coerce.number().int().min(1).default(1), pageSize: z2.coerce.number().int().min(1).max(100).default(20), sort: z2.string().optional() });
175
291
  var HttpError = class extends Error {
176
292
  constructor(httpStatus, code, publicMessage, details) {
177
293
  super(publicMessage);
@@ -210,7 +326,8 @@ var ErrorCode = {
210
326
  TOKEN_REVOKED: "TOKEN_REVOKED",
211
327
  TOKEN_EXPIRED: "TOKEN_EXPIRED",
212
328
  AGENT_REVOKED: "AGENT_REVOKED",
213
- AGENT_DISABLED: "AGENT_DISABLED"
329
+ AGENT_DISABLED: "AGENT_DISABLED",
330
+ CAPSULE_SERVICE_CODE_TAKEN: "CAPSULE_SERVICE_CODE_TAKEN"
214
331
  };
215
332
  export {
216
333
  ActionDefinitionInputSchema,
@@ -220,6 +337,7 @@ export {
220
337
  AdminSessionSchema,
221
338
  AgentHeartbeatRequestSchema,
222
339
  AgentHeartbeatResponseSchema,
340
+ AgentHeartbeatSchema,
223
341
  AgentMode,
224
342
  AgentModeSchema,
225
343
  AgentSchema,
@@ -238,12 +356,14 @@ export {
238
356
  BusRouteStatusSchema,
239
357
  BusRoutedCommandSchema,
240
358
  BusRoutingRuleSchema,
359
+ CE_CONTRACT_VERSION,
241
360
  CapsuleBusExperimentalSchema,
242
361
  CapsuleManifestSchema,
243
362
  CapsuleServiceDetailSchema,
244
363
  CapsuleServiceSchema,
245
364
  CapsuleServiceStatus,
246
365
  CapsuleServiceStatusSchema,
366
+ CeErrorCode,
247
367
  CommandDetailSchema,
248
368
  CommandResultSchema,
249
369
  CommandSchema,
@@ -252,6 +372,9 @@ export {
252
372
  CommandTypeSchema,
253
373
  ConfigItemInputSchema,
254
374
  ConfigItemSchema,
375
+ ConversationMessageSchema,
376
+ ConversationTargetType,
377
+ ConversationTargetTypeSchema,
255
378
  CreateActionCommandRequestSchema,
256
379
  CreateBusRouteRuleRequestSchema,
257
380
  CreateRegistrationTokenRequestSchema,
@@ -260,6 +383,7 @@ export {
260
383
  DangerLevelSchema,
261
384
  DashboardSummarySchema,
262
385
  ErrorCode,
386
+ ErrorModelSchema,
263
387
  EventMetadataSchema,
264
388
  HealthReportInputSchema,
265
389
  HealthReportSchema,
@@ -267,6 +391,10 @@ export {
267
391
  HealthStatusSchema,
268
392
  HttpError,
269
393
  ListQueryBase,
394
+ MessageSenderType,
395
+ MessageSenderTypeSchema,
396
+ MessageType,
397
+ MessageTypeSchema,
270
398
  PublishBusEventRequestSchema,
271
399
  PublishBusEventResponseSchema,
272
400
  RegisterAgentRequestSchema,
@@ -274,16 +402,30 @@ export {
274
402
  RegistrationTokenSchema,
275
403
  ReportCommandResultRequestSchema,
276
404
  ReportedServiceSchema,
405
+ ReportedWorkerSchema,
277
406
  RuntimeKindSchema,
278
407
  ServiceCapabilitySchema,
408
+ ServiceInstanceHealth,
409
+ ServiceInstanceHealthSchema,
410
+ ServiceInstanceSchema,
279
411
  ServiceKind,
280
412
  ServiceKindSchema,
413
+ ServiceManifestSchema,
281
414
  ServiceReportRequestSchema,
282
415
  SystemHealthSchema,
283
416
  SystemVersionSchema,
284
417
  TokenStatus,
285
418
  UserRole,
286
419
  UserSchema,
420
+ WorkerDetailSchema,
421
+ WorkerInstanceDetailSchema,
422
+ WorkerInstanceSchema,
423
+ WorkerManifestSchema,
424
+ WorkerReportRequestSchema,
425
+ WorkerRuntimeReportSchema,
426
+ WorkerSchema,
427
+ WorkerStatus,
428
+ WorkerStatusSchema,
287
429
  actionDefinitionInputSchema,
288
430
  actionPrepareResultSchema,
289
431
  adminLoginRequestSchema,
@@ -306,9 +448,17 @@ export {
306
448
  registerAgentRequestSchema,
307
449
  reportCommandResultRequestSchema,
308
450
  reportedServiceSchema,
451
+ reportedWorkerSchema,
309
452
  resetUserPasswordRequestSchema,
310
453
  serviceCapabilitySchema,
311
454
  serviceReportRequestSchema,
312
455
  updateUserRequestSchema,
313
- z
456
+ workerDetailSchema,
457
+ workerInstanceDetailSchema,
458
+ workerInstanceSchema,
459
+ workerManifestSchema,
460
+ workerReportRequestSchema,
461
+ workerRuntimeReportSchema,
462
+ workerSchema,
463
+ z2 as z
314
464
  };
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@xtrape/capsule-contracts-node",
3
- "version": "0.4.0",
4
- "description": "TypeScript contracts and Zod schemas for Xtrape Capsule and Opstage wire protocols.",
3
+ "version": "0.5.1",
4
+ "description": "TypeScript contracts and Zod schemas for Xtrape Agent, Worker, and Panel wire protocols.",
5
5
  "keywords": [
6
6
  "xtrape",
7
- "capsule",
7
+ "worker",
8
+ "panel",
8
9
  "opstage",
9
10
  "contracts",
10
11
  "zod",
@@ -12,11 +13,11 @@
12
13
  ],
13
14
  "repository": {
14
15
  "type": "git",
15
- "url": "git+https://github.com/xtrape-com/xtrape-capsule-contracts-node.git"
16
+ "url": "git+https://forgejo.xtrape.com/xtrape/xtrape-contracts-nodejs.git"
16
17
  },
17
- "homepage": "https://github.com/xtrape-com/xtrape-capsule-contracts-node#readme",
18
+ "homepage": "https://forgejo.xtrape.com/xtrape/xtrape-contracts-nodejs#readme",
18
19
  "bugs": {
19
- "url": "https://github.com/xtrape-com/xtrape-capsule-contracts-node/issues"
20
+ "url": "https://forgejo.xtrape.com/xtrape/xtrape-contracts-nodejs/issues"
20
21
  },
21
22
  "type": "module",
22
23
  "main": "./dist/index.cjs",
package/spec/.source CHANGED
@@ -1 +1 @@
1
- xtrape-capsule-docs@local
1
+ xtrape-contracts-nodejs@local-authority
@@ -99,7 +99,7 @@
99
99
  "name": "service.reported",
100
100
  "actorType": "AGENT",
101
101
  "targetType": "CapsuleService",
102
- "summary": "Agent reported (or updated) a Capsule Service manifest."
102
+ "summary": "Agent reported or updated a Worker Runtime Report; action name is retained for compatibility."
103
103
  },
104
104
  {
105
105
  "name": "service.retired",
@@ -111,7 +111,7 @@
111
111
  "name": "service.action.requested",
112
112
  "actorType": "USER",
113
113
  "targetType": "CapsuleService",
114
- "summary": "Admin requested an action on a Capsule Service; backend created a Command."
114
+ "summary": "Admin requested a Worker Action; backend created a Command."
115
115
  },
116
116
  {
117
117
  "name": "command.created",
@@ -16,7 +16,7 @@
16
16
  { "prefix": "agt", "type": "Agent", "comment": "Agent identity." },
17
17
  { "prefix": "tok", "type": "RegistrationToken", "comment": "Registration token (the row; the raw token value is generated separately via newToken('reg'))." },
18
18
  { "prefix": "atk", "type": "AgentToken", "comment": "Agent token (the row; raw token via newToken('agt'))." },
19
- { "prefix": "svc", "type": "CapsuleService", "comment": "Capsule Service registered by an Agent." },
19
+ { "prefix": "svc", "type": "CapsuleService", "comment": "Worker Instance reported by an Agent; persisted type name retained for compatibility." },
20
20
  { "prefix": "act", "type": "ActionDefinition", "comment": "Action declared on a service manifest." },
21
21
  { "prefix": "cmd", "type": "Command", "comment": "Command for an Agent to execute." },
22
22
  { "prefix": "res", "type": "CommandResult", "comment": "Optional separate row for command results; CE v0.1 may inline into Command." },
@@ -21,7 +21,7 @@
21
21
  ]
22
22
  },
23
23
  "CapsuleServiceStatus": {
24
- "description": "Effective lifecycle state of a Capsule Service. Persisted by the backend as derived from agent.status, lastReportedAt, and admin actions.",
24
+ "description": "Effective lifecycle state of a Worker Instance. The schema name is retained for wire compatibility.",
25
25
  "values": [
26
26
  { "value": "PENDING", "meaning": "Service was reported by an Agent but has not yet sent a health report." },
27
27
  { "value": "UP", "meaning": "Service has reported a healthy status within freshness threshold." },
@@ -119,7 +119,7 @@
119
119
  "AgentMode": {
120
120
  "description": "Deployment mode of an Agent.",
121
121
  "values": [
122
- { "value": "embedded", "meaning": "Agent runs in-process inside a Capsule Service (CE v0.1 baseline)." },
122
+ { "value": "embedded", "meaning": "Agent runs in-process inside a Worker (CE v0.1 baseline)." },
123
123
  { "value": "sidecar", "meaning": "Agent runs as a separate process beside services. Reserved for EE.", "reservedFor": "EE" },
124
124
  { "value": "external", "meaning": "Agent runs as a separate fleet manager. Reserved for EE/Cloud.", "reservedFor": "EE" }
125
125
  ]
package/spec/errors.json CHANGED
@@ -76,12 +76,12 @@
76
76
  },
77
77
  {
78
78
  "name": "capsuleService",
79
- "title": "Capsule Service Codes",
79
+ "title": "Worker compatibility codes",
80
80
  "codes": [
81
81
  { "code": "CAPSULE_SERVICE_NOT_FOUND", "httpStatus": 404, "meaning": "serviceId does not exist." },
82
82
  { "code": "CAPSULE_SERVICE_NOT_OWNED", "httpStatus": 403, "meaning": "Service exists but does not belong to the calling Agent." },
83
83
  { "code": "CAPSULE_SERVICE_MANIFEST_INVALID", "httpStatus": 422, "meaning": "Manifest validation failed (missing required fields, etc.)." },
84
- { "code": "CAPSULE_SERVICE_CODE_TAKEN", "httpStatus": 409, "meaning": "Service code conflict in workspace." }
84
+ { "code": "CAPSULE_SERVICE_CODE_TAKEN", "httpStatus": 409, "meaning": "Worker code is already owned in the workspace; code name is retained for compatibility." }
85
85
  ]
86
86
  },
87
87
  {
package/spec/errors.md CHANGED
@@ -89,7 +89,7 @@ Rules:
89
89
 
90
90
  ---
91
91
 
92
- ## 6. Capsule Service Codes
92
+ ## 6. Worker compatibility codes
93
93
 
94
94
  | Code | HTTP | Meaning |
95
95
  |-----------------------------------|------|---------------------------------------------------------------|