@revealui/contracts 1.0.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/LICENSE +22 -0
- package/README.md +160 -0
- package/dist/a2a/index.d.ts +383 -0
- package/dist/a2a/index.d.ts.map +1 -0
- package/dist/a2a/index.js +276 -0
- package/dist/a2a/index.js.map +1 -0
- package/dist/actions/action-validator.d.ts +48 -0
- package/dist/actions/action-validator.d.ts.map +1 -0
- package/dist/actions/action-validator.js +288 -0
- package/dist/actions/action-validator.js.map +1 -0
- package/dist/actions/index.d.ts +7 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +7 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/agents/index.d.ts +628 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +511 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/types.d.ts +22 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/api/auth.d.ts +60 -0
- package/dist/api/auth.d.ts.map +1 -0
- package/dist/api/auth.js +84 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/chat.d.ts +45 -0
- package/dist/api/chat.d.ts.map +1 -0
- package/dist/api/chat.js +55 -0
- package/dist/api/chat.js.map +1 -0
- package/dist/api/gdpr.d.ts +39 -0
- package/dist/api/gdpr.d.ts.map +1 -0
- package/dist/api/gdpr.js +53 -0
- package/dist/api/gdpr.js.map +1 -0
- package/dist/cms/collection.d.ts +108 -0
- package/dist/cms/collection.d.ts.map +1 -0
- package/dist/cms/collection.js +144 -0
- package/dist/cms/collection.js.map +1 -0
- package/dist/cms/compat.d.ts +128 -0
- package/dist/cms/compat.d.ts.map +1 -0
- package/dist/cms/compat.js +141 -0
- package/dist/cms/compat.js.map +1 -0
- package/dist/cms/config-contract.d.ts +278 -0
- package/dist/cms/config-contract.d.ts.map +1 -0
- package/dist/cms/config-contract.js +220 -0
- package/dist/cms/config-contract.js.map +1 -0
- package/dist/cms/config.d.ts +351 -0
- package/dist/cms/config.d.ts.map +1 -0
- package/dist/cms/config.js +50 -0
- package/dist/cms/config.js.map +1 -0
- package/dist/cms/errors.d.ts +122 -0
- package/dist/cms/errors.d.ts.map +1 -0
- package/dist/cms/errors.js +163 -0
- package/dist/cms/errors.js.map +1 -0
- package/dist/cms/extensibility.d.ts +211 -0
- package/dist/cms/extensibility.d.ts.map +1 -0
- package/dist/cms/extensibility.js +313 -0
- package/dist/cms/extensibility.js.map +1 -0
- package/dist/cms/field.d.ts +69 -0
- package/dist/cms/field.d.ts.map +1 -0
- package/dist/cms/field.js +94 -0
- package/dist/cms/field.js.map +1 -0
- package/dist/cms/functions.d.ts +466 -0
- package/dist/cms/functions.d.ts.map +1 -0
- package/dist/cms/functions.js +19 -0
- package/dist/cms/functions.js.map +1 -0
- package/dist/cms/global.d.ts +45 -0
- package/dist/cms/global.d.ts.map +1 -0
- package/dist/cms/global.js +62 -0
- package/dist/cms/global.js.map +1 -0
- package/dist/cms/index.d.ts +23 -0
- package/dist/cms/index.d.ts.map +1 -0
- package/dist/cms/index.js +42 -0
- package/dist/cms/index.js.map +1 -0
- package/dist/cms/structure.d.ts +1601 -0
- package/dist/cms/structure.d.ts.map +1 -0
- package/dist/cms/structure.js +757 -0
- package/dist/cms/structure.js.map +1 -0
- package/dist/content/index.d.ts +1542 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +522 -0
- package/dist/content/index.js.map +1 -0
- package/dist/database/bridge.d.ts +177 -0
- package/dist/database/bridge.d.ts.map +1 -0
- package/dist/database/bridge.js +139 -0
- package/dist/database/bridge.js.map +1 -0
- package/dist/database/index.d.ts +8 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +9 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/type-bridge.d.ts +178 -0
- package/dist/database/type-bridge.d.ts.map +1 -0
- package/dist/database/type-bridge.js +154 -0
- package/dist/database/type-bridge.js.map +1 -0
- package/dist/entities/agent-context.d.ts +280 -0
- package/dist/entities/agent-context.d.ts.map +1 -0
- package/dist/entities/agent-context.js +390 -0
- package/dist/entities/agent-context.js.map +1 -0
- package/dist/entities/agent-memory.d.ts +661 -0
- package/dist/entities/agent-memory.d.ts.map +1 -0
- package/dist/entities/agent-memory.js +544 -0
- package/dist/entities/agent-memory.js.map +1 -0
- package/dist/entities/board.d.ts +95 -0
- package/dist/entities/board.d.ts.map +1 -0
- package/dist/entities/board.js +99 -0
- package/dist/entities/board.js.map +1 -0
- package/dist/entities/code-provenance.d.ts +270 -0
- package/dist/entities/code-provenance.d.ts.map +1 -0
- package/dist/entities/code-provenance.js +339 -0
- package/dist/entities/code-provenance.js.map +1 -0
- package/dist/entities/index.d.ts +22 -0
- package/dist/entities/index.d.ts.map +1 -0
- package/dist/entities/index.js +22 -0
- package/dist/entities/index.js.map +1 -0
- package/dist/entities/media.d.ts +485 -0
- package/dist/entities/media.d.ts.map +1 -0
- package/dist/entities/media.js +606 -0
- package/dist/entities/media.js.map +1 -0
- package/dist/entities/page-revision.d.ts +390 -0
- package/dist/entities/page-revision.d.ts.map +1 -0
- package/dist/entities/page-revision.js +406 -0
- package/dist/entities/page-revision.js.map +1 -0
- package/dist/entities/page.d.ts +2349 -0
- package/dist/entities/page.d.ts.map +1 -0
- package/dist/entities/page.js +377 -0
- package/dist/entities/page.js.map +1 -0
- package/dist/entities/post.d.ts +619 -0
- package/dist/entities/post.d.ts.map +1 -0
- package/dist/entities/post.js +555 -0
- package/dist/entities/post.js.map +1 -0
- package/dist/entities/price.d.ts +772 -0
- package/dist/entities/price.d.ts.map +1 -0
- package/dist/entities/price.js +308 -0
- package/dist/entities/price.js.map +1 -0
- package/dist/entities/product.d.ts +753 -0
- package/dist/entities/product.d.ts.map +1 -0
- package/dist/entities/product.js +307 -0
- package/dist/entities/product.js.map +1 -0
- package/dist/entities/session.d.ts +222 -0
- package/dist/entities/session.d.ts.map +1 -0
- package/dist/entities/session.js +253 -0
- package/dist/entities/session.js.map +1 -0
- package/dist/entities/site.d.ts +387 -0
- package/dist/entities/site.d.ts.map +1 -0
- package/dist/entities/site.js +348 -0
- package/dist/entities/site.js.map +1 -0
- package/dist/entities/ticket-comment.d.ts +49 -0
- package/dist/entities/ticket-comment.d.ts.map +1 -0
- package/dist/entities/ticket-comment.js +58 -0
- package/dist/entities/ticket-comment.js.map +1 -0
- package/dist/entities/ticket-label.d.ts +64 -0
- package/dist/entities/ticket-label.d.ts.map +1 -0
- package/dist/entities/ticket-label.js +77 -0
- package/dist/entities/ticket-label.js.map +1 -0
- package/dist/entities/ticket.d.ts +204 -0
- package/dist/entities/ticket.d.ts.map +1 -0
- package/dist/entities/ticket.js +205 -0
- package/dist/entities/ticket.js.map +1 -0
- package/dist/entities/user.d.ts +336 -0
- package/dist/entities/user.d.ts.map +1 -0
- package/dist/entities/user.js +255 -0
- package/dist/entities/user.js.map +1 -0
- package/dist/foundation/contract.d.ts +221 -0
- package/dist/foundation/contract.d.ts.map +1 -0
- package/dist/foundation/contract.js +133 -0
- package/dist/foundation/contract.js.map +1 -0
- package/dist/foundation/index.d.ts +7 -0
- package/dist/foundation/index.d.ts.map +1 -0
- package/dist/foundation/index.js +7 -0
- package/dist/foundation/index.js.map +1 -0
- package/dist/generated/contracts.d.ts +1514 -0
- package/dist/generated/contracts.d.ts.map +1 -0
- package/dist/generated/contracts.js +959 -0
- package/dist/generated/contracts.js.map +1 -0
- package/dist/generated/database.d.ts +48 -0
- package/dist/generated/database.d.ts.map +1 -0
- package/dist/generated/database.js +17 -0
- package/dist/generated/database.js.map +1 -0
- package/dist/generated/zod-schemas.d.ts +14793 -0
- package/dist/generated/zod-schemas.d.ts.map +1 -0
- package/dist/generated/zod-schemas.js +547 -0
- package/dist/generated/zod-schemas.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/dist/representation/index.d.ts +304 -0
- package/dist/representation/index.d.ts.map +1 -0
- package/dist/representation/index.js +280 -0
- package/dist/representation/index.js.map +1 -0
- package/package.json +117 -0
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2A (Agent-to-Agent) Protocol Contracts
|
|
3
|
+
*
|
|
4
|
+
* Implements the Google A2A specification as Zod schemas, bound to RevealUI's
|
|
5
|
+
* existing AgentDefinition and ToolDefinition contracts. This enables RevealUI
|
|
6
|
+
* agents to interoperate with any A2A-compatible orchestrator (LangGraph,
|
|
7
|
+
* Google ADK, Vertex AI, etc.).
|
|
8
|
+
*
|
|
9
|
+
* Spec: https://google.github.io/A2A
|
|
10
|
+
*
|
|
11
|
+
* Binding:
|
|
12
|
+
* AgentDefinition → A2AAgentCard
|
|
13
|
+
* ToolDefinition → A2ASkill
|
|
14
|
+
*/
|
|
15
|
+
import { z } from 'zod/v4';
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// Agent Card — discovery document served at /.well-known/agent.json
|
|
18
|
+
// =============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* A skill exposed by an A2A agent (maps from ToolDefinition)
|
|
21
|
+
*/
|
|
22
|
+
export const A2ASkillSchema = z.object({
|
|
23
|
+
/** Unique skill identifier (maps from ToolDefinition.name) */
|
|
24
|
+
id: z.string(),
|
|
25
|
+
/** Human-readable name */
|
|
26
|
+
name: z.string(),
|
|
27
|
+
/** Description of what this skill does */
|
|
28
|
+
description: z.string(),
|
|
29
|
+
/** Categorisation tags */
|
|
30
|
+
tags: z.array(z.string()).optional(),
|
|
31
|
+
/** Example prompts that invoke this skill */
|
|
32
|
+
examples: z.array(z.string()).optional(),
|
|
33
|
+
/** Supported input modalities */
|
|
34
|
+
inputModes: z.array(z.string()).default(['text']),
|
|
35
|
+
/** Supported output modalities */
|
|
36
|
+
outputModes: z.array(z.string()).default(['text']),
|
|
37
|
+
});
|
|
38
|
+
/**
|
|
39
|
+
* Agent capabilities flags
|
|
40
|
+
*/
|
|
41
|
+
export const A2ACapabilitiesSchema = z.object({
|
|
42
|
+
/** Whether the agent supports SSE streaming via tasks/sendSubscribe */
|
|
43
|
+
streaming: z.boolean().default(false),
|
|
44
|
+
/** Whether the agent can push notifications to a webhook */
|
|
45
|
+
pushNotifications: z.boolean().default(false),
|
|
46
|
+
/** Whether the agent includes full task history in responses */
|
|
47
|
+
stateTransitionHistory: z.boolean().default(false),
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* Provider information
|
|
51
|
+
*/
|
|
52
|
+
export const A2AProviderSchema = z.object({
|
|
53
|
+
organization: z.string(),
|
|
54
|
+
url: z.string().url().optional(),
|
|
55
|
+
});
|
|
56
|
+
/**
|
|
57
|
+
* Authentication configuration
|
|
58
|
+
*/
|
|
59
|
+
export const A2AAuthSchema = z.object({
|
|
60
|
+
/** Supported auth schemes */
|
|
61
|
+
schemes: z.array(z.enum(['Bearer', 'ApiKey', 'OAuth2', 'None'])).default(['Bearer']),
|
|
62
|
+
/** Optional credentials hint (never put actual secrets here) */
|
|
63
|
+
credentials: z.string().nullable().default(null),
|
|
64
|
+
});
|
|
65
|
+
/**
|
|
66
|
+
* A2A Agent Card — the full discovery document.
|
|
67
|
+
* Served at /.well-known/agent.json (platform) or
|
|
68
|
+
* /.well-known/agents/:id/agent.json (per-agent).
|
|
69
|
+
*/
|
|
70
|
+
export const A2AAgentCardSchema = z.object({
|
|
71
|
+
/** Agent display name */
|
|
72
|
+
name: z.string(),
|
|
73
|
+
/** Human-readable description */
|
|
74
|
+
description: z.string(),
|
|
75
|
+
/** The A2A task endpoint URL */
|
|
76
|
+
url: z.string().url(),
|
|
77
|
+
/** Agent Card URL (self-reference) */
|
|
78
|
+
documentationUrl: z.string().url().optional(),
|
|
79
|
+
/** Provider / publisher info */
|
|
80
|
+
provider: A2AProviderSchema.optional(),
|
|
81
|
+
/** Semver version string */
|
|
82
|
+
version: z.string().default('1.0.0'),
|
|
83
|
+
/** Protocol capabilities */
|
|
84
|
+
capabilities: A2ACapabilitiesSchema,
|
|
85
|
+
/** Authentication requirements */
|
|
86
|
+
authentication: A2AAuthSchema,
|
|
87
|
+
/** Accepted input modalities */
|
|
88
|
+
defaultInputModes: z.array(z.string()).default(['text']),
|
|
89
|
+
/** Produced output modalities */
|
|
90
|
+
defaultOutputModes: z.array(z.string()).default(['text']),
|
|
91
|
+
/** Skills this agent exposes */
|
|
92
|
+
skills: z.array(A2ASkillSchema),
|
|
93
|
+
});
|
|
94
|
+
// =============================================================================
|
|
95
|
+
// Task & Message — runtime protocol types
|
|
96
|
+
// =============================================================================
|
|
97
|
+
/**
|
|
98
|
+
* Text part of a message
|
|
99
|
+
*/
|
|
100
|
+
export const A2ATextPartSchema = z.object({
|
|
101
|
+
type: z.literal('text'),
|
|
102
|
+
text: z.string(),
|
|
103
|
+
});
|
|
104
|
+
/**
|
|
105
|
+
* Structured data part of a message
|
|
106
|
+
*/
|
|
107
|
+
export const A2ADataPartSchema = z.object({
|
|
108
|
+
type: z.literal('data'),
|
|
109
|
+
data: z.record(z.string(), z.unknown()),
|
|
110
|
+
mimeType: z.string().optional(),
|
|
111
|
+
});
|
|
112
|
+
/**
|
|
113
|
+
* File/binary part of a message
|
|
114
|
+
*/
|
|
115
|
+
export const A2AFilePartSchema = z.object({
|
|
116
|
+
type: z.literal('file'),
|
|
117
|
+
mimeType: z.string(),
|
|
118
|
+
/** Base64-encoded file data */
|
|
119
|
+
data: z.string(),
|
|
120
|
+
/** Optional filename hint */
|
|
121
|
+
name: z.string().optional(),
|
|
122
|
+
});
|
|
123
|
+
/** Discriminated union of all part types */
|
|
124
|
+
export const A2APartSchema = z.discriminatedUnion('type', [
|
|
125
|
+
A2ATextPartSchema,
|
|
126
|
+
A2ADataPartSchema,
|
|
127
|
+
A2AFilePartSchema,
|
|
128
|
+
]);
|
|
129
|
+
/**
|
|
130
|
+
* A single message in a task conversation
|
|
131
|
+
*/
|
|
132
|
+
export const A2AMessageSchema = z.object({
|
|
133
|
+
/** Who authored this message */
|
|
134
|
+
role: z.enum(['user', 'agent']),
|
|
135
|
+
/** Content parts */
|
|
136
|
+
parts: z.array(A2APartSchema),
|
|
137
|
+
/** Optional message-level metadata */
|
|
138
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
139
|
+
});
|
|
140
|
+
/**
|
|
141
|
+
* Task lifecycle states
|
|
142
|
+
*/
|
|
143
|
+
export const A2ATaskStateSchema = z.enum([
|
|
144
|
+
'submitted',
|
|
145
|
+
'working',
|
|
146
|
+
'input-required',
|
|
147
|
+
'completed',
|
|
148
|
+
'canceled',
|
|
149
|
+
'failed',
|
|
150
|
+
'unknown',
|
|
151
|
+
]);
|
|
152
|
+
/**
|
|
153
|
+
* Task status snapshot
|
|
154
|
+
*/
|
|
155
|
+
export const A2ATaskStatusSchema = z.object({
|
|
156
|
+
state: A2ATaskStateSchema,
|
|
157
|
+
message: A2AMessageSchema.optional(),
|
|
158
|
+
timestamp: z.string().datetime(),
|
|
159
|
+
});
|
|
160
|
+
/**
|
|
161
|
+
* An artifact produced by a task
|
|
162
|
+
*/
|
|
163
|
+
export const A2AArtifactSchema = z.object({
|
|
164
|
+
name: z.string().optional(),
|
|
165
|
+
description: z.string().optional(),
|
|
166
|
+
parts: z.array(A2APartSchema),
|
|
167
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
168
|
+
index: z.number().int().default(0),
|
|
169
|
+
append: z.boolean().optional(),
|
|
170
|
+
lastChunk: z.boolean().optional(),
|
|
171
|
+
});
|
|
172
|
+
/**
|
|
173
|
+
* A complete A2A Task entity
|
|
174
|
+
*/
|
|
175
|
+
export const A2ATaskSchema = z.object({
|
|
176
|
+
/** Server-assigned task ID */
|
|
177
|
+
id: z.string(),
|
|
178
|
+
/** Optional session ID for grouping related tasks */
|
|
179
|
+
sessionId: z.string().optional(),
|
|
180
|
+
/** Current task status */
|
|
181
|
+
status: A2ATaskStatusSchema,
|
|
182
|
+
/** Produced artifacts (available when state=completed) */
|
|
183
|
+
artifacts: z.array(A2AArtifactSchema).optional(),
|
|
184
|
+
/** Full message history (when stateTransitionHistory=true) */
|
|
185
|
+
history: z.array(A2AMessageSchema).optional(),
|
|
186
|
+
/** Arbitrary task-level metadata */
|
|
187
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
188
|
+
});
|
|
189
|
+
// =============================================================================
|
|
190
|
+
// JSON-RPC 2.0 envelope
|
|
191
|
+
// =============================================================================
|
|
192
|
+
export const A2AJsonRpcRequestSchema = z.object({
|
|
193
|
+
jsonrpc: z.literal('2.0'),
|
|
194
|
+
id: z.union([z.string(), z.number()]),
|
|
195
|
+
method: z.string(),
|
|
196
|
+
params: z.record(z.string(), z.unknown()).optional(),
|
|
197
|
+
});
|
|
198
|
+
export const A2AJsonRpcErrorSchema = z.object({
|
|
199
|
+
code: z.number().int(),
|
|
200
|
+
message: z.string(),
|
|
201
|
+
data: z.unknown().optional(),
|
|
202
|
+
});
|
|
203
|
+
export const A2AJsonRpcResponseSchema = z.object({
|
|
204
|
+
jsonrpc: z.literal('2.0'),
|
|
205
|
+
id: z.union([z.string(), z.number()]),
|
|
206
|
+
result: z.unknown().optional(),
|
|
207
|
+
error: A2AJsonRpcErrorSchema.optional(),
|
|
208
|
+
});
|
|
209
|
+
// =============================================================================
|
|
210
|
+
// tasks/send params
|
|
211
|
+
// =============================================================================
|
|
212
|
+
export const A2ASendTaskParamsSchema = z.object({
|
|
213
|
+
/** Optional task ID (server generates one if omitted) */
|
|
214
|
+
id: z.string().optional(),
|
|
215
|
+
/** Optional session ID */
|
|
216
|
+
sessionId: z.string().optional(),
|
|
217
|
+
/** The initial user message */
|
|
218
|
+
message: A2AMessageSchema,
|
|
219
|
+
/** Arbitrary caller metadata */
|
|
220
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
221
|
+
});
|
|
222
|
+
// =============================================================================
|
|
223
|
+
// Mapper functions — bind A2A spec to RevealUI contracts
|
|
224
|
+
// =============================================================================
|
|
225
|
+
/**
|
|
226
|
+
* Convert a RevealUI ToolDefinition to an A2A Skill.
|
|
227
|
+
* ToolDefinition.name → Skill.id
|
|
228
|
+
* ToolDefinition.examples[].description → Skill.examples
|
|
229
|
+
*/
|
|
230
|
+
export function toolDefinitionToSkill(tool) {
|
|
231
|
+
return {
|
|
232
|
+
id: tool.name,
|
|
233
|
+
name: tool.name
|
|
234
|
+
.replace(/([A-Z])/g, ' $1')
|
|
235
|
+
.replace(/^./, (s) => s.toUpperCase())
|
|
236
|
+
.trim(),
|
|
237
|
+
description: tool.description,
|
|
238
|
+
tags: tool.requiredCapabilities ?? [],
|
|
239
|
+
examples: tool.examples?.map((e) => e.description ?? JSON.stringify(e.input)).filter(Boolean),
|
|
240
|
+
inputModes: ['text'],
|
|
241
|
+
outputModes: ['text'],
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Convert a RevealUI AgentDefinition to an A2A Agent Card.
|
|
246
|
+
*
|
|
247
|
+
* @param def - The AgentDefinition from @revealui/contracts
|
|
248
|
+
* @param baseUrl - The public base URL of the A2A endpoint (e.g. https://api.revealui.com)
|
|
249
|
+
*/
|
|
250
|
+
export function agentDefinitionToCard(def, baseUrl) {
|
|
251
|
+
const url = baseUrl.replace(/\/$/, '');
|
|
252
|
+
return {
|
|
253
|
+
name: def.name,
|
|
254
|
+
description: def.description,
|
|
255
|
+
url: `${url}/a2a`,
|
|
256
|
+
documentationUrl: `${url}/docs`,
|
|
257
|
+
provider: {
|
|
258
|
+
organization: 'RevealUI Studio',
|
|
259
|
+
url: 'https://revealui.com',
|
|
260
|
+
},
|
|
261
|
+
version: String(def.version),
|
|
262
|
+
capabilities: {
|
|
263
|
+
streaming: true,
|
|
264
|
+
pushNotifications: false,
|
|
265
|
+
stateTransitionHistory: false,
|
|
266
|
+
},
|
|
267
|
+
authentication: {
|
|
268
|
+
schemes: ['Bearer'],
|
|
269
|
+
credentials: null,
|
|
270
|
+
},
|
|
271
|
+
defaultInputModes: ['text'],
|
|
272
|
+
defaultOutputModes: ['text'],
|
|
273
|
+
skills: def.tools.map(toolDefinitionToSkill),
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/a2a/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Validation Layer
|
|
3
|
+
*
|
|
4
|
+
* Validates actions against entity constraints, agent capabilities, and permissions.
|
|
5
|
+
* This provides runtime enforcement of the constraints defined in entity schemas.
|
|
6
|
+
*
|
|
7
|
+
* @module @revealui/contracts/actions
|
|
8
|
+
*/
|
|
9
|
+
import type { AgentDefinition } from '@revealui/contracts/agents';
|
|
10
|
+
import type { AgentConstraint, DualEntity } from '../representation/index.js';
|
|
11
|
+
export interface ActionValidationContext {
|
|
12
|
+
/** The entity being acted upon */
|
|
13
|
+
entity: DualEntity;
|
|
14
|
+
/** The action name (e.g., 'update', 'delete', 'addBlock') */
|
|
15
|
+
action: string;
|
|
16
|
+
/** The agent attempting the action */
|
|
17
|
+
agent: AgentDefinition;
|
|
18
|
+
/** Proposed changes (for update/create actions) */
|
|
19
|
+
changes?: Record<string, unknown>;
|
|
20
|
+
/** User permissions (for permission-based constraints) */
|
|
21
|
+
permissions?: string[];
|
|
22
|
+
/** Additional context */
|
|
23
|
+
context?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
export interface ActionValidationSuccess {
|
|
26
|
+
success: true;
|
|
27
|
+
allowed: true;
|
|
28
|
+
warnings?: string[];
|
|
29
|
+
}
|
|
30
|
+
export interface ActionValidationFailure {
|
|
31
|
+
success: false;
|
|
32
|
+
allowed: false;
|
|
33
|
+
errors: ActionValidationError[];
|
|
34
|
+
}
|
|
35
|
+
export interface ActionValidationError {
|
|
36
|
+
code: string;
|
|
37
|
+
message: string;
|
|
38
|
+
field?: string;
|
|
39
|
+
constraint?: AgentConstraint;
|
|
40
|
+
}
|
|
41
|
+
export type ActionValidationResult = ActionValidationSuccess | ActionValidationFailure;
|
|
42
|
+
/**
|
|
43
|
+
* Validate an action against entity constraints, agent capabilities, and permissions
|
|
44
|
+
*
|
|
45
|
+
* This is the main entry point for action validation in @revealui/contracts/actions
|
|
46
|
+
*/
|
|
47
|
+
export declare function validateAction(context: ActionValidationContext): ActionValidationResult;
|
|
48
|
+
//# sourceMappingURL=action-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-validator.d.ts","sourceRoot":"","sources":["../../src/actions/action-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EAAyB,eAAe,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAMpG,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,MAAM,EAAE,UAAU,CAAA;IAElB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAA;IAEd,sCAAsC;IACtC,KAAK,EAAE,eAAe,CAAA;IAEtB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAEjC,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IAEtB,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,IAAI,CAAA;IACb,OAAO,EAAE,IAAI,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,KAAK,CAAA;IACd,OAAO,EAAE,KAAK,CAAA;IACd,MAAM,EAAE,qBAAqB,EAAE,CAAA;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,eAAe,CAAA;CAC7B;AAED,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,GAAG,uBAAuB,CAAA;AAmRtF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CAsDvF"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action Validation Layer
|
|
3
|
+
*
|
|
4
|
+
* Validates actions against entity constraints, agent capabilities, and permissions.
|
|
5
|
+
* This provides runtime enforcement of the constraints defined in entity schemas.
|
|
6
|
+
*
|
|
7
|
+
* @module @revealui/contracts/actions
|
|
8
|
+
*/
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// Constraint Checking
|
|
11
|
+
// =============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* Check if changes violate entity constraints
|
|
14
|
+
*/
|
|
15
|
+
function checkConstraints(entity, changes) {
|
|
16
|
+
if (!changes)
|
|
17
|
+
return { success: true, allowed: true };
|
|
18
|
+
const constraints = entity.agent?.constraints || [];
|
|
19
|
+
const errors = [];
|
|
20
|
+
for (const constraint of constraints) {
|
|
21
|
+
const result = checkSingleConstraint(constraint, entity, changes);
|
|
22
|
+
if (!result.allowed) {
|
|
23
|
+
errors.push(...result.errors);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (errors.length > 0) {
|
|
27
|
+
return { success: false, allowed: false, errors };
|
|
28
|
+
}
|
|
29
|
+
return { success: true, allowed: true };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check a single constraint
|
|
33
|
+
*/
|
|
34
|
+
function checkSingleConstraint(constraint, entity, changes) {
|
|
35
|
+
const { type, field, params, message } = constraint;
|
|
36
|
+
// If constraint applies to a specific field, only check if that field is changing
|
|
37
|
+
if (field && !(field in changes)) {
|
|
38
|
+
return { success: true, allowed: true };
|
|
39
|
+
}
|
|
40
|
+
const value = field ? changes[field] : changes;
|
|
41
|
+
switch (type) {
|
|
42
|
+
case 'readonly':
|
|
43
|
+
if (field && field in changes) {
|
|
44
|
+
return {
|
|
45
|
+
success: false,
|
|
46
|
+
allowed: false,
|
|
47
|
+
errors: [
|
|
48
|
+
{
|
|
49
|
+
code: 'READONLY_FIELD',
|
|
50
|
+
message: message || `Field '${field}' is readonly`,
|
|
51
|
+
field,
|
|
52
|
+
constraint,
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
break;
|
|
58
|
+
case 'required':
|
|
59
|
+
if (field && (!value || value === '')) {
|
|
60
|
+
return {
|
|
61
|
+
success: false,
|
|
62
|
+
allowed: false,
|
|
63
|
+
errors: [
|
|
64
|
+
{
|
|
65
|
+
code: 'REQUIRED_FIELD',
|
|
66
|
+
message: message || `Field '${field}' is required`,
|
|
67
|
+
field,
|
|
68
|
+
constraint,
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
break;
|
|
74
|
+
case 'immutable': {
|
|
75
|
+
// Check if field already has a value (immutable after creation)
|
|
76
|
+
const currentValue = field ? entity[field] : entity;
|
|
77
|
+
if (currentValue !== undefined && value !== currentValue) {
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
allowed: false,
|
|
81
|
+
errors: [
|
|
82
|
+
{
|
|
83
|
+
code: 'IMMUTABLE_FIELD',
|
|
84
|
+
message: message || `Field '${field}' cannot be changed after creation`,
|
|
85
|
+
...(field && { field }),
|
|
86
|
+
constraint,
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
case 'range':
|
|
94
|
+
if (typeof value === 'number' && params) {
|
|
95
|
+
const min = params.min;
|
|
96
|
+
const max = params.max;
|
|
97
|
+
if ((min !== undefined && value < min) || (max !== undefined && value > max)) {
|
|
98
|
+
return {
|
|
99
|
+
success: false,
|
|
100
|
+
allowed: false,
|
|
101
|
+
errors: [
|
|
102
|
+
{
|
|
103
|
+
code: 'RANGE_VIOLATION',
|
|
104
|
+
message: message || `Value must be between ${min} and ${max}`,
|
|
105
|
+
...(field && { field }),
|
|
106
|
+
constraint,
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
break;
|
|
113
|
+
case 'pattern': {
|
|
114
|
+
if (typeof value === 'string') {
|
|
115
|
+
const pattern = typeof params?.pattern === 'string' ? params.pattern : null;
|
|
116
|
+
if (pattern) {
|
|
117
|
+
const regex = new RegExp(pattern);
|
|
118
|
+
if (!regex.test(value)) {
|
|
119
|
+
return {
|
|
120
|
+
success: false,
|
|
121
|
+
allowed: false,
|
|
122
|
+
errors: [
|
|
123
|
+
{
|
|
124
|
+
code: 'PATTERN_VIOLATION',
|
|
125
|
+
message: message || `Value must match pattern ${pattern}`,
|
|
126
|
+
...(field && { field }),
|
|
127
|
+
constraint,
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
case 'capability':
|
|
137
|
+
// Handled separately in checkCapabilities
|
|
138
|
+
break;
|
|
139
|
+
case 'permission':
|
|
140
|
+
// Handled separately in checkPermissions
|
|
141
|
+
break;
|
|
142
|
+
case 'custom': {
|
|
143
|
+
// Custom constraint logic would be evaluated here
|
|
144
|
+
const validator = params?.validator;
|
|
145
|
+
if (typeof validator === 'function') {
|
|
146
|
+
const customResult = validator(value, entity, changes);
|
|
147
|
+
if (!customResult) {
|
|
148
|
+
return {
|
|
149
|
+
success: false,
|
|
150
|
+
allowed: false,
|
|
151
|
+
errors: [
|
|
152
|
+
{
|
|
153
|
+
code: 'CUSTOM_CONSTRAINT_FAILED',
|
|
154
|
+
message: message || 'Custom constraint validation failed',
|
|
155
|
+
...(field && { field }),
|
|
156
|
+
constraint,
|
|
157
|
+
},
|
|
158
|
+
],
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return { success: true, allowed: true };
|
|
166
|
+
}
|
|
167
|
+
// =============================================================================
|
|
168
|
+
// Capability Checking
|
|
169
|
+
// =============================================================================
|
|
170
|
+
/**
|
|
171
|
+
* Check if agent has required capabilities for action
|
|
172
|
+
*/
|
|
173
|
+
function checkCapabilities(agent, requiredCapabilities) {
|
|
174
|
+
const agentCapabilities = agent.capabilities || [];
|
|
175
|
+
const missing = requiredCapabilities.filter((cap) => !agentCapabilities.includes(cap));
|
|
176
|
+
if (missing.length > 0) {
|
|
177
|
+
return {
|
|
178
|
+
success: false,
|
|
179
|
+
allowed: false,
|
|
180
|
+
errors: [
|
|
181
|
+
{
|
|
182
|
+
code: 'MISSING_CAPABILITY',
|
|
183
|
+
message: `Agent missing required capabilities: ${missing.join(', ')}`,
|
|
184
|
+
},
|
|
185
|
+
],
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
return { success: true, allowed: true };
|
|
189
|
+
}
|
|
190
|
+
// =============================================================================
|
|
191
|
+
// Permission Checking
|
|
192
|
+
// =============================================================================
|
|
193
|
+
/**
|
|
194
|
+
* Check if user has required permissions for action
|
|
195
|
+
*/
|
|
196
|
+
function checkPermissions(permissions, actionDef) {
|
|
197
|
+
// If action doesn't require permissions, allow it
|
|
198
|
+
const requiredPermissions = actionDef.requiredCapabilities
|
|
199
|
+
?.filter((cap) => cap.startsWith('permission:'))
|
|
200
|
+
.map((cap) => cap.replace('permission:', ''));
|
|
201
|
+
if (!requiredPermissions || requiredPermissions.length === 0) {
|
|
202
|
+
return { success: true, allowed: true };
|
|
203
|
+
}
|
|
204
|
+
if (!permissions || permissions.length === 0) {
|
|
205
|
+
return {
|
|
206
|
+
success: false,
|
|
207
|
+
allowed: false,
|
|
208
|
+
errors: [
|
|
209
|
+
{
|
|
210
|
+
code: 'MISSING_PERMISSION',
|
|
211
|
+
message: `Action requires permissions: ${requiredPermissions.join(', ')}`,
|
|
212
|
+
},
|
|
213
|
+
],
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
const missing = requiredPermissions.filter((perm) => !permissions.includes(perm));
|
|
217
|
+
if (missing.length > 0) {
|
|
218
|
+
return {
|
|
219
|
+
success: false,
|
|
220
|
+
allowed: false,
|
|
221
|
+
errors: [
|
|
222
|
+
{
|
|
223
|
+
code: 'MISSING_PERMISSION',
|
|
224
|
+
message: `Missing permissions: ${missing.join(', ')}`,
|
|
225
|
+
},
|
|
226
|
+
],
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
return { success: true, allowed: true };
|
|
230
|
+
}
|
|
231
|
+
// =============================================================================
|
|
232
|
+
// Action Validation (Main Entry Point)
|
|
233
|
+
// =============================================================================
|
|
234
|
+
/**
|
|
235
|
+
* Validate an action against entity constraints, agent capabilities, and permissions
|
|
236
|
+
*
|
|
237
|
+
* This is the main entry point for action validation in @revealui/contracts/actions
|
|
238
|
+
*/
|
|
239
|
+
export function validateAction(context) {
|
|
240
|
+
const { entity, action, agent, changes, permissions } = context;
|
|
241
|
+
// 1. Check if action is defined on entity
|
|
242
|
+
const actionDef = entity.agent?.actions?.find((a) => a.name === action);
|
|
243
|
+
if (!actionDef) {
|
|
244
|
+
return {
|
|
245
|
+
success: false,
|
|
246
|
+
allowed: false,
|
|
247
|
+
errors: [
|
|
248
|
+
{
|
|
249
|
+
code: 'ACTION_NOT_FOUND',
|
|
250
|
+
message: `Action '${action}' is not available on this entity`,
|
|
251
|
+
},
|
|
252
|
+
],
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
// 2. Check if action is destructive and requires confirmation
|
|
256
|
+
if (actionDef.destructive && !context.context?.confirmed) {
|
|
257
|
+
return {
|
|
258
|
+
success: false,
|
|
259
|
+
allowed: false,
|
|
260
|
+
errors: [
|
|
261
|
+
{
|
|
262
|
+
code: 'DESTRUCTIVE_ACTION_REQUIRES_CONFIRMATION',
|
|
263
|
+
message: `Action '${action}' is destructive and requires confirmation`,
|
|
264
|
+
},
|
|
265
|
+
],
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
// 3. Check constraints
|
|
269
|
+
const constraintResult = checkConstraints(entity, changes);
|
|
270
|
+
if (!constraintResult.success) {
|
|
271
|
+
return constraintResult;
|
|
272
|
+
}
|
|
273
|
+
// 4. Check capabilities
|
|
274
|
+
if (actionDef.requiredCapabilities) {
|
|
275
|
+
const capabilityResult = checkCapabilities(agent, actionDef.requiredCapabilities);
|
|
276
|
+
if (!capabilityResult.success) {
|
|
277
|
+
return capabilityResult;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// 5. Check permissions
|
|
281
|
+
const permissionResult = checkPermissions(permissions, actionDef);
|
|
282
|
+
if (!permissionResult.success) {
|
|
283
|
+
return permissionResult;
|
|
284
|
+
}
|
|
285
|
+
// All checks passed
|
|
286
|
+
return { success: true, allowed: true };
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=action-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-validator.js","sourceRoot":"","sources":["../../src/actions/action-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @revealui/contracts/actions
|
|
3
|
+
*
|
|
4
|
+
* Action validation layer - validates actions against entity constraints
|
|
5
|
+
*/
|
|
6
|
+
export { type ActionValidationContext, type ActionValidationError, type ActionValidationFailure, type ActionValidationResult, type ActionValidationSuccess, validateAction, } from './action-validator.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,cAAc,GACf,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAML,cAAc,GACf,MAAM,uBAAuB,CAAA"}
|