@hraness/message-like-me 0.8.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.
Files changed (56) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/LICENSE +21 -0
  3. package/README.md +698 -0
  4. package/SECURITY.md +318 -0
  5. package/dist/agentic-messaging-v1.d.ts +179 -0
  6. package/dist/agentic-messaging-v1.js +52 -0
  7. package/dist/canonical-json.d.ts +3 -0
  8. package/dist/cli-bs3db5jr.js +643 -0
  9. package/dist/cli-d7qv38ab.js +485 -0
  10. package/dist/cli-kw20gkk3.js +5 -0
  11. package/dist/cli-qqafdvz9.js +5 -0
  12. package/dist/cli-ry4128kz.js +584 -0
  13. package/dist/cli-ththzwja.js +20 -0
  14. package/dist/cli-x1qncxm7.js +1078 -0
  15. package/dist/cli.js +9436 -0
  16. package/dist/ensoul-source-v1.d.ts +121 -0
  17. package/dist/ensoul-source-v1.js +24 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.js +47 -0
  20. package/dist/message-bundle-v1-identity.d.ts +2 -0
  21. package/dist/message-bundle-v1.d.ts +205 -0
  22. package/dist/message-bundle-v1.js +37 -0
  23. package/dist/message-bundle-v2-identity.d.ts +2 -0
  24. package/dist/message-bundle-v2.d.ts +215 -0
  25. package/dist/message-bundle-v2.js +43 -0
  26. package/dist/metrics.d.ts +41 -0
  27. package/dist/types.d.ts +568 -0
  28. package/docs/local-message-bundle-v1.md +245 -0
  29. package/docs/local-message-bundle-v2.md +167 -0
  30. package/docs/methodology.md +322 -0
  31. package/docs/research.md +164 -0
  32. package/package.json +82 -0
  33. package/schema/ensoul-messages-source-v1.schema.json +248 -0
  34. package/schema/local-message-bundle-v1.schema.json +449 -0
  35. package/schema/local-message-bundle-v2.schema.json +462 -0
  36. package/schema/style-profile-v1.schema.json +223 -0
  37. package/schema/style-profile-v2.schema.json +202 -0
  38. package/skills/ensoul/LICENSE +23 -0
  39. package/skills/ensoul/NOTICE.md +7 -0
  40. package/skills/ensoul/SKILL.md +226 -0
  41. package/skills/ensoul/VENDORED_FROM.md +7 -0
  42. package/skills/ensoul/agents/openai.yaml +4 -0
  43. package/skills/ensoul/references/ensoul-source-packet-v1.schema.json +187 -0
  44. package/skills/ensoul/references/evidence-method.md +148 -0
  45. package/skills/ensoul/references/output-blueprint.md +143 -0
  46. package/skills/ensoul/references/source-packets.md +139 -0
  47. package/skills/ensoul/scripts/prepare_x_archive.py +467 -0
  48. package/skills/ensoul/scripts/validate_source_packet.py +477 -0
  49. package/skills/message-like-me/SKILL.md +229 -0
  50. package/skills/message-like-me/agents/openai.yaml +4 -0
  51. package/skills/message-like-me/references/analysis.md +159 -0
  52. package/skills/message-like-me/references/drafting.md +86 -0
  53. package/skills/message-like-me/references/ensoul.md +94 -0
  54. package/skills/message-like-me/references/evaluation.md +81 -0
  55. package/skills/message-like-me/references/privacy.md +106 -0
  56. package/skills/message-like-me/references/profile-schema.md +148 -0
