@clowder-ai/plugin-contract 0.1.0-beta.3 → 0.1.0-beta.37

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.
Files changed (159) hide show
  1. package/dist/codegen/generate-contract.d.ts +10 -0
  2. package/dist/codegen/generate-contract.d.ts.map +1 -1
  3. package/dist/codegen/generate-contract.js +362 -21
  4. package/dist/codegen/generate-contract.js.map +1 -1
  5. package/dist/conformance/fixtures.d.ts +11 -0
  6. package/dist/conformance/fixtures.d.ts.map +1 -0
  7. package/dist/conformance/fixtures.js +9 -0
  8. package/dist/conformance/fixtures.js.map +1 -0
  9. package/dist/conformance/index.d.ts +4 -1
  10. package/dist/conformance/index.d.ts.map +1 -1
  11. package/dist/conformance/index.js +3 -1
  12. package/dist/conformance/index.js.map +1 -1
  13. package/dist/conformance/messaging-behavior-fixture.d.ts +12 -0
  14. package/dist/conformance/messaging-behavior-fixture.d.ts.map +1 -0
  15. package/dist/conformance/messaging-behavior-fixture.js +30 -0
  16. package/dist/conformance/messaging-behavior-fixture.js.map +1 -0
  17. package/dist/conformance/runner.d.ts.map +1 -1
  18. package/dist/conformance/runner.js +23 -3
  19. package/dist/conformance/runner.js.map +1 -1
  20. package/dist/conformance/stdio-harness/child-process-harness.d.ts +6 -0
  21. package/dist/conformance/stdio-harness/child-process-harness.d.ts.map +1 -1
  22. package/dist/conformance/stdio-harness/child-process-harness.js +26 -9
  23. package/dist/conformance/stdio-harness/child-process-harness.js.map +1 -1
  24. package/dist/conformance/stdio-harness/index.d.ts +1 -1
  25. package/dist/conformance/stdio-harness/index.d.ts.map +1 -1
  26. package/dist/conformance/stdio-harness/index.js +1 -1
  27. package/dist/conformance/stdio-harness/index.js.map +1 -1
  28. package/dist/conformance/stdio-harness/ndjson-frame.d.ts +6 -1
  29. package/dist/conformance/stdio-harness/ndjson-frame.d.ts.map +1 -1
  30. package/dist/conformance/stdio-harness/ndjson-frame.js +7 -1
  31. package/dist/conformance/stdio-harness/ndjson-frame.js.map +1 -1
  32. package/dist/conformance/stdio-harness/wire-shape.d.ts +1 -1
  33. package/dist/docx-materialization.d.ts +8 -0
  34. package/dist/docx-materialization.d.ts.map +1 -0
  35. package/dist/docx-materialization.js +19 -0
  36. package/dist/docx-materialization.js.map +1 -0
  37. package/dist/generated/contract.generated.d.ts +1793 -32
  38. package/dist/generated/contract.generated.d.ts.map +1 -1
  39. package/dist/generated/contract.generated.js +72 -3
  40. package/dist/generated/contract.generated.js.map +1 -1
  41. package/dist/index.d.ts +2 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +2 -1
  44. package/dist/index.js.map +1 -1
  45. package/dist/validation/catalog.d.ts +21 -0
  46. package/dist/validation/catalog.d.ts.map +1 -0
  47. package/dist/validation/catalog.js +140 -0
  48. package/dist/validation/catalog.js.map +1 -0
  49. package/dist/validation/cloud-conversation-host.d.ts +18 -0
  50. package/dist/validation/cloud-conversation-host.d.ts.map +1 -0
  51. package/dist/validation/cloud-conversation-host.js +83 -0
  52. package/dist/validation/cloud-conversation-host.js.map +1 -0
  53. package/dist/validation/companion-bridge.d.ts +6 -0
  54. package/dist/validation/companion-bridge.d.ts.map +1 -0
  55. package/dist/validation/companion-bridge.js +198 -0
  56. package/dist/validation/companion-bridge.js.map +1 -0
  57. package/dist/validation/docx-materialization.d.ts +6 -0
  58. package/dist/validation/docx-materialization.d.ts.map +1 -0
  59. package/dist/validation/docx-materialization.js +36 -0
  60. package/dist/validation/docx-materialization.js.map +1 -0
  61. package/dist/validation/index.d.ts +10 -0
  62. package/dist/validation/index.d.ts.map +1 -1
  63. package/dist/validation/index.js +10 -0
  64. package/dist/validation/index.js.map +1 -1
  65. package/dist/validation/manifest.d.ts +23 -0
  66. package/dist/validation/manifest.d.ts.map +1 -0
  67. package/dist/validation/manifest.js +273 -0
  68. package/dist/validation/manifest.js.map +1 -0
  69. package/dist/validation/members.d.ts +4 -0
  70. package/dist/validation/members.d.ts.map +1 -0
  71. package/dist/validation/members.js +11 -0
  72. package/dist/validation/members.js.map +1 -0
  73. package/dist/validation/messaging-semantic.d.ts.map +1 -1
  74. package/dist/validation/messaging-semantic.js +98 -0
  75. package/dist/validation/messaging-semantic.js.map +1 -1
  76. package/dist/validation/messaging-wire.d.ts +42 -0
  77. package/dist/validation/messaging-wire.d.ts.map +1 -0
  78. package/dist/validation/messaging-wire.js +184 -0
  79. package/dist/validation/messaging-wire.js.map +1 -0
  80. package/dist/validation/operation-rows.d.ts +25 -0
  81. package/dist/validation/operation-rows.d.ts.map +1 -0
  82. package/dist/validation/operation-rows.js +135 -0
  83. package/dist/validation/operation-rows.js.map +1 -0
  84. package/dist/validation/signals.d.ts +17 -0
  85. package/dist/validation/signals.d.ts.map +1 -0
  86. package/dist/validation/signals.js +32 -0
  87. package/dist/validation/signals.js.map +1 -0
  88. package/dist/wire/constants.d.ts +2 -1
  89. package/dist/wire/constants.d.ts.map +1 -1
  90. package/dist/wire/constants.js +2 -1
  91. package/dist/wire/constants.js.map +1 -1
  92. package/dist/wire/dispatch.d.ts +49 -0
  93. package/dist/wire/dispatch.d.ts.map +1 -0
  94. package/dist/wire/dispatch.js +880 -0
  95. package/dist/wire/dispatch.js.map +1 -0
  96. package/dist/wire/disposition-fixtures.d.ts +19 -2
  97. package/dist/wire/disposition-fixtures.d.ts.map +1 -1
  98. package/dist/wire/disposition-fixtures.js +1110 -77
  99. package/dist/wire/disposition-fixtures.js.map +1 -1
  100. package/dist/wire/disposition.d.ts +10 -8
  101. package/dist/wire/disposition.d.ts.map +1 -1
  102. package/dist/wire/disposition.js +20 -8
  103. package/dist/wire/disposition.js.map +1 -1
  104. package/dist/wire/envelope.d.ts +31 -0
  105. package/dist/wire/envelope.d.ts.map +1 -1
  106. package/dist/wire/envelope.js +48 -1
  107. package/dist/wire/envelope.js.map +1 -1
  108. package/dist/wire/errors.d.ts +31 -1
  109. package/dist/wire/errors.d.ts.map +1 -1
  110. package/dist/wire/errors.js +36 -0
  111. package/dist/wire/errors.js.map +1 -1
  112. package/dist/wire/grants.d.ts +4 -4
  113. package/dist/wire/grants.js +3 -3
  114. package/dist/wire/handshake-byte-bounds.d.ts +69 -0
  115. package/dist/wire/handshake-byte-bounds.d.ts.map +1 -0
  116. package/dist/wire/handshake-byte-bounds.js +176 -0
  117. package/dist/wire/handshake-byte-bounds.js.map +1 -0
  118. package/dist/wire/handshake.d.ts +59 -7
  119. package/dist/wire/handshake.d.ts.map +1 -1
  120. package/dist/wire/handshake.js +132 -10
  121. package/dist/wire/handshake.js.map +1 -1
  122. package/dist/wire/index.d.ts +18 -7
  123. package/dist/wire/index.d.ts.map +1 -1
  124. package/dist/wire/index.js +35 -6
  125. package/dist/wire/index.js.map +1 -1
  126. package/dist/wire/lifecycle-byte-bounds.d.ts +40 -0
  127. package/dist/wire/lifecycle-byte-bounds.d.ts.map +1 -0
  128. package/dist/wire/lifecycle-byte-bounds.js +149 -0
  129. package/dist/wire/lifecycle-byte-bounds.js.map +1 -0
  130. package/dist/wire/messaging-byte-bounds.d.ts +62 -0
  131. package/dist/wire/messaging-byte-bounds.d.ts.map +1 -0
  132. package/dist/wire/messaging-byte-bounds.js +581 -0
  133. package/dist/wire/messaging-byte-bounds.js.map +1 -0
  134. package/dist/wire/registry.d.ts +192 -35
  135. package/dist/wire/registry.d.ts.map +1 -1
  136. package/dist/wire/registry.js +57 -79
  137. package/dist/wire/registry.js.map +1 -1
  138. package/dist/wire/row-shapes.d.ts +98 -81
  139. package/dist/wire/row-shapes.d.ts.map +1 -1
  140. package/dist/wire/row-shapes.js +31 -4
  141. package/dist/wire/row-shapes.js.map +1 -1
  142. package/fixtures/behavior/messaging/adversarial-invariants.json +92 -2
  143. package/fixtures/manifest/invalid/duplicate-signal-type.json +35 -0
  144. package/fixtures/manifest/invalid/icon-package-escape.json +22 -0
  145. package/fixtures/manifest/valid/localized-product-metadata.json +27 -0
  146. package/fixtures/messaging/valid/subscription-delivery.json +1 -1
  147. package/fixtures/signals/invalid/dynamic-schema-url.json +10 -0
  148. package/fixtures/signals/invalid/forbidden-raw-privacy.json +10 -0
  149. package/fixtures/signals/valid/remote-service-declaration.json +10 -0
  150. package/package.json +18 -5
  151. package/src/schemas/behavior-fixture.schema.json +903 -116
  152. package/src/schemas/catalog.schema.json +91 -0
  153. package/src/schemas/companion-bridge.schema.json +2256 -0
  154. package/src/schemas/docx-materialization.schema.json +302 -0
  155. package/src/schemas/manifest.schema.json +2223 -89
  156. package/src/schemas/messaging.schema.json +692 -40
  157. package/src/schemas/physical-limb.schema.json +319 -0
  158. package/src/schemas/plugin-metadata.schema.json +62 -0
  159. package/src/schemas/signal.schema.json +119 -0
