@agentunion/fastaun 0.5.27 → 0.5.29
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 +55 -0
- package/_packed_docs/CHANGELOG.md +55 -0
- package/_packed_docs/INDEX.md +23 -3
- package/_packed_docs/KITE_DOCS_GUIDE.md +15 -11
- package/_packed_docs/sdk/0.5.28-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +228 -0
- package/_packed_docs/sdk/0.5.28-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +146 -0
- package/_packed_docs/sdk/0.5.29-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +180 -0
- package/_packed_docs/sdk/0.5.29-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +164 -0
- package/_packed_docs/sdk/09-/347/273/204/347/273/207/346/234/215/345/212/241RPC/346/211/213/345/206/214.md +90 -90
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +6 -4
- package/_packed_docs/sdk/INDEX.md +14 -4
- package/_packed_docs/sdk//345/207/255/350/257/201/344/270/216/347/273/204/347/273/207/346/234/215/345/212/241SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +1 -1
- package/_packed_docs/sdk//345/207/255/350/257/201/344/270/216/347/273/204/347/273/207/346/234/215/345/212/241SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +1 -1
- package/_packed_docs//346/216/247/345/210/266/346/266/210/346/201/257/344/270/216/350/256/276/345/244/207/350/203/275/345/212/233/345/215/217/345/225/206/346/226/271/346/241/210.md +426 -0
- package/_packed_docs//346/266/210/346/201/257/345/220/214/346/255/245/344/270/216/345/216/206/345/217/262/346/213/211/345/217/226/344/273/243/347/240/201/345/256/241/346/237/245/351/227/256/351/242/230/346/270/205/345/215/225.md +279 -229
- package/_packed_docs//351/243/216/346/216/247/345/223/215/345/272/224/344/270/216SDK/345/215/217/345/220/214/346/226/271/346/241/210.md +381 -0
- package/dist/agent-md-changes.d.ts +30 -0
- package/dist/agent-md-changes.js +168 -0
- package/dist/agent-md-changes.js.map +1 -0
- package/dist/agent-md-schema.d.ts +1 -0
- package/dist/agent-md-schema.js +29 -12
- package/dist/agent-md-schema.js.map +1 -1
- package/dist/agent-md.d.ts +9 -0
- package/dist/agent-md.js +107 -36
- package/dist/agent-md.js.map +1 -1
- package/dist/aid-store.d.ts +14 -1
- package/dist/aid-store.js +163 -61
- package/dist/aid-store.js.map +1 -1
- package/dist/auth.d.ts +10 -0
- package/dist/auth.js +44 -4
- package/dist/auth.js.map +1 -1
- package/dist/client/control-messages.d.ts +31 -0
- package/dist/client/control-messages.js +496 -0
- package/dist/client/control-messages.js.map +1 -0
- package/dist/client/delivery.js +12 -3
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/group-state.js +2 -3
- package/dist/client/group-state.js.map +1 -1
- package/dist/client/lifecycle.js +8 -0
- package/dist/client/lifecycle.js.map +1 -1
- package/dist/client/rpc-pipeline.js +76 -13
- package/dist/client/rpc-pipeline.js.map +1 -1
- package/dist/client/v2-e2ee.d.ts +3 -0
- package/dist/client/v2-e2ee.js +13 -4
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts +27 -1
- package/dist/client.js +348 -38
- package/dist/client.js.map +1 -1
- package/dist/discovery.d.ts +3 -0
- package/dist/discovery.js +53 -2
- package/dist/discovery.js.map +1 -1
- package/dist/events.js +14 -1
- package/dist/events.js.map +1 -1
- package/dist/ownership-v21.d.ts +2 -1
- package/dist/ownership-v21.js +17 -3
- package/dist/ownership-v21.js.map +1 -1
- package/dist/ownership-workflow.js +9 -5
- package/dist/ownership-workflow.js.map +1 -1
- package/dist/risk-control.d.ts +68 -0
- package/dist/risk-control.js +344 -0
- package/dist/risk-control.js.map +1 -0
- package/dist/semantic-facade.js +4 -2
- package/dist/semantic-facade.js.map +1 -1
- package/dist/semantic-protocol.js +2 -0
- package/dist/semantic-protocol.js.map +1 -1
- package/dist/storage/lowlevel.d.ts +1 -0
- package/dist/storage/lowlevel.js +2 -2
- package/dist/storage/lowlevel.js.map +1 -1
- package/dist/tools/cross-sdk-agent.d.ts +1 -1
- package/dist/tools/cross-sdk-agent.js +16 -34
- package/dist/tools/cross-sdk-agent.js.map +1 -1
- package/dist/transport.d.ts +21 -1
- package/dist/transport.js +199 -20
- package/dist/transport.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +8 -8
package/dist/agent-md-schema.js
CHANGED
|
@@ -19,7 +19,7 @@ function assertValidUtf8Text(content) {
|
|
|
19
19
|
export function parseFileFrontmatter(payload) {
|
|
20
20
|
return parseFileFrontmatterInternal(payload, true);
|
|
21
21
|
}
|
|
22
|
-
function parseFileFrontmatterInternal(payload, validateOwnership) {
|
|
22
|
+
function parseFileFrontmatterInternal(payload, validateOwnership, forUpload = false) {
|
|
23
23
|
const lines = payload.replace(/^\ufeff/, '').split(/\r\n|\n|\r/);
|
|
24
24
|
if (lines[0]?.trim() !== '---')
|
|
25
25
|
throw new ValidationError('agent.md must start with YAML frontmatter');
|
|
@@ -35,7 +35,7 @@ function parseFileFrontmatterInternal(payload, validateOwnership) {
|
|
|
35
35
|
});
|
|
36
36
|
if (doc.warnings.length)
|
|
37
37
|
throw new ValidationError(`agent.md frontmatter is invalid: ${doc.warnings[0].message}`);
|
|
38
|
-
if (validateOwnership)
|
|
38
|
+
if (validateOwnership && !(forUpload && ['group', 'org'].includes(String(doc.get('type')))))
|
|
39
39
|
for (const [section, fields] of [['statement', ['version', 'relation_version', 'declared_at']], ['transfer', ['target_relation_version', 'expires_at']]]) {
|
|
40
40
|
for (const field of fields) {
|
|
41
41
|
const node = doc.getIn(['ownership', section, field], true);
|
|
@@ -68,7 +68,7 @@ function validateAgentMdDocumentInternal(content, opts) {
|
|
|
68
68
|
if (parsed.fields && new TextEncoder().encode(String(content)).byteLength - new TextEncoder().encode(parsed.payload).byteLength > AGENT_MD_MAX_SIGNATURE_BYTES)
|
|
69
69
|
throw new ValidationError(`agent.md signature block exceeds ${AGENT_MD_MAX_SIGNATURE_BYTES} bytes`);
|
|
70
70
|
const bare = opts.readCompatibility && parsed.payload.replace(/^\ufeff/, '').split(/\r\n|\n|\r/, 1)[0]?.trim() !== '---';
|
|
71
|
-
const meta = bare ? {} : parseFileFrontmatterInternal(parsed.payload, !opts.readCompatibility && (opts.validateOwnership ?? true));
|
|
71
|
+
const meta = bare ? {} : parseFileFrontmatterInternal(parsed.payload, !opts.readCompatibility && (opts.forUpload || (opts.validateOwnership ?? true)), opts.forUpload);
|
|
72
72
|
const legacyEntity = meta.type === 'group' && parsed.signatures.length === 1 && !Object.hasOwn(meta, 'entity_cert_fingerprint') && (parsed.fields?.signer_aid === undefined || aidEqual(parsed.fields.signer_aid, meta.aid));
|
|
73
73
|
if (opts.readCompatibility && ['group', 'org'].includes(String(meta.type)) && !legacyEntity)
|
|
74
74
|
return validateAgentMdDocumentInternal(content, { ...opts, readCompatibility: false, historicalEntityOwner: parsed.signatures.length === 1 && parsed.fields?.signer_aid !== undefined && aidEqual(parsed.fields.signer_aid, meta.owner) && !aidEqual(parsed.fields.signer_aid, meta.aid) });
|
|
@@ -101,19 +101,36 @@ function validateAgentMdDocumentInternal(content, opts) {
|
|
|
101
101
|
if (meta.tags !== undefined && (!Array.isArray(meta.tags) || meta.tags.some((item) => typeof item !== 'string')))
|
|
102
102
|
throw new ValidationError('agent.md tags must be an array of strings');
|
|
103
103
|
const entity = ['group', 'org'].includes(String(meta.type));
|
|
104
|
+
const human = String(meta.type ?? '').trim().toLowerCase() === 'human';
|
|
105
|
+
if (human && ['owner', 'ownership', 'ownership_proof', 'ownership_release'].some(field => Object.hasOwn(meta, field)))
|
|
106
|
+
throw new ValidationError('human AID cannot specify owner or ownership');
|
|
104
107
|
if (entity) {
|
|
105
|
-
if (
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
if (opts.forUpload) {
|
|
109
|
+
if (!Object.hasOwn(meta, 'owner'))
|
|
110
|
+
throw new ValidationError('group/org agent.md requires owner');
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
if ((!opts.readCompatibility || Object.hasOwn(meta, 'owner')) && (typeof meta.owner !== 'string' || !AID_RE.test(meta.owner)))
|
|
114
|
+
throw new ValidationError('group/org agent.md requires owner');
|
|
115
|
+
if ((!opts.readCompatibility || Object.hasOwn(meta, 'entity_cert_fingerprint')) && (typeof meta.entity_cert_fingerprint !== 'string' || !/^sha256:[0-9a-f]{64}$/.test(meta.entity_cert_fingerprint)))
|
|
116
|
+
throw new ValidationError('group/org agent.md requires entity_cert_fingerprint');
|
|
117
|
+
}
|
|
118
|
+
if ((opts.forUpload || !opts.readCompatibility) && ['ownership', 'ownership_proof', 'ownership_release'].some((field) => Object.hasOwn(meta, field)))
|
|
110
119
|
throw new ValidationError('group/org agent.md cannot use Ownership 2.1');
|
|
111
120
|
}
|
|
112
|
-
else if (opts.validateOwnership ?? true) {
|
|
121
|
+
else if (opts.forUpload || (opts.validateOwnership ?? true)) {
|
|
122
|
+
if (opts.forUpload && !human && (!Object.hasOwn(meta, 'owner') || !['ownership', 'ownership_proof'].some(field => Object.hasOwn(meta, field))))
|
|
123
|
+
throw new ValidationError('non-human agent.md upload requires owner and ownership declaration');
|
|
113
124
|
if ('ownership' in meta || 'owner' in meta && !('ownership_proof' in meta))
|
|
114
125
|
validateOwnershipAgentFrontmatter(meta, opts.expectedAid);
|
|
115
|
-
else
|
|
126
|
+
else {
|
|
116
127
|
validateOwnershipFrontmatter(meta, opts.expectedAid);
|
|
128
|
+
if (opts.forUpload && 'ownership_proof' in meta) {
|
|
129
|
+
const proof = meta.ownership_proof;
|
|
130
|
+
if (!('proof_id' in proof) || !('subject_signature' in proof) || !aidEqual(meta.aid, meta.owner) && !('owner_signature' in proof))
|
|
131
|
+
throw new ValidationError('ownership_proof upload requires complete signatures');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
117
134
|
}
|
|
118
135
|
const fields = parsed.fields;
|
|
119
136
|
if (fields) {
|
|
@@ -125,7 +142,7 @@ function validateAgentMdDocumentInternal(content, opts) {
|
|
|
125
142
|
throw new ValidationError('ordinary agent.md main signature contains unknown signer_aid');
|
|
126
143
|
if (fields.signer_aid !== undefined && !aidEqual(fields.signer_aid, opts.historicalEntityOwner ? meta.owner : meta.aid))
|
|
127
144
|
throw new ValidationError('agent.md main signer must be its own AID');
|
|
128
|
-
if (entity && !opts.historicalEntityOwner && Object.hasOwn(meta, 'entity_cert_fingerprint') && fields.cert_fingerprint !== meta.entity_cert_fingerprint)
|
|
145
|
+
if (entity && !opts.forUpload && !opts.historicalEntityOwner && Object.hasOwn(meta, 'entity_cert_fingerprint') && fields.cert_fingerprint !== meta.entity_cert_fingerprint)
|
|
129
146
|
throw new ValidationError('entity signature certificate fingerprint does not match entity_cert_fingerprint', { stringCode: 'invalid' });
|
|
130
147
|
if (entity && parsed.signatures.slice(1).some(item => !aidEqual(item.fields.signer_aid, meta.owner)))
|
|
131
148
|
throw new ValidationError('group/org additional signer must be owner');
|
|
@@ -150,7 +167,7 @@ export function verifyAgentMdBodyUpdate(content, certPem, expectedAid, now, cert
|
|
|
150
167
|
verifyAgentMdUploadInternal(content, certPem, expectedAid, now, false, certificateResolver);
|
|
151
168
|
}
|
|
152
169
|
function verifyAgentMdUploadInternal(content, certPem, expectedAid, now, validateOwnership, certificateResolver) {
|
|
153
|
-
const parsed = validateAgentMdDocument(content, { expectedAid, requireSignature: true, now, validateOwnership });
|
|
170
|
+
const parsed = validateAgentMdDocument(content, { expectedAid, requireSignature: true, now, validateOwnership, forUpload: true });
|
|
154
171
|
const fields = parsed.signature;
|
|
155
172
|
const signer = expectedAid;
|
|
156
173
|
validateAgentMdCertificate(certPem, signer, Number(fields.timestamp), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-md-schema.js","sourceRoot":"","sources":["../src/agent-md-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,eAAe,EAAE,2BAA2B,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACnK,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,MAAM,GAAG,+DAA+D,CAAC;AAC/E,MAAM,SAAS,GAAG,iBAAiB,CAAC;AACpC,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD,SAAS,QAAQ,CAAC,IAAa,EAAE,KAAc;IAC7C,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;AAC7G,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC1C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,OAAO,EAAE,CAAC;QAC3F,MAAM,IAAI,eAAe,CAAC,mCAAmC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,4BAA4B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,4BAA4B,CAAC,OAAe,EAAE,iBAA0B;IAC/E,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACjE,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK;QAAE,MAAM,IAAI,eAAe,CAAC,2CAA2C,CAAC,CAAC;IACvG,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC;IACtE,IAAI,GAAG,GAAG,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,oCAAoC,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IACpF,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,eAAe,CAAC,oCAAoC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/G,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QACxB,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,8CAA8C,CAAC,CAAC;IACrM,CAAC,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM;QAAE,MAAM,IAAI,eAAe,CAAC,oCAAoC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACnH,IAAI,iBAAiB;QAAE,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC,CAAU,EAAE,CAAC;YACzL,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC5D,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;oBAAE,MAAM,IAAI,eAAe,CAAC,aAAa,OAAO,IAAI,KAAK,sBAAsB,CAAC,CAAC;YACzL,CAAC;QACH,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,wCAAwC,CAAC,CAAC;IACxI,OAAO,MAAiC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,OAAkI,EAAE;IAC3L,OAAO,+BAA+B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAAe,EAAE,OAAqG,EAAE;IAClK,OAAO,+BAA+B,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;AAClH,CAAC;AAED,SAAS,+BAA+B,CAAC,OAAe,EAAE,IAA6L;IACrP,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,eAAe,CAAC,kCAAkC,CAAC,CAAC;IACjG,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAClF,IAAI,MAAM,CAAC,UAAU;QAAE,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACpE,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,eAAe,CAAC,gCAAgC,CAAC,CAAC;IACzG,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,qCAAqC,CAAC,CAAC;IAC3J,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,GAAG,4BAA4B;QAAE,MAAM,IAAI,eAAe,CAAC,oCAAoC,4BAA4B,QAAQ,CAAC,CAAC;IACpQ,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK,CAAC;IACzH,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,4BAA4B,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC,CAAC;IACnI,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7N,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY;QAAE,OAAO,+BAA+B,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzX,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;QAAE,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;IACzK,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,6CAA6C,CAAC,CAAC;IAClM,IAAI,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QAAE,MAAM,IAAI,eAAe,CAAC,mDAAmD,CAAC,CAAC;IAC/M,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;QAAE,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,wBAAwB,GAAG,6BAA6B,CAAC,CAAC;IACtO,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,mDAAmD,CAAC,CAAC;IAC1M,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;QAC1B,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;YAAE,MAAM,IAAI,eAAe,CAAC,mDAAmD,CAAC,CAAC;QACzH,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM,IAAI,eAAe,CAAC,6CAA6C,CAAC,CAAC;IAC1H,CAAC;IACD,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;YAAE,MAAM,IAAI,eAAe,CAAC,8CAA8C,CAAC,CAAC;QAC/G,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM,IAAI,eAAe,CAAC,wCAAwC,CAAC,CAAC;IAChH,CAAC;IACD,IAAI,SAAS,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAAE,MAAM,IAAI,eAAe,CAAC,+CAA+C,CAAC,CAAC;IACtI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,2CAA2C,CAAC,CAAC;IACzL,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,mCAAmC,CAAC,CAAC;QAC9L,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,uBAAuB,KAAK,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,qDAAqD,CAAC,CAAC;QACvR,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,6CAA6C,CAAC,CAAC;IAC7M,CAAC;SAAM,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE,CAAC;QAC1C,IAAI,WAAW,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,iBAAiB,IAAI,IAAI,CAAC;YAAE,iCAAiC,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;;YACjI,4BAA4B,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,EAAE,wBAAwB,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,4CAA4C,CAAC,CAAC;QACtN,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;YAAE,MAAM,IAAI,eAAe,CAAC,uDAAuD,CAAC,CAAC;QAC7J,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;YAAE,MAAM,IAAI,eAAe,CAAC,8DAA8D,CAAC,CAAC;QAC1I,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,0CAA0C,CAAC,CAAC;QAC/L,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,yBAAyB,CAAC,IAAI,MAAM,CAAC,gBAAgB,KAAK,IAAI,CAAC,uBAAuB;YAAE,MAAM,IAAI,eAAe,CAAC,iFAAiF,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QACjS,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,2CAA2C,CAAC,CAAC;QAC7K,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5I,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,sCAAsC,CAAC,CAAC;QAClH,IAAI,wBAAwB,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,sBAAsB,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,4CAA4C,CAAC,CAAC;QACpK,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,uCAAuC,CAAC,CAAC;QACjR,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3F,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG;YAAE,MAAM,IAAI,eAAe,CAAC,uDAAuD,CAAC,CAAC;IACzG,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,OAAe,EAAE,WAAmB,EAAE,GAAY,EAAE,mBAAqF;IAC5L,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,OAAe,EAAE,WAAmB,EAAE,GAAY,EAAE,mBAAqF;IAChM,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAe,EAAE,OAAe,EAAE,WAAmB,EAAE,GAAuB,EAAE,iBAA0B,EAAE,mBAAqF;IACpO,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,IAAI,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACjH,MAAM,MAAM,GAAG,MAAM,CAAC,SAAU,CAAC;IACjC,MAAM,MAAM,GAAG,WAAW,CAAC;IAC3B,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;QACpE,GAAG;QACH,sBAAsB,EAAE,IAAI;KAC7B,CAAC,CAAC;IACH,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QAAE,MAAM,IAAI,eAAe,CAAC,2CAA2C,CAAC,CAAC;IACpK,IAAI,MAAM,CAAC,sBAAsB,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,MAAM,CAAC,sBAAsB,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,0CAA0C,CAAC,CAAC;IACjL,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAC3I,IAAI,CAAC,QAAQ,CAAC,KAAK;QAAE,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,IAAI,wCAAwC,CAAC,CAAC;AAC9G,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,OAAe,EACf,WAAmB,EACnB,SAAiB,EACjB,OAAwF,EAAE;IAE1F,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,IAAI,CAAC,SAAS,CAAC,iBAAiB,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,UAAU,KAAK,YAAY,EAAE,CAAC;QAClH,MAAM,IAAI,eAAe,CAAC,6CAA6C,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,yCAAyC,CAAC,CAAC;IAC5I,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,SAAS,GAAG,GAAG,IAAI,OAAO,GAAG,QAAQ,GAAG,GAAG,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,0DAA0D,CAAC,CAAC;IAC5L,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,yDAAyD,CAAC,CAAC;IAC1M,IAAI,SAAS,GAAG,SAAS,IAAI,SAAS,GAAG,QAAQ;QAAE,MAAM,IAAI,eAAe,CAAC,8DAA8D,CAAC,CAAC;AAC/I,CAAC"}
|
|
1
|
+
{"version":3,"file":"agent-md-schema.js","sourceRoot":"","sources":["../src/agent-md-schema.ts"],"names":[],"mappings":"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"}
|
package/dist/agent-md.d.ts
CHANGED
|
@@ -73,6 +73,7 @@ export interface AgentMdManagerOptions {
|
|
|
73
73
|
verifySsl?: boolean;
|
|
74
74
|
logger?: ModuleLogger | null;
|
|
75
75
|
onChanged?: (aid: string) => void;
|
|
76
|
+
onCommitted?: (aid: string, notice: Record<string, unknown>) => void | Promise<void>;
|
|
76
77
|
discoveryPort?: number | null;
|
|
77
78
|
uploadViaGatewayHost?: boolean;
|
|
78
79
|
ownerAidGetter?: () => string | null | undefined;
|
|
@@ -91,6 +92,7 @@ export declare class AgentMdManager {
|
|
|
91
92
|
private _verifySsl;
|
|
92
93
|
private _log;
|
|
93
94
|
private _onChanged?;
|
|
95
|
+
private _onCommitted?;
|
|
94
96
|
private _discoveryPort;
|
|
95
97
|
private _uploadViaGatewayHost;
|
|
96
98
|
private _ownerAidGetter?;
|
|
@@ -108,6 +110,9 @@ export declare class AgentMdManager {
|
|
|
108
110
|
private _autoDownloadRetry;
|
|
109
111
|
private _downloadActive;
|
|
110
112
|
private _downloadWaiters;
|
|
113
|
+
private _httpHandler;
|
|
114
|
+
setHttpHandler(handler: (url: string, init: RequestInit, perform: (url: string, init: RequestInit) => Promise<Response>) => Promise<Response>): void;
|
|
115
|
+
private _requestText;
|
|
111
116
|
constructor(opts: AgentMdManagerOptions);
|
|
112
117
|
static contentEtag(content: string): string;
|
|
113
118
|
get root(): string;
|
|
@@ -119,6 +124,9 @@ export declare class AgentMdManager {
|
|
|
119
124
|
writeContent(aid: string, content: string): string;
|
|
120
125
|
private _loadRecord;
|
|
121
126
|
loadRecord(aid: string): Record<string, unknown> | null;
|
|
127
|
+
updateRecord(aid: string, change: (record: Record<string, any>) => void): void;
|
|
128
|
+
setOnCommitted(callback: (aid: string, notice: Record<string, unknown>) => void | Promise<void>): void;
|
|
129
|
+
private _saveCommittedRecord;
|
|
122
130
|
private _saveRecord;
|
|
123
131
|
saveRecord(aid: string, fields: Record<string, unknown>, observation?: AgentMdObservation): Record<string, unknown>;
|
|
124
132
|
cacheOwnershipSnapshot(aid: string, snapshot: unknown, observation: {
|
|
@@ -152,6 +160,7 @@ export declare class AgentMdManager {
|
|
|
152
160
|
resumePendingUpload(aid: string, signer?: AID): Promise<boolean>;
|
|
153
161
|
private _uploadPrepared;
|
|
154
162
|
private _verifyLegacyBodyContent;
|
|
163
|
+
private _readBodyOriginalFresh;
|
|
155
164
|
private _readLegacyBodyBase;
|
|
156
165
|
private _resumeLegacyBodyUpload;
|
|
157
166
|
private _readEntityFresh;
|
package/dist/agent-md.js
CHANGED
|
@@ -197,6 +197,7 @@ export class AgentMdManager {
|
|
|
197
197
|
_verifySsl;
|
|
198
198
|
_log;
|
|
199
199
|
_onChanged;
|
|
200
|
+
_onCommitted;
|
|
200
201
|
_discoveryPort;
|
|
201
202
|
_uploadViaGatewayHost;
|
|
202
203
|
_ownerAidGetter;
|
|
@@ -214,11 +215,24 @@ export class AgentMdManager {
|
|
|
214
215
|
_autoDownloadRetry = new Map();
|
|
215
216
|
_downloadActive = 0;
|
|
216
217
|
_downloadWaiters = [];
|
|
218
|
+
_httpHandler = null;
|
|
219
|
+
setHttpHandler(handler) { this._httpHandler = handler; }
|
|
220
|
+
async _requestText(url, opts) {
|
|
221
|
+
if (!this._httpHandler)
|
|
222
|
+
return requestText(url, opts);
|
|
223
|
+
const perform = async () => {
|
|
224
|
+
const result = await requestText(url, opts);
|
|
225
|
+
return new Response(opts.method === 'HEAD' || [204, 205, 304].includes(result.status) ? null : result.text, { status: result.status, headers: result.headers });
|
|
226
|
+
};
|
|
227
|
+
const response = await this._httpHandler(url, { method: opts.method, headers: opts.headers, body: opts.body }, perform);
|
|
228
|
+
return { status: response.status, headers: Object.fromEntries(response.headers), text: await response.text() };
|
|
229
|
+
}
|
|
217
230
|
constructor(opts) {
|
|
218
231
|
this._aunPath = String(opts.aunPath ?? '');
|
|
219
232
|
this._verifySsl = opts.verifySsl ?? true;
|
|
220
233
|
this._log = opts.logger ?? noopLogger;
|
|
221
234
|
this._onChanged = opts.onChanged;
|
|
235
|
+
this._onCommitted = opts.onCommitted;
|
|
222
236
|
this._discoveryPort = opts.discoveryPort ?? null;
|
|
223
237
|
this._uploadViaGatewayHost = opts.uploadViaGatewayHost ?? false;
|
|
224
238
|
this._ownerAidGetter = opts.ownerAidGetter;
|
|
@@ -307,6 +321,31 @@ export class AgentMdManager {
|
|
|
307
321
|
loadRecord(aid) {
|
|
308
322
|
return this._loadRecord(aid);
|
|
309
323
|
}
|
|
324
|
+
updateRecord(aid, change) {
|
|
325
|
+
const target = this.safeAid(aid);
|
|
326
|
+
this._withRecordLock(target, () => {
|
|
327
|
+
const record = this._readRecordUnlocked(target, true);
|
|
328
|
+
change(record);
|
|
329
|
+
record.updated_at = Date.now();
|
|
330
|
+
this._writeRecordUnlocked(target, record);
|
|
331
|
+
});
|
|
332
|
+
this._cache.delete(target);
|
|
333
|
+
}
|
|
334
|
+
setOnCommitted(callback) { this._onCommitted = callback; }
|
|
335
|
+
async _saveCommittedRecord(aid, fields, strict = false) {
|
|
336
|
+
const pending = this._loadRecord(aid, true)?.pending_agent_md_notice;
|
|
337
|
+
const saved = this._saveRecord(aid, fields, strict);
|
|
338
|
+
if (saved.aid && pending?.message_id && this._onCommitted) {
|
|
339
|
+
const notice = (Array.isArray(saved.agent_md_change_outbox) ? saved.agent_md_change_outbox : []).find((item) => item.message_id === pending.message_id);
|
|
340
|
+
if (notice) {
|
|
341
|
+
try {
|
|
342
|
+
await this._onCommitted(aid, notice);
|
|
343
|
+
}
|
|
344
|
+
catch { }
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return saved;
|
|
348
|
+
}
|
|
310
349
|
_saveRecord(aid, fields, strict = false, observation) {
|
|
311
350
|
const target = String(aid ?? '').trim();
|
|
312
351
|
if (!target)
|
|
@@ -317,6 +356,15 @@ export class AgentMdManager {
|
|
|
317
356
|
let savedTo = '';
|
|
318
357
|
const record = this._withRecordLock(target, () => {
|
|
319
358
|
const next = { ...this._readRecordUnlocked(target, true), aid: target };
|
|
359
|
+
if (inputFields.pending_operation === '' && next.pending_operation === 'replace' && isJsonObject(next.pending_agent_md_notice)
|
|
360
|
+
&& typeof fields.content === 'string' && fields.content === next.pending_content) {
|
|
361
|
+
const notice = { ...next.pending_agent_md_notice, etag: String(inputFields.remote_etag ?? '') || AgentMdManager.contentEtag(fields.content) };
|
|
362
|
+
const outbox = Array.isArray(next.agent_md_change_outbox) ? [...next.agent_md_change_outbox] : [];
|
|
363
|
+
if (notice.owner_aid && notice.sender_aid && !outbox.some((item) => item.message_id === notice.message_id))
|
|
364
|
+
outbox.push(notice);
|
|
365
|
+
inputFields.agent_md_change_outbox = outbox;
|
|
366
|
+
inputFields.pending_agent_md_notice = {};
|
|
367
|
+
}
|
|
320
368
|
if (observation && (this.root !== observation.root || String(next.remote_etag ?? '') !== observation.etag || Number(next.observation_version ?? 0) !== observation.version))
|
|
321
369
|
throw ownershipFailure('unavailable', 'agent.md observation changed during download', true);
|
|
322
370
|
if (hasContent) {
|
|
@@ -399,7 +447,7 @@ export class AgentMdManager {
|
|
|
399
447
|
const rawContent = content === undefined || content === null ? String(this._loadRecord(target, true)?.local_draft_content ?? '') || this.readContent(target) : String(content);
|
|
400
448
|
if (!rawContent.trim())
|
|
401
449
|
throw new ValidationError('uploadAgentMd requires non-empty content');
|
|
402
|
-
const parsed = validateAgentMdDocument(rawContent, { expectedAid: target, validateOwnership: false });
|
|
450
|
+
const parsed = validateAgentMdDocument(rawContent, { expectedAid: target, validateOwnership: false, forUpload: true });
|
|
403
451
|
if (['group', 'org'].includes(String(parsed.frontmatter.type)))
|
|
404
452
|
return await this.uploadAs(target, rawContent, current);
|
|
405
453
|
if (parseAgentMdTailSignature(rawContent).signatures.length > 1) {
|
|
@@ -417,7 +465,7 @@ export class AgentMdManager {
|
|
|
417
465
|
}
|
|
418
466
|
async readAgentMdFresh(aid) {
|
|
419
467
|
const target = this.safeAid(aid), gateway = await this._resolveGateway(target);
|
|
420
|
-
const response = await
|
|
468
|
+
const response = await this._requestText(this._url(target, gateway, this._uploadViaGatewayHost), {
|
|
421
469
|
method: 'GET', verifySsl: this._verifySsl,
|
|
422
470
|
headers: { 'X-AUN-Signature-Format': 'multi-v1', Accept: 'text/markdown', 'Cache-Control': 'no-cache', ...(this._uploadViaGatewayHost ? { Host: target } : {}) },
|
|
423
471
|
timeoutMs: DEFAULT_HTTP_TIMEOUT_MS, redirectsLeft: 0, strictUtf8: true,
|
|
@@ -520,7 +568,7 @@ export class AgentMdManager {
|
|
|
520
568
|
if (viaGateway)
|
|
521
569
|
headers.Host = target;
|
|
522
570
|
const request = (url) => { if (method === 'PUT')
|
|
523
|
-
assertActive?.(); return
|
|
571
|
+
assertActive?.(); return this._requestText(url, { method, verifySsl: this._verifySsl, headers, body: raw, timeoutMs: DEFAULT_HTTP_TIMEOUT_MS, redirectsLeft: 0, strictUtf8: true }); };
|
|
524
572
|
const primary = this._url(target, gatewayUrl, viaGateway);
|
|
525
573
|
let response = await request(primary);
|
|
526
574
|
if (response.status === 404 && !headerValue(response.headers, 'X-AUN-Ownership-Protocol') && headerValue(response.headers, 'X-AUN-Ownership-Status') !== 'not_applicable') {
|
|
@@ -537,7 +585,7 @@ export class AgentMdManager {
|
|
|
537
585
|
const rawContent = String(content ?? '');
|
|
538
586
|
if (!rawContent.trim())
|
|
539
587
|
throw new ValidationError('uploadAgentMd requires non-empty content');
|
|
540
|
-
const parsed = validateAgentMdDocument(rawContent, { expectedAid: target, validateOwnership: false });
|
|
588
|
+
const parsed = validateAgentMdDocument(rawContent, { expectedAid: target, validateOwnership: false, forUpload: true });
|
|
541
589
|
if (['group', 'org'].includes(String(parsed.frontmatter.type)) && parsed.signature) {
|
|
542
590
|
const identity = await this._entitySigningIdentity(target, parsed.frontmatter, parsed.signature, signer);
|
|
543
591
|
await this._verifyDocument(rawContent, target, identity, true);
|
|
@@ -580,7 +628,7 @@ export class AgentMdManager {
|
|
|
580
628
|
const condition = pending.condition;
|
|
581
629
|
if (!condition || Object.keys(condition).length !== 1 || !(typeof condition.if_match === 'string' && condition.if_match || condition.if_none_match === '*'))
|
|
582
630
|
throw ownershipFailure('persistence_unavailable', 'pending agent.md requires its original document condition');
|
|
583
|
-
const parsed = validateAgentMdDocument(pending.content, { expectedAid: aid, validateOwnership: false });
|
|
631
|
+
const parsed = validateAgentMdDocument(pending.content, { expectedAid: aid, validateOwnership: false, forUpload: true });
|
|
584
632
|
const meta = parsed.frontmatter;
|
|
585
633
|
try {
|
|
586
634
|
if (pending.relation?.legacy === true)
|
|
@@ -593,15 +641,15 @@ export class AgentMdManager {
|
|
|
593
641
|
if (!identity || identity.aid !== aid || this._currentAid()?.aid !== aid || this._ownerAid() !== aid)
|
|
594
642
|
throw ownershipFailure('forbidden', 'body recovery requires its current subject identity');
|
|
595
643
|
await this._verifyDocument(pending.content, aid, identity, true, true);
|
|
596
|
-
const remote = await this.
|
|
597
|
-
if (!remote.exists || !isDeepStrictEqual(legacyRelationship(meta), legacyRelationship(validateAgentMdReadDocument(remote.content, { expectedAid: aid }).frontmatter)))
|
|
598
|
-
throw ownershipFailure('conflict', '
|
|
644
|
+
const remote = await this.readOwnershipFresh(aid);
|
|
645
|
+
if (remote.lock === 'locked' && (!remote.exists || !isDeepStrictEqual(legacyRelationship(meta), legacyRelationship(validateAgentMdReadDocument(remote.content, { expectedAid: aid }).frontmatter))))
|
|
646
|
+
throw ownershipFailure('conflict', 'locked agent.md relationship material must remain unchanged');
|
|
599
647
|
if (remote.etag === pending.content_etag && remote.content === pending.content) {
|
|
600
|
-
this.
|
|
648
|
+
await this._saveCommittedRecord(aid, { content: pending.content, remote_etag: remote.etag, pending_operation: '', pending_content: '', pending_content_etag: '', pending_error: '', pending_condition: {}, pending_relation: {}, pending_authorization: '' });
|
|
601
649
|
this._clearConfirmedDraft(aid, pending.content);
|
|
602
650
|
return true;
|
|
603
651
|
}
|
|
604
|
-
if (
|
|
652
|
+
if (condition.if_match && (!remote.exists || remote.etag !== condition.if_match) || condition.if_none_match === '*' && remote.exists)
|
|
605
653
|
throw ownershipFailure('conflict', 'pending agent.md original document condition changed');
|
|
606
654
|
await this._uploadPrepared(aid, pending.content, identity, condition);
|
|
607
655
|
return true;
|
|
@@ -624,7 +672,7 @@ export class AgentMdManager {
|
|
|
624
672
|
await this._verifyDocument(pending.content, aid, identity, true);
|
|
625
673
|
const remote = await this._readEntityFresh(aid);
|
|
626
674
|
if (remote.exists && remote.content === pending.content && remote.etag === pending.content_etag) {
|
|
627
|
-
const saved = this.
|
|
675
|
+
const saved = await this._saveCommittedRecord(aid, { content: pending.content, remote_etag: remote.etag, pending_operation: '', pending_content: '', pending_content_etag: '', pending_error: '', pending_condition: {}, pending_relation: {}, pending_authorization: '' });
|
|
628
676
|
if (!saved.aid)
|
|
629
677
|
throw new StateError('agent.md pending completion persistence failed');
|
|
630
678
|
this._clearConfirmedDraft(aid, pending.content);
|
|
@@ -648,9 +696,9 @@ export class AgentMdManager {
|
|
|
648
696
|
throw new StateError('pending agent.md requires a signer identity');
|
|
649
697
|
if (!multipleSignatures)
|
|
650
698
|
verifyAgentMdBodyUpdate(pending.content, identity.certPem, aid);
|
|
651
|
-
const remote = await this.
|
|
699
|
+
const remote = await this.readOwnershipFresh(aid);
|
|
652
700
|
if (remote.exists && remote.etag === pending.content_etag && remote.content === pending.content) {
|
|
653
|
-
const saved = this.
|
|
701
|
+
const saved = await this._saveCommittedRecord(aid, { content: pending.content, remote_etag: remote.etag, pending_operation: '', pending_content: '', pending_content_etag: '', pending_error: '', pending_condition: {}, pending_relation: {}, pending_authorization: '' });
|
|
654
702
|
if (!saved.aid)
|
|
655
703
|
throw new StateError('agent.md pending completion persistence failed');
|
|
656
704
|
this._clearConfirmedDraft(aid, pending.content);
|
|
@@ -658,8 +706,8 @@ export class AgentMdManager {
|
|
|
658
706
|
}
|
|
659
707
|
if (condition.if_match && (!remote.exists || remote.etag !== condition.if_match) || condition.if_none_match === '*' && remote.exists)
|
|
660
708
|
throw ownershipFailure('conflict', 'pending agent.md original document condition changed');
|
|
661
|
-
if (remote.exists && legacyRelationship(validateAgentMdReadDocument(remote.content, { expectedAid: aid }).frontmatter))
|
|
662
|
-
throw ownershipFailure('conflict', '
|
|
709
|
+
if (remote.lock === 'locked' && remote.exists && legacyRelationship(validateAgentMdReadDocument(remote.content, { expectedAid: aid }).frontmatter))
|
|
710
|
+
throw ownershipFailure('conflict', 'locked agent.md relationship material must remain unchanged');
|
|
663
711
|
await this._uploadPrepared(aid, pending.content, identity, condition);
|
|
664
712
|
return true;
|
|
665
713
|
}
|
|
@@ -669,7 +717,7 @@ export class AgentMdManager {
|
|
|
669
717
|
}
|
|
670
718
|
}
|
|
671
719
|
async _uploadPrepared(target, signedContent, signer, originalCondition) {
|
|
672
|
-
const meta = validateAgentMdDocument(signedContent, { expectedAid: target, validateOwnership: false }).frontmatter;
|
|
720
|
+
const meta = validateAgentMdDocument(signedContent, { expectedAid: target, validateOwnership: false, forUpload: true }).frontmatter;
|
|
673
721
|
const entity = ['group', 'org'].includes(String(meta.type));
|
|
674
722
|
const legacy = legacyRelationship(meta);
|
|
675
723
|
const draftStrict = !originalCondition || !this._pendingUpload(target, true);
|
|
@@ -681,24 +729,36 @@ export class AgentMdManager {
|
|
|
681
729
|
let condition = originalCondition;
|
|
682
730
|
let relation = entityContext ?? (this._pendingUpload(target, draftStrict))?.relation;
|
|
683
731
|
if (!condition) {
|
|
684
|
-
const fresh = entity ? await this._readEntityFresh(target) :
|
|
732
|
+
const fresh = entity ? await this._readEntityFresh(target) : await this._readBodyOriginalFresh(target);
|
|
685
733
|
condition = fresh.exists ? { if_match: fresh.etag } : { if_none_match: '*' };
|
|
686
734
|
if (!entity) {
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
735
|
+
// 锁未知时按 locked 处理:关系字段必须与原件完全一致
|
|
736
|
+
const locked = 'lock' in fresh && fresh.lock !== 'unlocked';
|
|
737
|
+
const original = fresh.exists ? legacyRelationship(validateAgentMdReadDocument(fresh.content, { expectedAid: target }).frontmatter) : undefined;
|
|
738
|
+
if (locked && !isDeepStrictEqual(legacy, original))
|
|
739
|
+
throw ownershipFailure('conflict', 'locked agent.md relationship material must remain unchanged');
|
|
740
|
+
if (original)
|
|
741
|
+
await this._verifyLegacyBodyContent(target, fresh.content);
|
|
742
|
+
if (legacy && locked)
|
|
690
743
|
relation = { legacy: true, base_content: fresh.content, base_content_etag: AgentMdManager.contentEtag(fresh.content), base_etag: fresh.etag, fields: legacy };
|
|
744
|
+
else if (legacy) {
|
|
745
|
+
const statement = parseOwnershipFile(signedContent, 'agent', { expectedSubAid: target }).statement;
|
|
746
|
+
relation = { relation_version: statement.relation_version, lock: 'unlocked', owner_aid: statement.owner_aid, statement };
|
|
691
747
|
}
|
|
692
|
-
else
|
|
693
|
-
if (fresh.exists && legacyRelationship(validateAgentMdReadDocument(fresh.content, { expectedAid: target }).frontmatter))
|
|
694
|
-
throw ownershipFailure('conflict', 'legacy relationship material cannot be removed or replaced');
|
|
748
|
+
else
|
|
695
749
|
relation = undefined;
|
|
696
|
-
}
|
|
697
750
|
}
|
|
698
751
|
}
|
|
699
752
|
const uploader = this._currentAid();
|
|
700
753
|
const entityAuthorization = '';
|
|
701
|
-
const
|
|
754
|
+
const existing = this._loadRecord(target, true);
|
|
755
|
+
const ownership = isJsonObject(meta.ownership) ? meta.ownership : {};
|
|
756
|
+
const statement = isJsonObject(ownership.statement) ? ownership.statement : {};
|
|
757
|
+
const noticeOwner = String(statement.owner_aid ?? ownership.owner_aid ?? meta.owner ?? '').trim();
|
|
758
|
+
const previousNotice = existing?.pending_content === signedContent && isJsonObject(existing.pending_agent_md_notice) ? existing.pending_agent_md_notice
|
|
759
|
+
: (Array.isArray(existing?.agent_md_change_outbox) ? existing.agent_md_change_outbox : []).find((item) => item.aid === target && item.owner_aid === noticeOwner && item.sender_aid === (uploader?.aid ?? this._ownerAid()) && item.etag === AgentMdManager.contentEtag(signedContent));
|
|
760
|
+
const notice = previousNotice ?? { sender_aid: uploader?.aid ?? this._ownerAid(), owner_aid: noticeOwner, aid: target, document_type: String(meta.type ?? 'agent'), message_id: crypto.randomUUID() };
|
|
761
|
+
const pending = this._saveRecord(target, { pending_operation: 'replace', pending_target_aid: target, pending_content: signedContent, pending_content_etag: AgentMdManager.contentEtag(signedContent), pending_error: '', pending_condition: condition, pending_relation: relation, pending_authorization: entityAuthorization, pending_agent_md_notice: notice }, draftStrict);
|
|
702
762
|
const savedCondition = pending.pending_condition;
|
|
703
763
|
if (pending.pending_content !== signedContent || savedCondition?.if_match !== condition.if_match || savedCondition?.if_none_match !== condition.if_none_match || pending.pending_authorization !== entityAuthorization || legacy && !isDeepStrictEqual(pending.pending_relation, relation))
|
|
704
764
|
throw new StateError('agent.md pending upload persistence failed');
|
|
@@ -710,7 +770,7 @@ export class AgentMdManager {
|
|
|
710
770
|
const authorization = entity ? entityAuthorization : delegated ? this._ownerUploadAuthorization(target, signedContent, owner) : '';
|
|
711
771
|
const result = await this._uploadHttp(target, signedContent, authorization, condition);
|
|
712
772
|
const remoteEtag = String(result.etag ?? '').trim();
|
|
713
|
-
const saved = this.
|
|
773
|
+
const saved = await this._saveCommittedRecord(target, {
|
|
714
774
|
content: signedContent, local_etag: AgentMdManager.contentEtag(signedContent), remote_etag: remoteEtag || undefined,
|
|
715
775
|
last_modified: String(result.last_modified ?? result.lastModified ?? '').trim(), fetched_at: Date.now(), checked_at: Date.now(),
|
|
716
776
|
remote_status: remoteEtag ? 'found' : 'unknown', last_error: '',
|
|
@@ -737,8 +797,19 @@ export class AgentMdManager {
|
|
|
737
797
|
throw ownershipFailure('invalid', 'stored legacy agent.md signature is invalid');
|
|
738
798
|
return parsed;
|
|
739
799
|
}
|
|
800
|
+
// 普通正文更新先严格读取以取得 NS 锁;关系 invalid/unavailable 时不阻断,回落普通原件读取,锁未知
|
|
801
|
+
async _readBodyOriginalFresh(target) {
|
|
802
|
+
try {
|
|
803
|
+
return await this.readOwnershipFresh(target);
|
|
804
|
+
}
|
|
805
|
+
catch (error) {
|
|
806
|
+
if (!(error instanceof AUNError) || !['invalid', 'unavailable'].includes(error.stringCode))
|
|
807
|
+
throw error;
|
|
808
|
+
return { ...await this.readAgentMdFresh(target), lock: 'unknown' };
|
|
809
|
+
}
|
|
810
|
+
}
|
|
740
811
|
async _readLegacyBodyBase(target) {
|
|
741
|
-
const response = await this.
|
|
812
|
+
const response = await this._readBodyOriginalFresh(target);
|
|
742
813
|
if (response.exists)
|
|
743
814
|
await this._verifyLegacyBodyContent(target, response.content);
|
|
744
815
|
return response;
|
|
@@ -754,14 +825,14 @@ export class AgentMdManager {
|
|
|
754
825
|
else
|
|
755
826
|
verifyAgentMdBodyUpdate(pending.content, identity.certPem, target);
|
|
756
827
|
const base = await this._verifyLegacyBodyContent(target, relation.base_content);
|
|
757
|
-
const candidate = validateAgentMdDocument(pending.content, { expectedAid: target, validateOwnership: false });
|
|
828
|
+
const candidate = validateAgentMdDocument(pending.content, { expectedAid: target, validateOwnership: false, forUpload: true });
|
|
758
829
|
if (!isDeepStrictEqual(legacyRelationship(base.frontmatter), relation.fields) || !isDeepStrictEqual(relationshipFields(candidate.frontmatter), relation.fields))
|
|
759
830
|
throw ownershipFailure('persistence_unavailable', 'pending legacy relationship material changed');
|
|
760
831
|
const remote = await this._readLegacyBodyBase(target);
|
|
761
832
|
if (!remote.exists)
|
|
762
833
|
throw ownershipFailure('conflict', 'pending legacy agent.md original document is missing');
|
|
763
834
|
if (remote.content === pending.content && remote.etag === pending.content_etag) {
|
|
764
|
-
const saved = this.
|
|
835
|
+
const saved = await this._saveCommittedRecord(target, { content: pending.content, remote_etag: remote.etag, pending_operation: '', pending_content: '', pending_content_etag: '', pending_error: '', pending_condition: {}, pending_relation: {}, pending_authorization: '' });
|
|
765
836
|
if (!saved.aid)
|
|
766
837
|
throw new StateError('agent.md pending completion persistence failed');
|
|
767
838
|
this._clearConfirmedDraft(target, pending.content);
|
|
@@ -775,7 +846,7 @@ export class AgentMdManager {
|
|
|
775
846
|
async _readEntityFresh(target) {
|
|
776
847
|
const gateway = await this._resolveGateway(target);
|
|
777
848
|
const headers = { 'X-AUN-Ownership-Check': '1', 'X-AUN-Signature-Format': 'multi-v1', 'Cache-Control': 'no-cache', ...(this._uploadViaGatewayHost ? { Host: target } : {}) };
|
|
778
|
-
const request = (url) =>
|
|
849
|
+
const request = (url) => this._requestText(url, { method: 'GET', verifySsl: this._verifySsl, headers, timeoutMs: DEFAULT_HTTP_TIMEOUT_MS, redirectsLeft: 0, strictUtf8: true });
|
|
779
850
|
const response = await request(this._url(target, gateway, this._uploadViaGatewayHost));
|
|
780
851
|
if (response.status !== 200 && response.status !== 404)
|
|
781
852
|
throw ownershipFailure('unavailable', `entity agent.md fresh read failed: HTTP ${response.status}`, true);
|
|
@@ -832,7 +903,7 @@ export class AgentMdManager {
|
|
|
832
903
|
async _verifyDocument(content, target, identity, current = false, bodyUpdate = false) {
|
|
833
904
|
const certificates = new Map();
|
|
834
905
|
const parsed = parseAgentMdTailSignature(content, !current);
|
|
835
|
-
const meta = validateAgentMdReadDocument(content, { expectedAid: target }).frontmatter;
|
|
906
|
+
const meta = current ? validateAgentMdDocument(content, { expectedAid: target, forUpload: true }).frontmatter : validateAgentMdReadDocument(content, { expectedAid: target }).frontmatter;
|
|
836
907
|
const historicalEntityOwner = !current && ['group', 'org'].includes(String(meta.type)) && parsed.signatures.length === 1 && parsed.fields?.signer_aid !== undefined && parsed.fields.signer_aid === meta.owner && parsed.fields.signer_aid !== meta.aid;
|
|
837
908
|
const readCompatibility = !current && (!['group', 'org'].includes(String(meta.type)) || meta.type === 'group' && !Object.hasOwn(meta, 'entity_cert_fingerprint') && parsed.signatures.length === 1 && (parsed.fields?.signer_aid === undefined || parsed.fields.signer_aid === meta.aid));
|
|
838
909
|
for (const item of parsed.signatures.slice(1)) {
|
|
@@ -902,7 +973,7 @@ export class AgentMdManager {
|
|
|
902
973
|
throw ownershipFailure('persistence_unavailable', 'agent.md upload requires its original document condition');
|
|
903
974
|
const gatewayUrl = await this._resolveGateway(target);
|
|
904
975
|
const authorization = String(ownerAuthorization ?? '').trim();
|
|
905
|
-
const meta = validateAgentMdDocument(signedContent, { expectedAid: target, validateOwnership: false }).frontmatter;
|
|
976
|
+
const meta = validateAgentMdDocument(signedContent, { expectedAid: target, validateOwnership: false, forUpload: true }).frontmatter;
|
|
906
977
|
const entity = ['group', 'org'].includes(String(meta.type));
|
|
907
978
|
const uploadHeaders = {
|
|
908
979
|
'X-AUN-Signature-Format': 'multi-v1',
|
|
@@ -915,7 +986,7 @@ export class AgentMdManager {
|
|
|
915
986
|
const token = await this._uploadAccessToken(entity ? this._ownerAid() : target, gatewayUrl);
|
|
916
987
|
uploadHeaders.Authorization = `Bearer ${token}`;
|
|
917
988
|
}
|
|
918
|
-
const uploadRequest = (url) =>
|
|
989
|
+
const uploadRequest = (url) => this._requestText(url, {
|
|
919
990
|
method: 'PUT',
|
|
920
991
|
verifySsl: this._verifySsl,
|
|
921
992
|
headers: uploadHeaders,
|
|
@@ -1204,7 +1275,7 @@ export class AgentMdManager {
|
|
|
1204
1275
|
async _head(aid) {
|
|
1205
1276
|
const target = this.safeAid(aid);
|
|
1206
1277
|
const gatewayUrl = await this._resolveGateway(target);
|
|
1207
|
-
const response = await
|
|
1278
|
+
const response = await this._requestText(this._url(target, gatewayUrl), {
|
|
1208
1279
|
method: 'HEAD',
|
|
1209
1280
|
verifySsl: this._verifySsl,
|
|
1210
1281
|
headers: { 'X-AUN-Signature-Format': 'multi-v1', Accept: 'text/markdown' },
|
|
@@ -1248,7 +1319,7 @@ export class AgentMdManager {
|
|
|
1248
1319
|
const headers = { 'X-AUN-Signature-Format': 'multi-v1', Accept: 'text/markdown' };
|
|
1249
1320
|
const etag = String(cached.remote_etag ?? cached.etag ?? cached.local_etag ?? '').trim();
|
|
1250
1321
|
const lastModified = String(cached.last_modified ?? '').trim();
|
|
1251
|
-
let response = await
|
|
1322
|
+
let response = await this._requestText(this._url(target, gatewayUrl), {
|
|
1252
1323
|
method: 'GET',
|
|
1253
1324
|
verifySsl: this._verifySsl,
|
|
1254
1325
|
headers,
|
|
@@ -1270,7 +1341,7 @@ export class AgentMdManager {
|
|
|
1270
1341
|
};
|
|
1271
1342
|
}
|
|
1272
1343
|
else if (response.status === 304) {
|
|
1273
|
-
response = await
|
|
1344
|
+
response = await this._requestText(this._url(target, gatewayUrl), {
|
|
1274
1345
|
method: 'GET',
|
|
1275
1346
|
verifySsl: this._verifySsl,
|
|
1276
1347
|
headers: { 'X-AUN-Signature-Format': 'multi-v1', Accept: 'text/markdown' },
|