@hraness/message-like-me 0.8.6 → 0.8.8
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/CHANGELOG.md +21 -0
- package/README.md +41 -33
- package/SECURITY.md +6 -6
- package/dist/agentic-messaging-v1.d.ts +44 -25
- package/dist/agentic-messaging-v1.js +81 -67
- package/dist/cli.js +91 -83
- package/docs/local-message-bundle-v1.md +11 -10
- package/docs/local-message-bundle-v2.md +10 -9
- package/docs/methodology.md +1 -1
- package/docs/publishing.md +57 -25
- package/package.json +2 -1
- package/skills/message-like-me/SKILL.md +6 -6
- package/skills/message-like-me/references/privacy.md +2 -2
|
@@ -11,12 +11,12 @@ var AGENT_MESSAGE_DRAFT_V1_FORMAT = "message-like-me.agent-message-draft";
|
|
|
11
11
|
var AGENT_MESSAGE_HANDOFF_REQUEST_V1_FORMAT = "message-like-me.agent-message-handoff-request";
|
|
12
12
|
var AGENT_MESSAGE_HANDOFF_V1_FORMAT = "message-like-me.agent-message-handoff";
|
|
13
13
|
var AGENT_MESSAGE_AUDIT_V1_FORMAT = "message-like-me.agent-message-handoff-audit";
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
contractId:
|
|
14
|
+
var GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_FORMAT = "wrench.messaging-context-binding";
|
|
15
|
+
var GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_FORMAT = "wrench.messaging-receipt-binding";
|
|
16
|
+
var GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_ID = "wrench.messaging-context-binding.v1";
|
|
17
|
+
var GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_HASH = "5e64da6a3d826e7f6fa3db7dca0a4ba92c10cfb784981e71a25aed9513a5c687";
|
|
18
|
+
var GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_DESCRIPTOR = Object.freeze({
|
|
19
|
+
contractId: GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_ID,
|
|
20
20
|
fields: Object.freeze([
|
|
21
21
|
"schemaVersion:1",
|
|
22
22
|
"format:wrench.messaging-context-binding",
|
|
@@ -32,10 +32,10 @@ var WRENCH_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_DESCRIPTOR = Object.freeze({
|
|
|
32
32
|
format: "wrench.messaging-contract-descriptor",
|
|
33
33
|
schemaVersion: 1
|
|
34
34
|
});
|
|
35
|
-
var
|
|
36
|
-
var
|
|
37
|
-
var
|
|
38
|
-
contractId:
|
|
35
|
+
var GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_ID = "wrench.messaging-receipt-binding.v1";
|
|
36
|
+
var GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_HASH = "7f6cf724f0200b2399e4f4641c637b20b48914fc5c9b13755127a8ec69fe66f4";
|
|
37
|
+
var GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_DESCRIPTOR = Object.freeze({
|
|
38
|
+
contractId: GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_ID,
|
|
39
39
|
fields: Object.freeze([
|
|
40
40
|
"schemaVersion:1",
|
|
41
41
|
"format:wrench.messaging-receipt-binding",
|
|
@@ -191,8 +191,8 @@ function handoffCore(value) {
|
|
|
191
191
|
function handoffDigest(value) {
|
|
192
192
|
return sha256(canonicalJson(handoffCore(value)));
|
|
193
193
|
}
|
|
194
|
-
function
|
|
195
|
-
const record = object(value, "
|
|
194
|
+
function parseGhostgetMessagingContextBindingV1(value) {
|
|
195
|
+
const record = object(value, "Ghostget messaging context binding");
|
|
196
196
|
exactKeys(record, [
|
|
197
197
|
"schemaVersion",
|
|
198
198
|
"format",
|
|
@@ -204,26 +204,26 @@ function parseWrenchMessagingContextBindingV1(value) {
|
|
|
204
204
|
"latestMessageRevision",
|
|
205
205
|
"validatedAt",
|
|
206
206
|
"expiresAt"
|
|
207
|
-
], "
|
|
208
|
-
if (record.schemaVersion !== AGENTIC_MESSAGING_V1_SCHEMA_VERSION || record.format !==
|
|
209
|
-
return fail("
|
|
210
|
-
if (record.contractId !==
|
|
211
|
-
return fail("
|
|
212
|
-
const validatedAt = timestamp(record.validatedAt, "
|
|
213
|
-
const expiresAt = timestamp(record.expiresAt, "
|
|
207
|
+
], "Ghostget messaging context binding");
|
|
208
|
+
if (record.schemaVersion !== AGENTIC_MESSAGING_V1_SCHEMA_VERSION || record.format !== GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_FORMAT)
|
|
209
|
+
return fail("Ghostget messaging context binding has the wrong schemaVersion or format");
|
|
210
|
+
if (record.contractId !== GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_ID || record.contractHash !== GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_HASH)
|
|
211
|
+
return fail("Ghostget messaging context binding has an unsupported contract identity");
|
|
212
|
+
const validatedAt = timestamp(record.validatedAt, "Ghostget messaging context binding.validatedAt");
|
|
213
|
+
const expiresAt = timestamp(record.expiresAt, "Ghostget messaging context binding.expiresAt");
|
|
214
214
|
const lifetime = Date.parse(expiresAt) - Date.parse(validatedAt);
|
|
215
215
|
if (lifetime <= 0 || lifetime > AGENTIC_MESSAGING_V1_LIMITS.maximumContextLifetimeMilliseconds) {
|
|
216
|
-
return fail("
|
|
216
|
+
return fail("Ghostget messaging context binding has an invalid lifetime");
|
|
217
217
|
}
|
|
218
218
|
return Object.freeze({
|
|
219
219
|
schemaVersion: AGENTIC_MESSAGING_V1_SCHEMA_VERSION,
|
|
220
|
-
format:
|
|
221
|
-
contractId:
|
|
222
|
-
contractHash:
|
|
223
|
-
routeRef: identifier(record.routeRef, "
|
|
224
|
-
contextRef: identifier(record.contextRef, "
|
|
225
|
-
exactDataRevision: digest(record.exactDataRevision, "
|
|
226
|
-
latestMessageRevision: digest(record.latestMessageRevision, "
|
|
220
|
+
format: GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_FORMAT,
|
|
221
|
+
contractId: GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_ID,
|
|
222
|
+
contractHash: GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_HASH,
|
|
223
|
+
routeRef: identifier(record.routeRef, "Ghostget messaging context binding.routeRef"),
|
|
224
|
+
contextRef: identifier(record.contextRef, "Ghostget messaging context binding.contextRef"),
|
|
225
|
+
exactDataRevision: digest(record.exactDataRevision, "Ghostget messaging context binding.exactDataRevision"),
|
|
226
|
+
latestMessageRevision: digest(record.latestMessageRevision, "Ghostget messaging context binding.latestMessageRevision"),
|
|
227
227
|
validatedAt,
|
|
228
228
|
expiresAt
|
|
229
229
|
});
|
|
@@ -251,7 +251,10 @@ function parseAgentMessageHandoffRequestV1(value) {
|
|
|
251
251
|
});
|
|
252
252
|
}
|
|
253
253
|
function createAgentMessageHandoffV1(input) {
|
|
254
|
-
|
|
254
|
+
if (input.ghostgetContext !== undefined && input.wrenchContext !== undefined) {
|
|
255
|
+
return fail("Choose ghostgetContext or its legacy wrenchContext alias, not both");
|
|
256
|
+
}
|
|
257
|
+
const context = parseGhostgetMessagingContextBindingV1(input.ghostgetContext ?? input.wrenchContext);
|
|
255
258
|
const draft = parseAgentMessageDraftV1(input.draft);
|
|
256
259
|
const core = Object.freeze({
|
|
257
260
|
schemaVersion: AGENTIC_MESSAGING_V1_SCHEMA_VERSION,
|
|
@@ -298,7 +301,7 @@ function createAgentMessageHandoffV1(input) {
|
|
|
298
301
|
return fail("Agent message handoff timestamps are inconsistent");
|
|
299
302
|
}
|
|
300
303
|
if (core.expiresAt > core.wrench.contextExpiresAt) {
|
|
301
|
-
return fail("Agent message handoff outlives its
|
|
304
|
+
return fail("Agent message handoff outlives its Ghostget context binding");
|
|
302
305
|
}
|
|
303
306
|
const canonicalSha256 = handoffDigest(core);
|
|
304
307
|
return Object.freeze({
|
|
@@ -362,9 +365,9 @@ function parseAgentMessageHandoffV1(value) {
|
|
|
362
365
|
exactKeys(integrityRecord, ["algorithm", "canonicalSha256"], "Agent message handoff.integrity");
|
|
363
366
|
if (integrityRecord.algorithm !== "sha256")
|
|
364
367
|
return fail("Agent message handoff integrity algorithm must be sha256");
|
|
365
|
-
const context =
|
|
368
|
+
const context = parseGhostgetMessagingContextBindingV1({
|
|
366
369
|
schemaVersion: AGENTIC_MESSAGING_V1_SCHEMA_VERSION,
|
|
367
|
-
format:
|
|
370
|
+
format: GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_FORMAT,
|
|
368
371
|
contractId: wrenchRecord.contractId,
|
|
369
372
|
contractHash: wrenchRecord.contractHash,
|
|
370
373
|
routeRef: wrenchRecord.routeRef,
|
|
@@ -389,7 +392,7 @@ function parseAgentMessageHandoffV1(value) {
|
|
|
389
392
|
profileState: profileState(evidenceRecord.profileState, "Agent message handoff.evidence.profileState"),
|
|
390
393
|
profileEvidenceRevision: evidenceRecord.profileEvidenceRevision === null ? null : digest(evidenceRecord.profileEvidenceRevision, "Agent message handoff.evidence.profileEvidenceRevision")
|
|
391
394
|
},
|
|
392
|
-
|
|
395
|
+
ghostgetContext: context,
|
|
393
396
|
draft: {
|
|
394
397
|
schemaVersion: AGENTIC_MESSAGING_V1_SCHEMA_VERSION,
|
|
395
398
|
format: AGENT_MESSAGE_DRAFT_V1_FORMAT,
|
|
@@ -403,7 +406,7 @@ function parseAgentMessageHandoffV1(value) {
|
|
|
403
406
|
return fail("Agent message handoff integrity does not match its canonical content");
|
|
404
407
|
return handoff;
|
|
405
408
|
}
|
|
406
|
-
function
|
|
409
|
+
function ghostgetMessagingTurnDigestV1(value) {
|
|
407
410
|
const handoff = parseAgentMessageHandoffV1(value);
|
|
408
411
|
return sha256(canonicalJson({
|
|
409
412
|
schemaVersion: 1,
|
|
@@ -418,8 +421,8 @@ function wrenchMessagingTurnDigestV1(value) {
|
|
|
418
421
|
}))
|
|
419
422
|
}));
|
|
420
423
|
}
|
|
421
|
-
function
|
|
422
|
-
const record = object(value, "
|
|
424
|
+
function parseGhostgetMessagingReceiptBindingV1(value) {
|
|
425
|
+
const record = object(value, "Ghostget messaging receipt binding");
|
|
423
426
|
exactKeys(record, [
|
|
424
427
|
"schemaVersion",
|
|
425
428
|
"format",
|
|
@@ -436,42 +439,42 @@ function parseWrenchMessagingReceiptBindingV1(value) {
|
|
|
436
439
|
"provenPartCount",
|
|
437
440
|
"receiptSha256",
|
|
438
441
|
"recordedAt"
|
|
439
|
-
], "
|
|
440
|
-
if (record.schemaVersion !== AGENTIC_MESSAGING_V1_SCHEMA_VERSION || record.format !==
|
|
441
|
-
return fail("
|
|
442
|
-
if (record.contractId !==
|
|
443
|
-
return fail("
|
|
442
|
+
], "Ghostget messaging receipt binding");
|
|
443
|
+
if (record.schemaVersion !== AGENTIC_MESSAGING_V1_SCHEMA_VERSION || record.format !== GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_FORMAT)
|
|
444
|
+
return fail("Ghostget messaging receipt binding has the wrong schemaVersion or format");
|
|
445
|
+
if (record.contractId !== GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_ID || record.contractHash !== GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_HASH)
|
|
446
|
+
return fail("Ghostget messaging receipt binding has an unsupported contract identity");
|
|
444
447
|
if (record.state !== "submitted" && record.state !== "failed" && record.state !== "partial" && record.state !== "indeterminate")
|
|
445
|
-
return fail("
|
|
448
|
+
return fail("Ghostget messaging receipt binding has an invalid state");
|
|
446
449
|
if (!Number.isSafeInteger(record.partCount) || record.partCount < 1 || record.partCount > 8) {
|
|
447
|
-
return fail("
|
|
450
|
+
return fail("Ghostget messaging receipt binding.partCount must be from 1 through 8");
|
|
448
451
|
}
|
|
449
452
|
if (!Number.isSafeInteger(record.provenPartCount) || record.provenPartCount < 0 || record.provenPartCount > record.partCount)
|
|
450
|
-
return fail("
|
|
453
|
+
return fail("Ghostget messaging receipt binding.provenPartCount is out of range");
|
|
451
454
|
const partCount = record.partCount;
|
|
452
455
|
const provenPartCount = record.provenPartCount;
|
|
453
456
|
if (record.state === "submitted" && provenPartCount !== partCount || record.state === "failed" && provenPartCount !== 0 || record.state === "partial" && (provenPartCount < 1 || provenPartCount >= partCount) || record.state === "indeterminate" && provenPartCount >= partCount)
|
|
454
|
-
return fail("
|
|
457
|
+
return fail("Ghostget messaging receipt binding state does not match its proven prefix");
|
|
455
458
|
const parsed = Object.freeze({
|
|
456
459
|
schemaVersion: AGENTIC_MESSAGING_V1_SCHEMA_VERSION,
|
|
457
|
-
format:
|
|
458
|
-
contractId:
|
|
459
|
-
contractHash:
|
|
460
|
-
clientIntentSha256: digest(record.clientIntentSha256, "
|
|
461
|
-
routeRefSha256: digest(record.routeRefSha256, "
|
|
462
|
-
contextRefSha256: digest(record.contextRefSha256, "
|
|
463
|
-
turnDigest: digest(record.turnDigest, "
|
|
464
|
-
previewDigest: digest(record.previewDigest, "
|
|
465
|
-
runId: identifier(record.runId, "
|
|
460
|
+
format: GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_FORMAT,
|
|
461
|
+
contractId: GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_ID,
|
|
462
|
+
contractHash: GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_HASH,
|
|
463
|
+
clientIntentSha256: digest(record.clientIntentSha256, "Ghostget messaging receipt binding.clientIntentSha256"),
|
|
464
|
+
routeRefSha256: digest(record.routeRefSha256, "Ghostget messaging receipt binding.routeRefSha256"),
|
|
465
|
+
contextRefSha256: digest(record.contextRefSha256, "Ghostget messaging receipt binding.contextRefSha256"),
|
|
466
|
+
turnDigest: digest(record.turnDigest, "Ghostget messaging receipt binding.turnDigest"),
|
|
467
|
+
previewDigest: digest(record.previewDigest, "Ghostget messaging receipt binding.previewDigest"),
|
|
468
|
+
runId: identifier(record.runId, "Ghostget messaging receipt binding.runId", 256),
|
|
466
469
|
state: record.state,
|
|
467
470
|
partCount,
|
|
468
471
|
provenPartCount,
|
|
469
|
-
receiptSha256: digest(record.receiptSha256, "
|
|
470
|
-
recordedAt: timestamp(record.recordedAt, "
|
|
472
|
+
receiptSha256: digest(record.receiptSha256, "Ghostget messaging receipt binding.receiptSha256"),
|
|
473
|
+
recordedAt: timestamp(record.recordedAt, "Ghostget messaging receipt binding.recordedAt")
|
|
471
474
|
});
|
|
472
475
|
const { receiptSha256, ...receiptCore } = parsed;
|
|
473
476
|
if (sha256(canonicalJson(receiptCore)) !== receiptSha256) {
|
|
474
|
-
return fail("
|
|
477
|
+
return fail("Ghostget messaging receipt binding receiptSha256 does not match its canonical content");
|
|
475
478
|
}
|
|
476
479
|
return parsed;
|
|
477
480
|
}
|
|
@@ -482,22 +485,33 @@ function agentMessageRouteCandidateId(sourceId, conversationId) {
|
|
|
482
485
|
}))}`;
|
|
483
486
|
}
|
|
484
487
|
export {
|
|
485
|
-
wrenchMessagingTurnDigestV1,
|
|
486
|
-
parseWrenchMessagingReceiptBindingV1,
|
|
487
|
-
parseWrenchMessagingContextBindingV1,
|
|
488
|
+
ghostgetMessagingTurnDigestV1 as wrenchMessagingTurnDigestV1,
|
|
489
|
+
parseGhostgetMessagingReceiptBindingV1 as parseWrenchMessagingReceiptBindingV1,
|
|
490
|
+
parseGhostgetMessagingContextBindingV1 as parseWrenchMessagingContextBindingV1,
|
|
491
|
+
parseGhostgetMessagingReceiptBindingV1,
|
|
492
|
+
parseGhostgetMessagingContextBindingV1,
|
|
488
493
|
parseAgentMessageHandoffV1,
|
|
489
494
|
parseAgentMessageHandoffRequestV1,
|
|
490
495
|
parseAgentMessageDraftV1,
|
|
496
|
+
ghostgetMessagingTurnDigestV1,
|
|
491
497
|
createAgentMessageHandoffV1,
|
|
492
498
|
agentMessageRouteCandidateId,
|
|
493
|
-
WRENCH_MESSAGING_RECEIPT_BINDING_V1_FORMAT,
|
|
494
|
-
WRENCH_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_ID,
|
|
495
|
-
WRENCH_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_HASH,
|
|
496
|
-
WRENCH_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_DESCRIPTOR,
|
|
497
|
-
WRENCH_MESSAGING_CONTEXT_BINDING_V1_FORMAT,
|
|
498
|
-
WRENCH_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_ID,
|
|
499
|
-
WRENCH_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_HASH,
|
|
500
|
-
WRENCH_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_DESCRIPTOR,
|
|
499
|
+
GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_FORMAT as WRENCH_MESSAGING_RECEIPT_BINDING_V1_FORMAT,
|
|
500
|
+
GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_ID as WRENCH_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_ID,
|
|
501
|
+
GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_HASH as WRENCH_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_HASH,
|
|
502
|
+
GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_DESCRIPTOR as WRENCH_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_DESCRIPTOR,
|
|
503
|
+
GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_FORMAT as WRENCH_MESSAGING_CONTEXT_BINDING_V1_FORMAT,
|
|
504
|
+
GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_ID as WRENCH_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_ID,
|
|
505
|
+
GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_HASH as WRENCH_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_HASH,
|
|
506
|
+
GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_DESCRIPTOR as WRENCH_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_DESCRIPTOR,
|
|
507
|
+
GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_FORMAT,
|
|
508
|
+
GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_ID,
|
|
509
|
+
GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_HASH,
|
|
510
|
+
GHOSTGET_MESSAGING_RECEIPT_BINDING_V1_CONTRACT_DESCRIPTOR,
|
|
511
|
+
GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_FORMAT,
|
|
512
|
+
GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_ID,
|
|
513
|
+
GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_HASH,
|
|
514
|
+
GHOSTGET_MESSAGING_CONTEXT_BINDING_V1_CONTRACT_DESCRIPTOR,
|
|
501
515
|
AgenticMessagingV1ContractError,
|
|
502
516
|
AGENT_MESSAGE_HANDOFF_V1_FORMAT,
|
|
503
517
|
AGENT_MESSAGE_HANDOFF_REQUEST_V1_FORMAT,
|