@@ -0,0 +1,319 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://clowder-ai.dev/schemas/physical-limb/v0.1",
4
+ "title": "Clowder AI Physical Limb Contribution (v0.1)",
5
+ "description": "Typed, bounded contract for a Host-governed physical limb contribution. Raw sensor media is intentionally absent.",
6
+ "x-clowder-physical-limb-grants": [
7
+ "limb.action.motion",
8
+ "limb.action.display",
9
+ "limb.action.light",
10
+ "limb.action.speaker",
11
+ "limb.observe.touch",
12
+ "limb.sensor.microphone",
13
+ "limb.sensor.camera"
14
+ ],
15
+ "x-clowder-physical-limb-bounds": {
16
+ "maxIdentifierLength": 128,
17
+ "maxTranscriptCodePoints": 4096,
18
+ "maxTouchDurationMs": 10000,
19
+ "minListenDurationMs": 100,
20
+ "maxListenDurationMs": 30000,
21
+ "maxActionTimeoutMs": 30000
22
+ },
23
+ "$defs": {
24
+ "PhysicalLimbIdentifier": {
25
+ "type": "string",
26
+ "minLength": 1,
27
+ "maxLength": 128
28
+ },
29
+ "PhysicalLimbGrant": {
30
+ "type": "string",
31
+ "enum": [
32
+ "limb.action.motion",
33
+ "limb.action.display",
34
+ "limb.action.light",
35
+ "limb.action.speaker",
36
+ "limb.observe.touch",
37
+ "limb.sensor.microphone",
38
+ "limb.sensor.camera"
39
+ ]
40
+ },
41
+ "PhysicalLimbSafePose": {
42
+ "type": "object",
43
+ "properties": {
44
+ "yawDeg": { "type": "number", "minimum": -90, "maximum": 90 },
45
+ "pitchDeg": { "type": "number", "minimum": -90, "maximum": 90 },
46
+ "timeoutMs": { "type": "integer", "minimum": 100, "maximum": 30000 }
47
+ },
48
+ "required": ["yawDeg", "pitchDeg", "timeoutMs"],
49
+ "additionalProperties": false
50
+ },
51
+ "PhysicalLimbContribution": {
52
+ "type": "object",
53
+ "properties": {
54
+ "contributionId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
55
+ "nodeType": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
56
+ "displayName": { "type": "string", "minLength": 1, "maxLength": 128 },
57
+ "grants": {
58
+ "type": "array",
59
+ "items": { "$ref": "#/$defs/PhysicalLimbGrant" },
60
+ "minItems": 1,
61
+ "maxItems": 7,
62
+ "uniqueItems": true
63
+ },
64
+ "safePose": { "$ref": "#/$defs/PhysicalLimbSafePose" }
65
+ },
66
+ "required": ["contributionId", "nodeType", "displayName", "grants", "safePose"],
67
+ "additionalProperties": false
68
+ },
69
+ "PhysicalLimbExpressionSource": {
70
+ "type": "object",
71
+ "properties": {
72
+ "kind": { "type": "string", "enum": ["cat_state", "play", "degraded"] },
73
+ "ref": { "$ref": "#/$defs/PhysicalLimbIdentifier" }
74
+ },
75
+ "required": ["kind", "ref"],
76
+ "additionalProperties": false
77
+ },
78
+ "PhysicalLimbTouchPayload": {
79
+ "type": "object",
80
+ "properties": {
81
+ "gesture": { "type": "string", "enum": ["tap", "stroke"] },
82
+ "durationMs": { "type": "integer", "minimum": 0, "maximum": 10000 },
83
+ "confidence": { "type": "number", "minimum": 0, "maximum": 1 }
84
+ },
85
+ "required": ["gesture", "durationMs", "confidence"],
86
+ "additionalProperties": false
87
+ },
88
+ "PhysicalLimbTranscriptPayload": {
89
+ "type": "object",
90
+ "properties": {
91
+ "interactionId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
92
+ "text": { "type": "string", "minLength": 1, "maxLength": 4096 },
93
+ "language": { "type": "string", "minLength": 1, "maxLength": 32 },
94
+ "captureDurationMs": { "type": "integer", "minimum": 100, "maximum": 30000 }
95
+ },
96
+ "required": ["interactionId", "text", "captureDurationMs"],
97
+ "additionalProperties": false
98
+ },
99
+ "PhysicalLimbTouchObservation": {
100
+ "type": "object",
101
+ "properties": {
102
+ "v": { "const": 1 },
103
+ "observationId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
104
+ "nodeId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
105
+ "occurredAt": { "type": "string", "format": "date-time" },
106
+ "sessionId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
107
+ "kind": { "const": "touch" },
108
+ "payload": { "$ref": "#/$defs/PhysicalLimbTouchPayload" }
109
+ },
110
+ "required": ["v", "observationId", "nodeId", "occurredAt", "sessionId", "kind", "payload"],
111
+ "additionalProperties": false
112
+ },
113
+ "PhysicalLimbTranscriptObservation": {
114
+ "type": "object",
115
+ "properties": {
116
+ "v": { "const": 1 },
117
+ "observationId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
118
+ "nodeId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
119
+ "occurredAt": { "type": "string", "format": "date-time" },
120
+ "sessionId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
121
+ "kind": { "const": "transcript" },
122
+ "payload": { "$ref": "#/$defs/PhysicalLimbTranscriptPayload" }
123
+ },
124
+ "required": ["v", "observationId", "nodeId", "occurredAt", "sessionId", "kind", "payload"],
125
+ "additionalProperties": false
126
+ },
127
+ "PhysicalLimbObservation": {
128
+ "oneOf": [
129
+ { "$ref": "#/$defs/PhysicalLimbTouchObservation" },
130
+ { "$ref": "#/$defs/PhysicalLimbTranscriptObservation" }
131
+ ]
132
+ },
133
+ "PhysicalLimbMotionPayload": {
134
+ "type": "object",
135
+ "properties": {
136
+ "yawDeg": { "type": "number", "minimum": -90, "maximum": 90 },
137
+ "pitchDeg": { "type": "number", "minimum": -90, "maximum": 90 },
138
+ "speedDps": { "type": "number", "exclusiveMinimum": 0, "maximum": 240 },
139
+ "accelerationDps2": { "type": "number", "exclusiveMinimum": 0, "maximum": 720 }
140
+ },
141
+ "required": ["yawDeg", "pitchDeg", "speedDps", "accelerationDps2"],
142
+ "additionalProperties": false
143
+ },
144
+ "PhysicalLimbDisplayPayload": {
145
+ "type": "object",
146
+ "properties": {
147
+ "expression": { "type": "string", "minLength": 1, "maxLength": 128 },
148
+ "expressionSource": { "$ref": "#/$defs/PhysicalLimbExpressionSource" }
149
+ },
150
+ "required": ["expression", "expressionSource"],
151
+ "additionalProperties": false
152
+ },
153
+ "PhysicalLimbRgb": {
154
+ "type": "array",
155
+ "items": { "type": "integer", "minimum": 0, "maximum": 255 },
156
+ "minItems": 3,
157
+ "maxItems": 3
158
+ },
159
+ "PhysicalLimbLightPayload": {
160
+ "type": "object",
161
+ "properties": {
162
+ "colors": {
163
+ "type": "array",
164
+ "items": { "$ref": "#/$defs/PhysicalLimbRgb" },
165
+ "minItems": 1,
166
+ "maxItems": 256
167
+ }
168
+ },
169
+ "required": ["colors"],
170
+ "additionalProperties": false
171
+ },
172
+ "PhysicalLimbSpeakerPayload": {
173
+ "type": "object",
174
+ "properties": {
175
+ "text": { "type": "string", "minLength": 1, "maxLength": 4096 },
176
+ "voiceProfileRef": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
177
+ "volumePercent": { "type": "integer", "minimum": 0, "maximum": 100 }
178
+ },
179
+ "required": ["text", "voiceProfileRef", "volumePercent"],
180
+ "additionalProperties": false
181
+ },
182
+ "PhysicalLimbMotionAction": {
183
+ "type": "object",
184
+ "properties": {
185
+ "v": { "const": 1 },
186
+ "actionId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
187
+ "nodeId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
188
+ "deadlineUnixMs": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
189
+ "timeoutMs": { "type": "integer", "minimum": 1, "maximum": 30000 },
190
+ "cancelToken": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
191
+ "kind": { "const": "motion" },
192
+ "payload": { "$ref": "#/$defs/PhysicalLimbMotionPayload" }
193
+ },
194
+ "required": ["v", "actionId", "nodeId", "deadlineUnixMs", "timeoutMs", "cancelToken", "kind", "payload"],
195
+ "additionalProperties": false
196
+ },
197
+ "PhysicalLimbDisplayAction": {
198
+ "type": "object",
199
+ "properties": {
200
+ "v": { "const": 1 },
201
+ "actionId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
202
+ "nodeId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
203
+ "deadlineUnixMs": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
204
+ "timeoutMs": { "type": "integer", "minimum": 1, "maximum": 30000 },
205
+ "cancelToken": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
206
+ "kind": { "const": "display" },
207
+ "payload": { "$ref": "#/$defs/PhysicalLimbDisplayPayload" }
208
+ },
209
+ "required": ["v", "actionId", "nodeId", "deadlineUnixMs", "timeoutMs", "cancelToken", "kind", "payload"],
210
+ "additionalProperties": false
211
+ },
212
+ "PhysicalLimbLightAction": {
213
+ "type": "object",
214
+ "properties": {
215
+ "v": { "const": 1 },
216
+ "actionId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
217
+ "nodeId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
218
+ "deadlineUnixMs": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
219
+ "timeoutMs": { "type": "integer", "minimum": 1, "maximum": 30000 },
220
+ "cancelToken": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
221
+ "kind": { "const": "light" },
222
+ "payload": { "$ref": "#/$defs/PhysicalLimbLightPayload" }
223
+ },
224
+ "required": ["v", "actionId", "nodeId", "deadlineUnixMs", "timeoutMs", "cancelToken", "kind", "payload"],
225
+ "additionalProperties": false
226
+ },
227
+ "PhysicalLimbSpeakerAction": {
228
+ "type": "object",
229
+ "properties": {
230
+ "v": { "const": 1 },
231
+ "actionId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
232
+ "nodeId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
233
+ "deadlineUnixMs": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
234
+ "timeoutMs": { "type": "integer", "minimum": 1, "maximum": 30000 },
235
+ "cancelToken": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
236
+ "kind": { "const": "speaker" },
237
+ "payload": { "$ref": "#/$defs/PhysicalLimbSpeakerPayload" }
238
+ },
239
+ "required": ["v", "actionId", "nodeId", "deadlineUnixMs", "timeoutMs", "cancelToken", "kind", "payload"],
240
+ "additionalProperties": false
241
+ },
242
+ "PhysicalLimbAction": {
243
+ "oneOf": [
244
+ { "$ref": "#/$defs/PhysicalLimbMotionAction" },
245
+ { "$ref": "#/$defs/PhysicalLimbDisplayAction" },
246
+ { "$ref": "#/$defs/PhysicalLimbLightAction" },
247
+ { "$ref": "#/$defs/PhysicalLimbSpeakerAction" }
248
+ ]
249
+ },
250
+ "PhysicalLimbCancel": {
251
+ "type": "object",
252
+ "properties": {
253
+ "v": { "const": 1 },
254
+ "nodeId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
255
+ "actionId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
256
+ "cancelToken": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
257
+ "reason": { "type": "string", "enum": ["user", "timeout", "lease_lost", "host_lost", "superseded"] }
258
+ },
259
+ "required": ["v", "nodeId", "actionId", "cancelToken", "reason"],
260
+ "additionalProperties": false
261
+ },
262
+ "PhysicalLimbActionResult": {
263
+ "type": "object",
264
+ "properties": {
265
+ "v": { "const": 1 },
266
+ "actionId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
267
+ "nodeId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
268
+ "outcome": { "type": "string", "enum": ["succeeded", "refused", "failed", "canceled"] },
269
+ "reason": { "type": "string", "maxLength": 512 },
270
+ "observedAt": { "type": "string", "format": "date-time" }
271
+ },
272
+ "required": ["v", "actionId", "nodeId", "outcome", "observedAt"],
273
+ "additionalProperties": false
274
+ },
275
+ "PhysicalLimbReadinessReason": {
276
+ "type": "string",
277
+ "enum": [
278
+ "gateway_disconnected",
279
+ "device_disconnected",
280
+ "firmware_incompatible",
281
+ "sensor_unavailable",
282
+ "speech_dependency_missing",
283
+ "skin_unavailable",
284
+ "grant_revoked",
285
+ "host_unavailable"
286
+ ]
287
+ },
288
+ "PhysicalLimbReadyReadiness": {
289
+ "type": "object",
290
+ "properties": {
291
+ "v": { "const": 1 },
292
+ "nodeId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
293
+ "status": { "const": "ready" },
294
+ "observedAt": { "type": "string", "format": "date-time" }
295
+ },
296
+ "required": ["v", "nodeId", "status", "observedAt"],
297
+ "additionalProperties": false
298
+ },
299
+ "PhysicalLimbUnavailableReadiness": {
300
+ "type": "object",
301
+ "properties": {
302
+ "v": { "const": 1 },
303
+ "nodeId": { "$ref": "#/$defs/PhysicalLimbIdentifier" },
304
+ "status": { "type": "string", "enum": ["degraded", "offline"] },
305
+ "reason": { "$ref": "#/$defs/PhysicalLimbReadinessReason" },
306
+ "observedAt": { "type": "string", "format": "date-time" }
307
+ },
308
+ "required": ["v", "nodeId", "status", "reason", "observedAt"],
309
+ "additionalProperties": false
310
+ },
311
+ "PhysicalLimbReadiness": {
312
+ "oneOf": [
313
+ { "$ref": "#/$defs/PhysicalLimbReadyReadiness" },
314
+ { "$ref": "#/$defs/PhysicalLimbUnavailableReadiness" }
315
+ ]
316
+ }
317
+ },
318
+ "$ref": "#/$defs/PhysicalLimbContribution"
319
+ }
@@ -0,0 +1,62 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://clowder-ai.dev/schemas/plugin-metadata/v1",
4
+ "title": "Clowder AI Plugin Product Metadata (v1)",
5
+ "description": "Manifest-owned static product metadata projected into the repository catalog for Agent, Console, and Marketplace discovery.",
6
+ "$defs": {
7
+ "LocalizedDescriptionObject": {
8
+ "type": "object",
9
+ "properties": {
10
+ "default": { "type": "string", "minLength": 1, "maxLength": 4096 },
11
+ "translations": {
12
+ "type": "object",
13
+ "propertyNames": {
14
+ "pattern": "^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$"
15
+ },
16
+ "additionalProperties": { "type": "string", "minLength": 1, "maxLength": 4096 },
17
+ "minProperties": 1,
18
+ "maxProperties": 32
19
+ }
20
+ },
21
+ "required": ["default", "translations"],
22
+ "additionalProperties": false
23
+ },
24
+ "LocalizedDescription": {
25
+ "oneOf": [
26
+ { "type": "string", "minLength": 1, "maxLength": 4096 },
27
+ { "$ref": "#/$defs/LocalizedDescriptionObject" }
28
+ ]
29
+ },
30
+ "PackageAssetPath": {
31
+ "type": "string",
32
+ "minLength": 1,
33
+ "maxLength": 256,
34
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*(/[A-Za-z0-9][A-Za-z0-9._-]*)*$"
35
+ },
36
+ "PackageIcon": {
37
+ "type": "object",
38
+ "properties": {
39
+ "type": { "type": "string", "enum": ["svg", "png"] },
40
+ "src": { "$ref": "#/$defs/PackageAssetPath" }
41
+ },
42
+ "required": ["type", "src"],
43
+ "additionalProperties": false,
44
+ "allOf": [
45
+ {
46
+ "if": { "properties": { "type": { "const": "svg" } }, "required": ["type"] },
47
+ "then": { "properties": { "src": { "pattern": "\\.svg$" } } }
48
+ },
49
+ {
50
+ "if": { "properties": { "type": { "const": "png" } }, "required": ["type"] },
51
+ "then": { "properties": { "src": { "pattern": "\\.png$" } } }
52
+ }
53
+ ]
54
+ },
55
+ "PluginIcon": {
56
+ "oneOf": [
57
+ { "const": "github" },
58
+ { "$ref": "#/$defs/PackageIcon" }
59
+ ]
60
+ }
61
+ }
62
+ }
@@ -0,0 +1,119 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://clowder-ai.dev/schemas/signals/v0.2",
4
+ "title": "Clowder AI Signal Declarations",
5
+ "description": "Manifest-only signal declarations and contribution metadata. Runtime publication is not part of this schema.",
6
+ "x-clowder-forbidden-privacy-classes": [
7
+ "av-raw",
8
+ "input-raw"
9
+ ],
10
+ "x-clowder-forbidden-source-classes": [
11
+ "av-capture",
12
+ "input-hardware"
13
+ ],
14
+ "$defs": {
15
+ "SignalType": {
16
+ "type": "string",
17
+ "minLength": 3,
18
+ "maxLength": 128,
19
+ "pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_-]*)+$"
20
+ },
21
+ "SignalSchemaRef": {
22
+ "type": "string",
23
+ "description": "Package-local content schema reference declared in manifest metadata.",
24
+ "minLength": 21,
25
+ "maxLength": 256,
26
+ "pattern": "^schemas/([A-Za-z0-9][A-Za-z0-9._-]*/)*[A-Za-z0-9][A-Za-z0-9._-]*\\.schema\\.json$"
27
+ },
28
+ "SignalEpistemicStatus": {
29
+ "type": "string",
30
+ "enum": [
31
+ "observation",
32
+ "inference"
33
+ ]
34
+ },
35
+ "SignalPrivacyClass": {
36
+ "type": "string",
37
+ "enum": [
38
+ "behavioral",
39
+ "content-adjacent",
40
+ "content",
41
+ "av-raw",
42
+ "input-raw"
43
+ ]
44
+ },
45
+ "AdmissibleSignalPrivacyClass": {
46
+ "type": "string",
47
+ "enum": [
48
+ "behavioral",
49
+ "content-adjacent",
50
+ "content"
51
+ ]
52
+ },
53
+ "SignalSourceClass": {
54
+ "type": "string",
55
+ "enum": [
56
+ "os-metadata",
57
+ "accessibility-api",
58
+ "remote-service",
59
+ "av-capture",
60
+ "input-hardware"
61
+ ]
62
+ },
63
+ "AdmissibleSignalSourceClass": {
64
+ "type": "string",
65
+ "enum": [
66
+ "os-metadata",
67
+ "accessibility-api",
68
+ "remote-service"
69
+ ]
70
+ },
71
+ "SignalDeclaration": {
72
+ "type": "object",
73
+ "properties": {
74
+ "type": {
75
+ "$ref": "#/$defs/SignalType"
76
+ },
77
+ "schemaRef": {
78
+ "$ref": "#/$defs/SignalSchemaRef"
79
+ },
80
+ "epistemicStatus": {
81
+ "$ref": "#/$defs/SignalEpistemicStatus"
82
+ },
83
+ "privacyClass": {
84
+ "$ref": "#/$defs/AdmissibleSignalPrivacyClass"
85
+ },
86
+ "sourceClass": {
87
+ "$ref": "#/$defs/AdmissibleSignalSourceClass"
88
+ }
89
+ },
90
+ "required": [
91
+ "type",
92
+ "schemaRef",
93
+ "epistemicStatus",
94
+ "privacyClass",
95
+ "sourceClass"
96
+ ],
97
+ "additionalProperties": false
98
+ },
99
+ "SignalContribution": {
100
+ "type": "object",
101
+ "properties": {
102
+ "provides": {
103
+ "type": "array",
104
+ "items": {
105
+ "$ref": "#/$defs/SignalDeclaration"
106
+ },
107
+ "minItems": 1,
108
+ "maxItems": 64,
109
+ "uniqueItems": true
110
+ }
111
+ },
112
+ "required": [
113
+ "provides"
114
+ ],
115
+ "additionalProperties": false
116
+ }
117
+ },
118
+ "$ref": "#/$defs/SignalContribution"
119
+ }