@@ -0,0 +1,462 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://messagelikeme.com/schema/local-message-bundle-v2.schema.json",
4
+ "title": "Message Like Me local message bundle v2 JSON objects",
5
+ "description": "Validates manifest.json or one NDJSON record. Runtime validation additionally enforces canonical UTF-8 bytes, filesystem safety, byte bounds, digests, account realms, identity joins, and graph laws.",
6
+ "oneOf": [
7
+ { "$ref": "#/$defs/manifest" },
8
+ { "$ref": "#/$defs/account" },
9
+ { "$ref": "#/$defs/participant" },
10
+ { "$ref": "#/$defs/conversation" },
11
+ { "$ref": "#/$defs/message" },
12
+ { "$ref": "#/$defs/reaction" },
13
+ { "$ref": "#/$defs/tombstone" }
14
+ ],
15
+ "$defs": {
16
+ "identifier": {
17
+ "type": "string",
18
+ "minLength": 1,
19
+ "maxLength": 1024,
20
+ "pattern": "^[^\\u0000-\\u001F\\u007F]+$",
21
+ "description": "Runtime bound is 1,024 UTF-8 bytes."
22
+ },
23
+ "shortText": {
24
+ "type": "string",
25
+ "maxLength": 8192,
26
+ "pattern": "^[^\\u0000]*$",
27
+ "description": "Runtime bound is 8 KiB UTF-8."
28
+ },
29
+ "mimeType": {
30
+ "type": "string",
31
+ "maxLength": 256,
32
+ "pattern": "^[^\\u0000]*$",
33
+ "description": "Runtime bound is 256 UTF-8 bytes."
34
+ },
35
+ "body": {
36
+ "type": "string",
37
+ "maxLength": 1048576,
38
+ "pattern": "^[^\\u0000]*$",
39
+ "description": "Runtime bound is 1 MiB UTF-8."
40
+ },
41
+ "token": {
42
+ "type": "string",
43
+ "maxLength": 128,
44
+ "pattern": "^[a-z0-9](?:[a-z0-9._+\\-]*[a-z0-9])?$"
45
+ },
46
+ "network": {
47
+ "const": "whatsapp",
48
+ "description": "The native Wacli bundle network is exactly WhatsApp."
49
+ },
50
+ "version": {
51
+ "type": "string",
52
+ "maxLength": 128,
53
+ "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9._+\\-]*[A-Za-z0-9])?$"
54
+ },
55
+ "timestamp": {
56
+ "type": "string",
57
+ "format": "date-time",
58
+ "maxLength": 64,
59
+ "description": "Runtime requires exact canonical Date#toISOString() millisecond UTC text."
60
+ },
61
+ "digest": {
62
+ "type": "string",
63
+ "pattern": "^[a-f0-9]{64}$"
64
+ },
65
+ "nullableIdentifier": {
66
+ "oneOf": [
67
+ { "type": "null" },
68
+ { "$ref": "#/$defs/identifier" }
69
+ ]
70
+ },
71
+ "nullableShortText": {
72
+ "oneOf": [
73
+ { "type": "null" },
74
+ { "$ref": "#/$defs/shortText" }
75
+ ]
76
+ },
77
+ "nullableMimeType": {
78
+ "oneOf": [
79
+ { "type": "null" },
80
+ { "$ref": "#/$defs/mimeType" }
81
+ ]
82
+ },
83
+ "nullableTimestamp": {
84
+ "oneOf": [
85
+ { "type": "null" },
86
+ { "$ref": "#/$defs/timestamp" }
87
+ ]
88
+ },
89
+ "provenance": {
90
+ "type": "object",
91
+ "additionalProperties": false,
92
+ "required": [
93
+ "providerId",
94
+ "providerRevision",
95
+ "observedAt",
96
+ "connectedAccountProviderId"
97
+ ],
98
+ "properties": {
99
+ "providerId": { "$ref": "#/$defs/identifier" },
100
+ "providerRevision": { "$ref": "#/$defs/nullableIdentifier" },
101
+ "observedAt": { "$ref": "#/$defs/timestamp" },
102
+ "connectedAccountProviderId": { "$ref": "#/$defs/identifier" }
103
+ }
104
+ },
105
+ "common": {
106
+ "type": "object",
107
+ "required": ["schemaVersion", "kind", "id", "accountId", "network", "provenance"],
108
+ "properties": {
109
+ "schemaVersion": { "const": 2 },
110
+ "kind": {
111
+ "enum": ["account", "participant", "conversation", "message", "reaction", "tombstone"]
112
+ },
113
+ "id": { "$ref": "#/$defs/identifier" },
114
+ "accountId": { "$ref": "#/$defs/identifier" },
115
+ "network": { "$ref": "#/$defs/network" },
116
+ "provenance": { "$ref": "#/$defs/provenance" }
117
+ }
118
+ },
119
+ "account": {
120
+ "allOf": [{ "$ref": "#/$defs/common" }],
121
+ "type": "object",
122
+ "unevaluatedProperties": false,
123
+ "required": ["displayName", "handle", "selfParticipantId"],
124
+ "properties": {
125
+ "kind": { "const": "account" },
126
+ "displayName": { "$ref": "#/$defs/nullableShortText" },
127
+ "handle": { "$ref": "#/$defs/nullableShortText" },
128
+ "selfParticipantId": { "$ref": "#/$defs/identifier" }
129
+ }
130
+ },
131
+ "participant": {
132
+ "allOf": [{ "$ref": "#/$defs/common" }],
133
+ "type": "object",
134
+ "unevaluatedProperties": false,
135
+ "required": ["displayName", "handle", "isSelf"],
136
+ "properties": {
137
+ "kind": { "const": "participant" },
138
+ "displayName": { "$ref": "#/$defs/nullableShortText" },
139
+ "handle": { "$ref": "#/$defs/nullableShortText" },
140
+ "isSelf": { "type": "boolean" }
141
+ }
142
+ },
143
+ "conversation": {
144
+ "allOf": [
145
+ { "$ref": "#/$defs/common" },
146
+ {
147
+ "if": {
148
+ "required": ["type"],
149
+ "properties": { "type": { "const": "direct" } }
150
+ },
151
+ "then": {
152
+ "properties": {
153
+ "participantIds": { "minItems": 2, "maxItems": 2 },
154
+ "participantsComplete": { "const": true }
155
+ }
156
+ }
157
+ }
158
+ ],
159
+ "type": "object",
160
+ "unevaluatedProperties": false,
161
+ "required": [
162
+ "type",
163
+ "title",
164
+ "participantIds",
165
+ "participantsComplete",
166
+ "startedAt",
167
+ "lastMessageAt"
168
+ ],
169
+ "properties": {
170
+ "kind": { "const": "conversation" },
171
+ "type": { "enum": ["direct", "group"] },
172
+ "title": { "$ref": "#/$defs/nullableShortText" },
173
+ "participantIds": {
174
+ "type": "array",
175
+ "maxItems": 10000,
176
+ "uniqueItems": true,
177
+ "items": { "$ref": "#/$defs/identifier" }
178
+ },
179
+ "participantsComplete": { "type": ["boolean", "null"] },
180
+ "startedAt": { "$ref": "#/$defs/nullableTimestamp" },
181
+ "lastMessageAt": { "$ref": "#/$defs/nullableTimestamp" }
182
+ }
183
+ },
184
+ "attachment": {
185
+ "type": "object",
186
+ "additionalProperties": false,
187
+ "required": ["kind", "mimeType", "name", "sizeBytes"],
188
+ "properties": {
189
+ "kind": { "enum": ["audio", "document", "image", "link", "sticker", "video", "unknown"] },
190
+ "mimeType": { "$ref": "#/$defs/nullableMimeType" },
191
+ "name": { "$ref": "#/$defs/nullableShortText" },
192
+ "sizeBytes": {
193
+ "oneOf": [
194
+ { "type": "null" },
195
+ { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
196
+ ]
197
+ }
198
+ }
199
+ },
200
+ "reply": {
201
+ "type": "object",
202
+ "additionalProperties": false,
203
+ "required": ["messageId", "providerId"],
204
+ "properties": {
205
+ "messageId": { "$ref": "#/$defs/nullableIdentifier" },
206
+ "providerId": { "$ref": "#/$defs/identifier" }
207
+ }
208
+ },
209
+ "editInPlace": {
210
+ "type": "object",
211
+ "additionalProperties": false,
212
+ "required": ["kind", "editedAt", "providerRevision"],
213
+ "properties": {
214
+ "kind": { "const": "in-place" },
215
+ "editedAt": { "$ref": "#/$defs/timestamp" },
216
+ "providerRevision": { "$ref": "#/$defs/identifier" }
217
+ }
218
+ },
219
+ "editReplacement": {
220
+ "type": "object",
221
+ "additionalProperties": false,
222
+ "required": ["kind", "replacesMessageId", "replacesProviderId", "editedAt", "providerRevision"],
223
+ "properties": {
224
+ "kind": { "const": "replacement" },
225
+ "replacesMessageId": { "$ref": "#/$defs/nullableIdentifier" },
226
+ "replacesProviderId": { "$ref": "#/$defs/identifier" },
227
+ "editedAt": { "$ref": "#/$defs/timestamp" },
228
+ "providerRevision": { "$ref": "#/$defs/identifier" }
229
+ }
230
+ },
231
+ "deletion": {
232
+ "type": "object",
233
+ "additionalProperties": false,
234
+ "required": ["state", "observedAt", "providerRevision"],
235
+ "properties": {
236
+ "state": { "enum": ["revoked", "deleted-for-me", "revoked-and-deleted-for-me"] },
237
+ "observedAt": { "$ref": "#/$defs/timestamp" },
238
+ "providerRevision": { "$ref": "#/$defs/nullableIdentifier" }
239
+ }
240
+ },
241
+ "message": {
242
+ "allOf": [{ "$ref": "#/$defs/common" }],
243
+ "type": "object",
244
+ "unevaluatedProperties": false,
245
+ "required": [
246
+ "conversationId",
247
+ "senderParticipantId",
248
+ "direction",
249
+ "sentAt",
250
+ "sortKey",
251
+ "body",
252
+ "bodyTruncated",
253
+ "replyTo",
254
+ "edit",
255
+ "deletion",
256
+ "attachments"
257
+ ],
258
+ "properties": {
259
+ "kind": { "const": "message" },
260
+ "conversationId": { "$ref": "#/$defs/identifier" },
261
+ "senderParticipantId": { "$ref": "#/$defs/nullableIdentifier" },
262
+ "direction": { "enum": ["incoming", "outgoing", "unknown"] },
263
+ "sentAt": { "$ref": "#/$defs/timestamp" },
264
+ "sortKey": { "$ref": "#/$defs/identifier" },
265
+ "body": {
266
+ "oneOf": [
267
+ { "type": "null" },
268
+ { "$ref": "#/$defs/body" }
269
+ ]
270
+ },
271
+ "bodyTruncated": { "type": ["boolean", "null"] },
272
+ "replyTo": {
273
+ "oneOf": [
274
+ { "type": "null" },
275
+ { "$ref": "#/$defs/reply" }
276
+ ]
277
+ },
278
+ "edit": {
279
+ "oneOf": [
280
+ { "type": "null" },
281
+ { "$ref": "#/$defs/editInPlace" },
282
+ { "$ref": "#/$defs/editReplacement" }
283
+ ]
284
+ },
285
+ "deletion": {
286
+ "oneOf": [
287
+ { "type": "null" },
288
+ { "$ref": "#/$defs/deletion" }
289
+ ]
290
+ },
291
+ "attachments": {
292
+ "type": "array",
293
+ "maxItems": 256,
294
+ "items": { "$ref": "#/$defs/attachment" }
295
+ }
296
+ }
297
+ },
298
+ "reaction": {
299
+ "allOf": [{ "$ref": "#/$defs/common" }],
300
+ "type": "object",
301
+ "unevaluatedProperties": false,
302
+ "required": ["messageId", "messageProviderId", "participantId", "body", "reactedAt", "state"],
303
+ "properties": {
304
+ "kind": { "const": "reaction" },
305
+ "messageId": { "$ref": "#/$defs/nullableIdentifier" },
306
+ "messageProviderId": { "$ref": "#/$defs/identifier" },
307
+ "participantId": { "$ref": "#/$defs/nullableIdentifier" },
308
+ "body": { "$ref": "#/$defs/shortText" },
309
+ "reactedAt": { "$ref": "#/$defs/nullableTimestamp" },
310
+ "state": { "enum": ["active", "removed"] }
311
+ }
312
+ },
313
+ "tombstone": {
314
+ "allOf": [{ "$ref": "#/$defs/common" }],
315
+ "type": "object",
316
+ "unevaluatedProperties": false,
317
+ "required": ["entityKind", "entityId", "entityProviderId", "deletedAt", "scope", "providerRevision"],
318
+ "properties": {
319
+ "kind": { "const": "tombstone" },
320
+ "entityKind": { "enum": ["conversation", "message", "reaction"] },
321
+ "entityId": { "$ref": "#/$defs/nullableIdentifier" },
322
+ "entityProviderId": { "$ref": "#/$defs/identifier" },
323
+ "deletedAt": { "$ref": "#/$defs/timestamp" },
324
+ "scope": { "enum": ["remote", "local", "unknown"] },
325
+ "providerRevision": { "$ref": "#/$defs/nullableIdentifier" }
326
+ }
327
+ },
328
+ "artifact": {
329
+ "type": "object",
330
+ "additionalProperties": false,
331
+ "required": ["path", "mediaType", "recordKind", "records", "bytes", "sha256"],
332
+ "properties": {
333
+ "path": { "enum": ["accounts.ndjson", "participants.ndjson", "conversations.ndjson", "messages.ndjson", "reactions.ndjson", "tombstones.ndjson"] },
334
+ "mediaType": { "const": "application/x-ndjson" },
335
+ "recordKind": { "enum": ["account", "participant", "conversation", "message", "reaction", "tombstone"] },
336
+ "records": { "type": "integer", "minimum": 0, "maximum": 500000 },
337
+ "bytes": { "type": "integer", "minimum": 0, "maximum": 536870912 },
338
+ "sha256": { "$ref": "#/$defs/digest" }
339
+ }
340
+ },
341
+ "manifest": {
342
+ "type": "object",
343
+ "additionalProperties": false,
344
+ "required": [
345
+ "schemaVersion",
346
+ "format",
347
+ "source",
348
+ "provider",
349
+ "timestamps",
350
+ "completeness",
351
+ "warnings",
352
+ "privacy",
353
+ "counts",
354
+ "artifacts",
355
+ "integrity"
356
+ ],
357
+ "properties": {
358
+ "schemaVersion": { "const": 2 },
359
+ "format": { "const": "message-like-me.local-message-bundle" },
360
+ "source": {
361
+ "type": "object",
362
+ "additionalProperties": false,
363
+ "required": ["id", "version"],
364
+ "properties": {
365
+ "id": { "const": "wacli-local" },
366
+ "version": {
367
+ "const": "1.0.0",
368
+ "description": "Message Like Me v2 source-transform compatibility coordinate."
369
+ }
370
+ }
371
+ },
372
+ "provider": {
373
+ "type": "object",
374
+ "additionalProperties": false,
375
+ "required": ["id", "version"],
376
+ "properties": {
377
+ "id": { "const": "whatsapp" },
378
+ "version": { "const": "0.15.0" }
379
+ }
380
+ },
381
+ "timestamps": {
382
+ "type": "object",
383
+ "additionalProperties": false,
384
+ "required": ["startedAt", "finishedAt", "createdAt"],
385
+ "properties": {
386
+ "startedAt": { "$ref": "#/$defs/timestamp" },
387
+ "finishedAt": { "$ref": "#/$defs/timestamp" },
388
+ "createdAt": { "$ref": "#/$defs/timestamp" }
389
+ }
390
+ },
391
+ "completeness": {
392
+ "type": "object",
393
+ "additionalProperties": false,
394
+ "required": ["kind", "reason", "observedFrom", "observedThrough"],
395
+ "properties": {
396
+ "kind": { "enum": ["bounded-local", "truncated", "unknown"] },
397
+ "reason": {
398
+ "oneOf": [
399
+ { "type": "null" },
400
+ { "$ref": "#/$defs/token" }
401
+ ]
402
+ },
403
+ "observedFrom": { "$ref": "#/$defs/nullableTimestamp" },
404
+ "observedThrough": { "$ref": "#/$defs/nullableTimestamp" }
405
+ }
406
+ },
407
+ "warnings": {
408
+ "type": "array",
409
+ "maxItems": 128,
410
+ "uniqueItems": true,
411
+ "items": { "$ref": "#/$defs/token" }
412
+ },
413
+ "privacy": {
414
+ "type": "object",
415
+ "additionalProperties": false,
416
+ "required": ["classification", "attachments", "providerUrls", "credentials"],
417
+ "properties": {
418
+ "classification": { "const": "private-local" },
419
+ "attachments": { "const": "metadata-only" },
420
+ "providerUrls": { "const": "excluded" },
421
+ "credentials": { "const": "excluded" }
422
+ }
423
+ },
424
+ "counts": {
425
+ "type": "object",
426
+ "additionalProperties": false,
427
+ "required": ["account", "participant", "conversation", "message", "reaction", "tombstone"],
428
+ "properties": {
429
+ "account": { "type": "integer", "minimum": 1, "maximum": 1 },
430
+ "participant": { "type": "integer", "minimum": 0, "maximum": 500000 },
431
+ "conversation": { "type": "integer", "minimum": 0, "maximum": 500000 },
432
+ "message": { "type": "integer", "minimum": 0, "maximum": 500000 },
433
+ "reaction": { "type": "integer", "minimum": 0, "maximum": 500000 },
434
+ "tombstone": { "type": "integer", "minimum": 0, "maximum": 500000 }
435
+ }
436
+ },
437
+ "artifacts": {
438
+ "type": "array",
439
+ "minItems": 6,
440
+ "maxItems": 6,
441
+ "prefixItems": [
442
+ { "allOf": [{ "$ref": "#/$defs/artifact" }, { "type": "object", "properties": { "path": { "const": "accounts.ndjson" }, "recordKind": { "const": "account" } } }] },
443
+ { "allOf": [{ "$ref": "#/$defs/artifact" }, { "type": "object", "properties": { "path": { "const": "participants.ndjson" }, "recordKind": { "const": "participant" } } }] },
444
+ { "allOf": [{ "$ref": "#/$defs/artifact" }, { "type": "object", "properties": { "path": { "const": "conversations.ndjson" }, "recordKind": { "const": "conversation" } } }] },
445
+ { "allOf": [{ "$ref": "#/$defs/artifact" }, { "type": "object", "properties": { "path": { "const": "messages.ndjson" }, "recordKind": { "const": "message" } } }] },
446
+ { "allOf": [{ "$ref": "#/$defs/artifact" }, { "type": "object", "properties": { "path": { "const": "reactions.ndjson" }, "recordKind": { "const": "reaction" } } }] },
447
+ { "allOf": [{ "$ref": "#/$defs/artifact" }, { "type": "object", "properties": { "path": { "const": "tombstones.ndjson" }, "recordKind": { "const": "tombstone" } } }] }
448
+ ]
449
+ },
450
+ "integrity": {
451
+ "type": "object",
452
+ "additionalProperties": false,
453
+ "required": ["algorithm", "bundleSha256"],
454
+ "properties": {
455
+ "algorithm": { "const": "sha256" },
456
+ "bundleSha256": { "$ref": "#/$defs/digest" }
457
+ }
458
+ }
459
+ }
460
+ }
461
+ }
462
+ }
@@ -0,0 +1,223 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Message Like Me style profile v1",
4
+ "description": "A locally derived, evidence-bound messaging style profile.",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schemaVersion",
9
+ "contactId",
10
+ "corpusRevision",
11
+ "packetSha256",
12
+ "analyzedAt",
13
+ "overview",
14
+ "prose",
15
+ "tempo",
16
+ "replies",
17
+ "contexts",
18
+ "invariants",
19
+ "avoid",
20
+ "confidence"
21
+ ],
22
+ "properties": {
23
+ "schemaVersion": {
24
+ "const": 1
25
+ },
26
+ "contactId": {
27
+ "$ref": "#/$defs/identifier"
28
+ },
29
+ "corpusRevision": {
30
+ "$ref": "#/$defs/identifier"
31
+ },
32
+ "packetSha256": {
33
+ "type": "string",
34
+ "pattern": "^[a-f0-9]{64}$"
35
+ },
36
+ "analyzedAt": {
37
+ "type": "string",
38
+ "format": "date-time",
39
+ "minLength": 1,
40
+ "maxLength": 64
41
+ },
42
+ "overview": {
43
+ "type": "string",
44
+ "minLength": 1,
45
+ "maxLength": 8192
46
+ },
47
+ "prose": {
48
+ "type": "object",
49
+ "additionalProperties": false,
50
+ "required": [
51
+ "register",
52
+ "capitalization",
53
+ "punctuation",
54
+ "vocabulary",
55
+ "warmth",
56
+ "humor",
57
+ "openings",
58
+ "closings",
59
+ "notablePatterns"
60
+ ],
61
+ "properties": {
62
+ "register": {
63
+ "$ref": "#/$defs/profileText"
64
+ },
65
+ "capitalization": {
66
+ "$ref": "#/$defs/profileText"
67
+ },
68
+ "punctuation": {
69
+ "$ref": "#/$defs/profileText"
70
+ },
71
+ "vocabulary": {
72
+ "$ref": "#/$defs/profileText"
73
+ },
74
+ "warmth": {
75
+ "$ref": "#/$defs/profileText"
76
+ },
77
+ "humor": {
78
+ "$ref": "#/$defs/profileText"
79
+ },
80
+ "openings": {
81
+ "$ref": "#/$defs/textList"
82
+ },
83
+ "closings": {
84
+ "$ref": "#/$defs/textList"
85
+ },
86
+ "notablePatterns": {
87
+ "$ref": "#/$defs/textList"
88
+ }
89
+ }
90
+ },
91
+ "tempo": {
92
+ "type": "object",
93
+ "additionalProperties": false,
94
+ "required": [
95
+ "defaultBundle",
96
+ "singleLongMessage",
97
+ "multipleMessages",
98
+ "responseTiming",
99
+ "followUps"
100
+ ],
101
+ "properties": {
102
+ "defaultBundle": {
103
+ "$ref": "#/$defs/profileText"
104
+ },
105
+ "singleLongMessage": {
106
+ "$ref": "#/$defs/profileText"
107
+ },
108
+ "multipleMessages": {
109
+ "$ref": "#/$defs/profileText"
110
+ },
111
+ "responseTiming": {
112
+ "$ref": "#/$defs/profileText"
113
+ },
114
+ "followUps": {
115
+ "$ref": "#/$defs/profileText"
116
+ }
117
+ }
118
+ },
119
+ "replies": {
120
+ "type": "object",
121
+ "additionalProperties": false,
122
+ "required": [
123
+ "usage",
124
+ "useWhen",
125
+ "avoidWhen"
126
+ ],
127
+ "properties": {
128
+ "usage": {
129
+ "$ref": "#/$defs/profileText"
130
+ },
131
+ "useWhen": {
132
+ "$ref": "#/$defs/textList"
133
+ },
134
+ "avoidWhen": {
135
+ "$ref": "#/$defs/textList"
136
+ }
137
+ }
138
+ },
139
+ "contexts": {
140
+ "type": "array",
141
+ "maxItems": 32,
142
+ "items": {
143
+ "type": "object",
144
+ "additionalProperties": false,
145
+ "required": [
146
+ "when",
147
+ "incomingPattern",
148
+ "responseStrategy",
149
+ "prosePattern",
150
+ "tempoPattern",
151
+ "evidenceExampleIds"
152
+ ],
153
+ "properties": {
154
+ "when": {
155
+ "$ref": "#/$defs/profileText"
156
+ },
157
+ "incomingPattern": {
158
+ "$ref": "#/$defs/profileText"
159
+ },
160
+ "responseStrategy": {
161
+ "$ref": "#/$defs/profileText"
162
+ },
163
+ "prosePattern": {
164
+ "$ref": "#/$defs/profileText"
165
+ },
166
+ "tempoPattern": {
167
+ "$ref": "#/$defs/profileText"
168
+ },
169
+ "evidenceExampleIds": {
170
+ "$ref": "#/$defs/textList"
171
+ }
172
+ }
173
+ }
174
+ },
175
+ "invariants": {
176
+ "$ref": "#/$defs/textList"
177
+ },
178
+ "avoid": {
179
+ "$ref": "#/$defs/textList"
180
+ },
181
+ "confidence": {
182
+ "type": "object",
183
+ "additionalProperties": false,
184
+ "required": [
185
+ "overall",
186
+ "limitations"
187
+ ],
188
+ "properties": {
189
+ "overall": {
190
+ "enum": [
191
+ "low",
192
+ "medium",
193
+ "high"
194
+ ]
195
+ },
196
+ "limitations": {
197
+ "$ref": "#/$defs/textList"
198
+ }
199
+ }
200
+ }
201
+ },
202
+ "$defs": {
203
+ "identifier": {
204
+ "type": "string",
205
+ "minLength": 1,
206
+ "maxLength": 128
207
+ },
208
+ "profileText": {
209
+ "type": "string",
210
+ "minLength": 1,
211
+ "maxLength": 4096
212
+ },
213
+ "textList": {
214
+ "type": "array",
215
+ "maxItems": 32,
216
+ "items": {
217
+ "type": "string",
218
+ "minLength": 1,
219
+ "maxLength": 1024
220
+ }
221
+ }
222
+ }
223
+ }