@xtrape/capsule-contracts-node 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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,87 +107,187 @@ 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 CreateActionCommandRequestSchema = z.object({ payload: AnyJson.optional(), confirmation: z.boolean().optional() });
197
+ var CapsuleBusExperimentalSchema = z2.literal("v0.4-experimental");
198
+ var BusRouteStatus = ["ENABLED", "DISABLED", "DRY_RUN"];
199
+ var BusRouteStatusSchema = z2.enum(BusRouteStatus);
200
+ var BusEventEnvelopeSchema = z2.object({
201
+ id: z2.string().startsWith("bev_").optional(),
202
+ experimental: CapsuleBusExperimentalSchema.default("v0.4-experimental"),
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(),
209
+ payload: AnyJson.default({}).optional(),
210
+ metadata: AnyJson.default({}).optional()
211
+ });
212
+ var PublishBusEventRequestSchema = BusEventEnvelopeSchema.omit({ id: true }).extend({
213
+ routePolicy: z2.object({ dryRun: z2.boolean().optional() }).optional()
214
+ });
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(),
219
+ status: BusRouteStatusSchema.optional().default("DISABLED"),
220
+ match: z2.object({
221
+ eventType: z2.string().min(1).max(160),
222
+ sourceServiceCode: z2.string().min(1).max(80).optional()
223
+ }),
224
+ target: z2.object({
225
+ serviceCode: z2.string().min(1).max(80),
226
+ actionName: z2.string().min(1).max(128)
227
+ }),
228
+ inputMapping: AnyJson.default({}).optional(),
229
+ metadata: AnyJson.default({}).optional()
230
+ });
231
+ var CreateBusRouteRuleRequestSchema = BusRouteRuleSchema.omit({ id: true });
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(),
238
+ payload: AnyJson.default({}).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()
243
+ });
244
+ var busCommandRequestSchema = BusCommandRequestSchema;
245
+ var BusRoutingRuleSchema = BusRouteRuleSchema;
246
+ var busRoutingRuleSchema = BusRoutingRuleSchema;
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()
256
+ });
257
+ var PublishBusEventResponseSchema = z2.object({
258
+ eventId: z2.string().startsWith("bev_"),
259
+ experimental: CapsuleBusExperimentalSchema,
260
+ routedCommands: z2.array(BusRoutedCommandSchema)
261
+ });
262
+ var BusEventRecordSchema = BusEventEnvelopeSchema.extend({
263
+ id: z2.string().startsWith("bev_"),
264
+ agentId: z2.string().startsWith("agt_"),
265
+ acceptedAt: z2.string(),
266
+ routeCount: z2.number().int()
267
+ });
268
+ var BusErrorCode = {
269
+ CAPSULE_BUS_DISABLED: "CAPSULE_BUS_DISABLED",
270
+ BUS_RATE_LIMITED: "BUS_RATE_LIMITED",
271
+ BUS_DEPTH_EXCEEDED: "BUS_DEPTH_EXCEEDED"
272
+ };
273
+ var publishBusEventRequestSchema = PublishBusEventRequestSchema;
274
+ var publishBusEventResponseSchema = PublishBusEventResponseSchema;
275
+ var busEventEnvelopeSchema = BusEventEnvelopeSchema;
276
+ var busRouteRuleSchema = BusRouteRuleSchema;
277
+ var createBusRouteRuleRequestSchema = CreateBusRouteRuleRequestSchema;
278
+ var CreateActionCommandRequestSchema = z2.object({ payload: AnyJson.optional(), confirmation: z2.boolean().optional() });
82
279
  var createActionCommandRequestSchema = CreateActionCommandRequestSchema;
83
- var CommandTypeSchema = z.enum(["ACTION_PREPARE", "ACTION_EXECUTE"]);
84
- 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() });
85
- 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() });
86
283
  var reportCommandResultRequestSchema = ReportCommandResultRequestSchema;
87
- 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() });
88
285
  var CommandDetailSchema = CommandSchema.extend({ result: CommandResultSchema.nullable().optional() });
89
- 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() });
90
- 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() });
91
- 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() });
92
- var SystemVersionSchema = z.object({ version: z.string(), edition: z.literal("ce"), commit: z.string().optional(), buildTime: z.string().optional() });
93
- 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() });
94
291
  var HttpError = class extends Error {
95
292
  constructor(httpStatus, code, publicMessage, details) {
96
293
  super(publicMessage);
@@ -129,7 +326,8 @@ var ErrorCode = {
129
326
  TOKEN_REVOKED: "TOKEN_REVOKED",
130
327
  TOKEN_EXPIRED: "TOKEN_EXPIRED",
131
328
  AGENT_REVOKED: "AGENT_REVOKED",
132
- AGENT_DISABLED: "AGENT_DISABLED"
329
+ AGENT_DISABLED: "AGENT_DISABLED",
330
+ CAPSULE_SERVICE_CODE_TAKEN: "CAPSULE_SERVICE_CODE_TAKEN"
133
331
  };
134
332
  export {
135
333
  ActionDefinitionInputSchema,
@@ -139,6 +337,7 @@ export {
139
337
  AdminSessionSchema,
140
338
  AgentHeartbeatRequestSchema,
141
339
  AgentHeartbeatResponseSchema,
340
+ AgentHeartbeatSchema,
142
341
  AgentMode,
143
342
  AgentModeSchema,
144
343
  AgentSchema,
@@ -148,11 +347,23 @@ export {
148
347
  AuditActorType,
149
348
  AuditEventSchema,
150
349
  AuditResult,
350
+ BusCommandRequestSchema,
351
+ BusErrorCode,
352
+ BusEventEnvelopeSchema,
353
+ BusEventRecordSchema,
354
+ BusRouteRuleSchema,
355
+ BusRouteStatus,
356
+ BusRouteStatusSchema,
357
+ BusRoutedCommandSchema,
358
+ BusRoutingRuleSchema,
359
+ CE_CONTRACT_VERSION,
360
+ CapsuleBusExperimentalSchema,
151
361
  CapsuleManifestSchema,
152
362
  CapsuleServiceDetailSchema,
153
363
  CapsuleServiceSchema,
154
364
  CapsuleServiceStatus,
155
365
  CapsuleServiceStatusSchema,
366
+ CeErrorCode,
156
367
  CommandDetailSchema,
157
368
  CommandResultSchema,
158
369
  CommandSchema,
@@ -161,13 +372,18 @@ export {
161
372
  CommandTypeSchema,
162
373
  ConfigItemInputSchema,
163
374
  ConfigItemSchema,
375
+ ConversationMessageSchema,
376
+ ConversationTargetType,
377
+ ConversationTargetTypeSchema,
164
378
  CreateActionCommandRequestSchema,
379
+ CreateBusRouteRuleRequestSchema,
165
380
  CreateRegistrationTokenRequestSchema,
166
381
  CreateRegistrationTokenResponseSchema,
167
382
  DangerLevel,
168
383
  DangerLevelSchema,
169
384
  DashboardSummarySchema,
170
385
  ErrorCode,
386
+ ErrorModelSchema,
171
387
  EventMetadataSchema,
172
388
  HealthReportInputSchema,
173
389
  HealthReportSchema,
@@ -175,39 +391,74 @@ export {
175
391
  HealthStatusSchema,
176
392
  HttpError,
177
393
  ListQueryBase,
394
+ MessageSenderType,
395
+ MessageSenderTypeSchema,
396
+ MessageType,
397
+ MessageTypeSchema,
398
+ PublishBusEventRequestSchema,
399
+ PublishBusEventResponseSchema,
178
400
  RegisterAgentRequestSchema,
179
401
  RegisterAgentResponseSchema,
180
402
  RegistrationTokenSchema,
181
403
  ReportCommandResultRequestSchema,
182
404
  ReportedServiceSchema,
405
+ ReportedWorkerSchema,
183
406
  RuntimeKindSchema,
184
407
  ServiceCapabilitySchema,
408
+ ServiceInstanceHealth,
409
+ ServiceInstanceHealthSchema,
410
+ ServiceInstanceSchema,
185
411
  ServiceKind,
186
412
  ServiceKindSchema,
413
+ ServiceManifestSchema,
187
414
  ServiceReportRequestSchema,
188
415
  SystemHealthSchema,
189
416
  SystemVersionSchema,
190
417
  TokenStatus,
191
418
  UserRole,
192
419
  UserSchema,
420
+ WorkerDetailSchema,
421
+ WorkerInstanceDetailSchema,
422
+ WorkerInstanceSchema,
423
+ WorkerManifestSchema,
424
+ WorkerReportRequestSchema,
425
+ WorkerRuntimeReportSchema,
426
+ WorkerSchema,
427
+ WorkerStatus,
428
+ WorkerStatusSchema,
193
429
  actionDefinitionInputSchema,
194
430
  actionPrepareResultSchema,
195
431
  adminLoginRequestSchema,
196
432
  agentHeartbeatRequestSchema,
433
+ busCommandRequestSchema,
434
+ busEventEnvelopeSchema,
435
+ busRouteRuleSchema,
436
+ busRoutingRuleSchema,
197
437
  configItemInputSchema,
198
438
  createActionCommandRequestSchema,
439
+ createBusRouteRuleRequestSchema,
199
440
  createRegistrationTokenRequestSchema,
200
441
  createUserRequestSchema,
201
442
  eventMetadataSchema,
202
443
  healthReportInputSchema,
203
444
  paginate,
204
445
  parseSort,
446
+ publishBusEventRequestSchema,
447
+ publishBusEventResponseSchema,
205
448
  registerAgentRequestSchema,
206
449
  reportCommandResultRequestSchema,
207
450
  reportedServiceSchema,
451
+ reportedWorkerSchema,
208
452
  resetUserPasswordRequestSchema,
209
453
  serviceCapabilitySchema,
210
454
  serviceReportRequestSchema,
211
455
  updateUserRequestSchema,
212
- z
456
+ workerDetailSchema,
457
+ workerInstanceDetailSchema,
458
+ workerInstanceSchema,
459
+ workerManifestSchema,
460
+ workerReportRequestSchema,
461
+ workerRuntimeReportSchema,
462
+ workerSchema,
463
+ z2 as z
213
464
  };
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@xtrape/capsule-contracts-node",
3
- "version": "0.3.0",
4
- "description": "TypeScript contracts and Zod schemas for Xtrape Capsule and Opstage wire protocols.",
3
+ "version": "0.5.0",
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",
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
  |-----------------------------------|------|---------------------------------------------------------------|